diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d0f7aaf76f4d40ed1b4b12f2ffcdd4c56e6d401d..2a592026864d87408227c2c378f056b5341f7d2d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,6 +8,8 @@ job1: - echo $EXTERNAL_SHARE_DIR - echo $SHELL - echo $OAI_TEST_CASE_GROUP + - echo $MACHINELIST + - echo $MACHINELISTGENERIC - git rev-parse --abbrev-ref HEAD - git_repo=`git config --get remote.origin.url` - git_head=`git rev-parse HEAD` @@ -25,8 +27,8 @@ job1: - echo $NRUNS_LTE_SOFTMODEM - echo $TIMEOUT_CMD - mkdir -p $OPENAIR_DIR/cmake_targets/autotests/log - - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -c -5GRepo $git_repo -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS $OAI_EXTRA_ARGS -g "$OAI_TEST_CASE_GROUP">& $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log - - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -r -5GRepo $git_repo -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS `echo $OAI_EXTRA_ARGS` -g "$OAI_TEST_CASE_GROUP" --nrun_lte_softmodem $NRUNS_LTE_SOFTMODEM --timeout_cmd $TIMEOUT_CMD >& $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log + - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -c -5GRepo $git_repo -MachineList "$MACHINELIST" -MachineListGeneric "$MACHINELISTGENERIC" -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS $OAI_EXTRA_ARGS -g "$OAI_TEST_CASE_GROUP">& $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log + - python $OPENAIR_DIR/cmake_targets/autotests/run_exec_lte-softmodem_tests.py -r -5GRepo $git_repo -MachineList "$MACHINELIST" -MachineListGeneric "$MACHINELISTGENERIC" -5GRepoHeadVersion $git_head -n $NFS_SHARE_DIR -u $OAI_USER -p $OAI_PASS `echo $OAI_EXTRA_ARGS` -g "$OAI_TEST_CASE_GROUP" --nrun_lte_softmodem $NRUNS_LTE_SOFTMODEM --timeout_cmd $TIMEOUT_CMD >& $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log - mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest.log - mv $OPENAIR_DIR/cmake_targets/autotests/python_autotest_cleanup.log $OPENAIR_DIR/cmake_targets/autotests/log/python_autotest_cleanup.log - sshpass -p "$OAI_PASS" rsync -az -e "ssh -o StrictHostKeyChecking=no " --rsync-path="mkdir -p $NFS_TEST_RESULTS_DIR && rsync" $OPENAIR_DIR/cmake_targets/autotests/log $OAI_USER@localhost:$NFS_TEST_RESULTS_DIR diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 553309f237e93b253eb67ff5e864705e8455d8e9..a83bce5e8b4ac8bd9f942b3be484600bb8859838 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -126,6 +126,7 @@ endmacro(add_list_string_option) if (CMAKE_BUILD_TYPE STREQUAL "") set(CMAKE_BUILD_TYPE "RelWithDebInfo") endif() +message("CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}") add_list_string_option(CMAKE_BUILD_TYPE "RelWithDebInfo" "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." Debug Release RelWithDebInfo MinSizeRel) Message("Architecture is ${CMAKE_SYSTEM_PROCESSOR}") @@ -922,7 +923,14 @@ add_library(SECU_CN ${SECU_CN_SRC}) # Scheduler ################################" -file(GLOB SCHED_SRC ${OPENAIR1_DIR}/SCHED/*.c) +set(SCHED_SRC + ${OPENAIR1_DIR}/SCHED/phy_procedures_lte_eNb.c + ${OPENAIR1_DIR}/SCHED/phy_procedures_lte_ue.c + ${OPENAIR1_DIR}/SCHED/phy_procedures_lte_common.c + ${OPENAIR1_DIR}/SCHED/phy_mac_stub.c + ${OPENAIR1_DIR}/SCHED/pucch_pc.c + ${OPENAIR1_DIR}/SCHED/pusch_pc.c +) add_library(SCHED_LIB ${SCHED_SRC}) # Layer 1 @@ -1624,10 +1632,9 @@ target_link_libraries (lte-softmodem -ldl RRC_LIB S1AP_LIB S1AP_ENB GTPV1U SECU_CN SECU_OSA UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS L2 ${MSC_LIB} ${RAL_LIB} ${NAS_UE_LIB} ${ITTI_LIB} ${MIH_LIB} -Wl,--end-group ) - target_link_libraries (lte-softmodem ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} sctp ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} ) -target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES}) +target_link_libraries (lte-softmodem ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP target_link_libraries (lte-softmodem ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-softmodem ${T_LIB}) @@ -1662,7 +1669,7 @@ target_link_libraries (lte-softmodem-nos1 target_link_libraries (lte-softmodem-nos1 ${LIBXML2_LIBRARIES}) target_link_libraries (lte-softmodem-nos1 pthread m ${CONFIG_LIBRARIES} rt crypt ${CRYPTO_LIBRARIES} ${OPENSSL_LIBRARIES} ${NETTLE_LIBRARIES} ${option_HW_lib} ${option_TP_lib} ${XFORMS_LIBRARIES} ) -target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES}) +target_link_libraries (lte-softmodem-nos1 ${LIBBOOST_LIBRARIES} -lboost_system) #Added manually as it is not found for some reason for USRP target_link_libraries (lte-softmodem-nos1 ${LIB_LMS_LIBRARIES}) target_link_libraries (lte-softmodem-nos1 ${T_LIB}) @@ -1685,7 +1692,7 @@ target_link_libraries(rrh_gw UTIL LFDS -Wl,--end-group ) target_link_libraries (rrh_gw rt pthread m ) -target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES} ) +target_link_libraries (rrh_gw ${option_HW_lib} ${option_TP_lib} ${LIBBOOST_LIBRARIES} -lboost_system ) #Added manually as it is not found for some reason for USRP target_link_libraries (rrh_gw ${LIB_LMS_LIBRARIES}) target_link_libraries (rrh_gw ${T_LIB}) diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt index cf1e28dd050498d7107abbc8461d9b07e4486477..245b235ebffeb3cdf791a9ab1225eaea915c51bb 100644 --- a/cmake_targets/autotests/README.txt +++ b/cmake_targets/autotests/README.txt @@ -16,17 +16,22 @@ Obj.# Case# Test# Description 01 01 20 Build lte-softmodem.USRP.Rel10 01 01 21 Build lte-softmodem.EXMIMO.Rel10 01 01 22 Build lte-softmodem.BLADERF.Rel10 -01 01 23 Build lte-softmodem.ETHERNET.Rel10 +01 01 23 Build lte-softmodem.ETHERNET.Rel10 (RCC) 01 01 24 Build lte-softmodem.LMSSDR.Rel10 01 01 30 Build (dlsim.Rel10 + ulsim.Rel10 + pucchsim.Rel10 + prachsim.Rel10 + pdcchsim.Rel10 + pbchsim.Rel10 + mbmssim.Rel10 secu_knas_encrypt_eia1.Rel10 secu_kenb.Rel10 aes128_ctr_encrypt.Rel10 aes128_ctr_decrypt.Rel10 secu_knas_encrypt_eea2.Rel10 secu_knas.Rel10 secu_knas_encrypt_eea1.Rel10 kdf.Rel10 aes128_cmac_encrypt.Rel10 secu_knas_encrypt_eia2.Rel10) -01 01 40 Build RRH Gateway for USRP (Rel 10) -01 01 41 Build RRH Gateway for EXMIMO (Rel 10) -01 01 42 Build RRH Gateway for BLADERF (Rel 10) -01 01 43 Build RRH Gateway for LMSSDR (Rel 10) +01 01 40 Build RRH Gateway (time domain) for USRP (Rel 10) +01 01 41 Build RRH Gateway (time domain) for EXMIMO (Rel 10) +01 01 42 Build RRH Gateway (time domain) for BLADERF (Rel 10) +01 01 43 Build RRH Gateway (time domain) for LMSSDR (Rel 10) + +01 01 50 Build RRU (NGFI) for USRP (Rel 10) w/ ETHERNET transport +01 01 51 Build RRU (NGFI) for EXMIMO (Rel 10) w/ ETHERNET transport +01 01 52 Build RRU (NGFI) for BLADERF (Rel 10) w/ ETHERNET transport +01 01 53 Build RRU (NGFI) for LMSSDR (Rel 10) w/ ETHERNET transport 01 02 Run OAISIM-NOS1 Rel10 (TDD + 5MHz/10MHz/20MHz + TM 1,2), and check the operation @@ -249,4 +254,4 @@ Obj.# Case# Test# Description #TODO: Add test cases for 10,20 MHz #TODO: Add test cases for TDD/FDD #TODO: Test and compile seperately for Rel8/Rel10 -#TODO: Case03.py eMBMS test case \ No newline at end of file +#TODO: Case03.py eMBMS test case diff --git a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py index b25bc08427675a828ffc46edca332512bce57d9f..eed2fffb77a194fd82377a5f834fe1d4e475725e 100755 --- a/cmake_targets/autotests/run_exec_lte-softmodem_tests.py +++ b/cmake_targets/autotests/run_exec_lte-softmodem_tests.py @@ -313,7 +313,7 @@ def SSHSessionWrapper(machine, username, key_file, password, logdir_remote, logd # \param CleanUpAluLteBox program to terminate AlU Bell Labs LTE Box # \param ExmimoRfStop String to stop EXMIMO card (specified in test_case_list.xml) def cleanOldPrograms(oai, programList, CleanUpAluLteBox, ExmimoRfStop, logdir, logdirOAI5GRepo): - cmd = 'killall -9 -q -r ' + programList + cmd = 'sudo -E killall -9 -q -r ' + programList result = oai.send(cmd, True) print "Killing old programs..." + result programArray = programList.split() @@ -1020,6 +1020,13 @@ def handle_testcaseclass_softmodem (testcase, oldprogramList, logdirOAI5GRepo , run_result=0 run_result_string = ' RUN_'+str(run) + ' = FAIL(Thread_Busy)' + #If there is Segmentation fault, we mark the test case as failure as most likely eNB crashed + cmd = "grep -ilr \"segmentation fault\" " + logdir_local_testcase + " | cat " + cmd_out = subprocess.check_output ([cmd], shell=True) + if len(cmd_out) !=0: + run_result=0 + run_result_string = ' RUN_'+str(run) + ' = FAIL(SEGFAULT)' + run_result_string = run_result_string + tput_run_string test_result=test_result & run_result @@ -1261,7 +1268,8 @@ except KeyError: sys.exit(1) print "Killing zombie ssh sessions from earlier sessions..." -cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"|tr -s \" \" :|cut -f 2 -d :|xargs kill -9 ' +cmd='ps aux |grep \"/usr/bin/ssh -q -l guptar\"| awk \'{print $2}\' | sudo xargs kill -9 ' + os.system(cmd) if flag_start_testcase == False: @@ -1426,13 +1434,25 @@ for oai in oai_list: setuplogfile = logdir + '/setup_log_' + MachineList[index] + '_.txt' setup_script = locallogdir + '/setup_script_' + MachineList[index] + '_.txt' + + #Sometimes git fails so the script below retries in that case + localfile = os.path.expandvars('$OPENAIR_DIR/cmake_targets/autotests/tools/git-retry.sh') + remotefile = logdir + '/git-retry.sh' + paramList=[] + port=22 + paramList.append ( {"operation":'put', "localfile":localfile, "remotefile":remotefile} ) + sftp_log = os.path.expandvars(locallogdir + '/sftp_module.log') + sftp_module (user, pw, MachineList[index], port, paramList, sftp_log) + + cmd = ' ( \n' #cmd = cmd + 'rm -fR ' + logdir + '\n' #cmd = cmd + 'mkdir -p ' + logdir + '\n' cmd = cmd + 'cd '+ logdir + '\n' - cmd = cmd + 'git config --global http.sslVerify false \n' - cmd = cmd + 'git clone '+ GitOAI5GRepo +' \n' - cmd = cmd + 'git clone '+ GitOpenaircnRepo + ' \n' + cmd = cmd + 'sudo apt-get install -y git \n' + cmd = cmd + 'chmod 700 ' + logdir + '/git-retry.sh \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOAI5GRepo +' \n' + cmd = cmd + logdir + '/git-retry.sh clone '+ GitOpenaircnRepo + ' \n' cmd = cmd + 'cd ' + logdirOAI5GRepo + '\n' cmd = cmd + 'git checkout ' + GitOAI5GRepoBranch + '\n' #cmd = cmd + 'git checkout ' + GitOAI5GHeadVersion + '\n' diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml index 11a0c172db05dac7613ac65aa7f5dea10bcab95c..696b732fb463e9f75c1fb3d5cbbd931ce4a1fdd8 100644 --- a/cmake_targets/autotests/test_case_list.xml +++ b/cmake_targets/autotests/test_case_list.xml @@ -1,18 +1,18 @@ <testCaseList> -<MachineList>mozart tique stevens amerique</MachineList> +<MachineList>mozart hutch starsky stevens amerique calisson nano </MachineList> <NFSResultsShare>/mnt/sradio/TEST_RESULTS/</NFSResultsShare> <GitOAI5GRepo>https://gitlab.eurecom.fr/oai/openairinterface5g.git</GitOAI5GRepo> <GitOpenair-cnRepo>https://gitlab.eurecom.fr/oai/openair-cn.git</GitOpenair-cnRepo> <GitOAI5GRepoBranch>develop</GitOAI5GRepoBranch> <GitOpenair-cnRepoBranch>develop</GitOpenair-cnRepoBranch> - <CleanUpOldProgs>oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd</CleanUpOldProgs> + <CleanUpOldProgs>oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim configure_cots* wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd starthss start_ltebox stop_ltebox configure_cots_sony_experia_m4_ue configure_cots_huaweiE398_ue configure_cots_bandrich_ue</CleanUpOldProgs> <CleanUpAluLteBox>sudo -S -E /opt/ltebox/tools/stop_ltebox</CleanUpAluLteBox> -<ExmimoRfStop>$OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg</ExmimoRfStop> +<ExmimoRfStop>exmimo_pci=`lspci -m | grep Xilinx`; if [ -n "$exmimo_pci" ] ; then $OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; fi; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg</ExmimoRfStop> <Timeout_execution>36000</Timeout_execution> - <TestCaseExclusionList>010141 0102+ 010304 010305 0104+ 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 016102 016105 016502 016505 017002 017005 017502 017505 018002 018005 018502 018505</TestCaseExclusionList> + <TestCaseExclusionList>010141 0102+ 010304 010305 0104+ 015506 015507 015508 015509 015510 015511 015602 015605 015702 015705 016102 016105 016502 016505 017002 017005 017502 017505 018002 018005 </TestCaseExclusionList> <nruns_lte-softmodem>3</nruns_lte-softmodem> - <MachineListGeneric>mozart tique stevens amerique </MachineListGeneric> + <MachineListGeneric>mozart hutch starsky stevens amerique calisson </MachineListGeneric> <testCase id="010101" > <class>compilation</class> <desc>Build oaisim.Rel8</desc> @@ -381,6 +381,85 @@ <nruns>1</nruns> </testCase> + <testCase id="010150" > + <class>compilation</class> + <desc>Build RRU (NGFI) for USRP (Rel 10) w/ ETHERNET transport</desc> + <pre_compile_prog></pre_compile_prog> + <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog> + <compile_prog_args>--eNB -w USRP -t ETHERNET -c </compile_prog_args> + <compile_prog_out>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_usrpdevif.so + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_eth_transpro.so</compile_prog_out> + <pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec> + <pre_exec_args></pre_exec_args> + <main_exec></main_exec> + <main_exec_args></main_exec_args> + <search_expr_true></search_expr_true> + <search_expr_false></search_expr_false> + <tags>RRU.USRP.Rel10</tags> + <nruns>1</nruns> + </testCase> + + <testCase id="010151" > + <class>compilation</class> + <desc>Build RRU (NGFI) for EXMIMO (Rel 10) w/ ETHERNET transport</desc> + <pre_compile_prog></pre_compile_prog> + <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog> + <compile_prog_args>--eNB -w EXMIMO -t ETHERNET -c </compile_prog_args> + <compile_prog_out>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/CMakeFiles/openair_rf/openair_rf.ko + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/updatefw + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/oarf_config_exmimo.oct + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_exmimodevif.so + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_eth_transpro.so</compile_prog_out> + <pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec> + <pre_exec_args></pre_exec_args> + <main_exec></main_exec> + <main_exec_args></main_exec_args> + <search_expr_true></search_expr_true> + <search_expr_false></search_expr_false> + <tags>RRU.EXMIMO.Rel10</tags> + <nruns>1</nruns> + </testCase> + + <testCase id="010152" > + <class>compilation</class> + <desc>Build RRU (NGFI) for BLADERF (Rel 10) w/ ETHERNET transport</desc> + <pre_compile_prog></pre_compile_prog> + <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog> + <compile_prog_args>--eNB -w BLADERF -t ETHERNET -c </compile_prog_args> + <compile_prog_out>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_bladerfdevif.so + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_eth_transpro.so</compile_prog_out> + <pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec> + <pre_exec_args></pre_exec_args> + <main_exec></main_exec> + <main_exec_args></main_exec_args> + <search_expr_true></search_expr_true> + <search_expr_false></search_expr_false> + <tags>RRU.BLADERF.Rel10</tags> + <nruns>1</nruns> + </testCase> + + <testCase id="010153" > + <class>compilation</class> + <desc>Build RRU (NGFI) for LMSSDR (Rel 10) w/ ETHERNET transport</desc> + <pre_compile_prog></pre_compile_prog> + <compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</compile_prog> + <compile_prog_args>--eNB -w LMSSDR -t ETHERNET -c </compile_prog_args> + <compile_prog_out>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_lmssdrdevif.so + $OPENAIR_DIR/cmake_targets/lte_build_oai/build/liboai_eth_transpro.so</compile_prog_out> + <pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</pre_exec> + <pre_exec_args></pre_exec_args> + <main_exec></main_exec> + <main_exec_args></main_exec_args> + <search_expr_true></search_expr_true> + <search_expr_false></search_expr_false> + <tags>RRU.LMSSDR.Rel10</tags> + <nruns>1</nruns> + </testCase> + <testCase id="010200"> <class>execution</class> <desc>Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit</desc> @@ -929,7 +1008,7 @@ <testCase id="015500" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -946,16 +1025,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1004,7 +1083,7 @@ <testCase id="015501" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1021,16 +1100,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1078,7 +1157,7 @@ <testCase id="015502" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1096,17 +1175,17 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -1153,7 +1232,7 @@ <testCase id="015503" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1170,16 +1249,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1226,7 +1305,7 @@ <testCase id="015504" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1243,16 +1322,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1299,7 +1378,7 @@ <testCase id="015505" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1317,17 +1396,17 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -1375,7 +1454,7 @@ <testCase id="015506" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1392,16 +1471,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1450,7 +1529,7 @@ <testCase id="015507" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1467,16 +1546,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1523,7 +1602,7 @@ <testCase id="015508" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1540,16 +1619,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1597,7 +1676,7 @@ <testCase id="015509" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1614,16 +1693,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1671,7 +1750,7 @@ <testCase id="015510" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1688,16 +1767,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1745,7 +1824,7 @@ <testCase id="015511" > <class>lte-softmodem</class> <desc></desc> - <eNB>calisson</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1762,17 +1841,17 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 2 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 2 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.82/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth5\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.82/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -1819,7 +1898,7 @@ <testCase id="015512" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1836,16 +1915,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1894,7 +1973,7 @@ <testCase id="015513" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1911,16 +1990,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -1968,7 +2047,7 @@ <testCase id="015514" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -1986,17 +2065,17 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -2043,7 +2122,7 @@ <testCase id="015515" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -2060,16 +2139,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -2116,7 +2195,7 @@ <testCase id="015516" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -2133,16 +2212,16 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -2189,7 +2268,7 @@ <testCase id="015517" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -2207,17 +2286,17 @@ targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -3314,7 +3393,6 @@ c <EPC_compile_prog_args></EPC_compile_prog_args> <HSS_compile_prog>sudo mkdir -p /usr/local/etc/oai/freeDiamter; sudo cp -vf $OPENAIRCN_DIR/ETC/hss.conf /usr/local/etc/oai ; sudo cp -vf $OPENAIRCN_DIR/ETC/hss_fd.conf /usr/local/etc/oai/freeDiameter ; $OPENAIRCN_DIR/SCRIPTS/check_hss_s6a_certificate /usr/local/etc/oai/freeDiameter/ hss.openair4G.eur; $OPENAIRCN_DIR/SCRIPTS/build_hss -c </HSS_compile_prog> <HSS_compile_prog_args></HSS_compile_prog_args> -c <EPC_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1</EPC_pre_exec> <EPC_pre_exec_args></EPC_pre_exec_args> <EPC_main_exec>sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc </EPC_main_exec> @@ -3358,7 +3436,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3430,7 +3508,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3502,7 +3580,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3574,7 +3652,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3645,7 +3723,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args>sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3717,7 +3795,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3788,7 +3866,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3860,7 +3938,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -3932,7 +4010,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -4004,7 +4082,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -4075,7 +4153,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args>sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -4147,7 +4225,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/configure_usrpb210.py --stop-usrpb210 ; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -4220,7 +4298,7 @@ c <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>sleep 15; $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail ; cp $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf $OPENAIR_TESTDIR/enb.conf</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7015,7 +7093,7 @@ c <testCase id="025500" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7032,16 +7110,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7090,7 +7168,7 @@ c <testCase id="025501" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7107,16 +7185,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7164,7 +7242,7 @@ c <testCase id="025502" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7182,17 +7260,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -E </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7239,7 +7317,7 @@ c <testCase id="025503" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7256,17 +7334,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7313,7 +7391,7 @@ c <testCase id="025504" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7330,16 +7408,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7387,7 +7465,7 @@ c <testCase id="025505" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7405,17 +7483,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -E </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7462,7 +7540,7 @@ c <testCase id="025506" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7479,16 +7557,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7537,7 +7615,7 @@ c <testCase id="025507" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7554,16 +7632,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7611,7 +7689,7 @@ c <testCase id="025508" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7629,17 +7707,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7686,7 +7764,7 @@ c <testCase id="025509" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7703,16 +7781,16 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> @@ -7760,7 +7838,7 @@ c <testCase id="025510" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7777,17 +7855,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7834,7 +7912,7 @@ c <testCase id="025511" > <class>lte-softmodem</class> <desc></desc> - <eNB>tique</eNB> + <eNB>hutch</eNB> <UE>stevens</UE> <EPC>amerique</EPC> <TimeOut_cmd>390</TimeOut_cmd> @@ -7852,17 +7930,17 @@ c targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf frame_type \"FDD\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_rx 1 targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf nb_antennas_tx 1 - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.147/24\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth1\" - targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.147/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1_MME \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1_MME \"192.168.12.19/24\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_INTERFACE_NAME_FOR_S1U \"eth0\" + targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_IPV4_ADDRESS_FOR_S1U \"192.168.12.19/24\" targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf ENB_PORT_FOR_S1U 2152</eNB_config_file> <eNB_compile_prog>$OPENAIR_DIR/cmake_targets/build_oai</eNB_compile_prog> <eNB_compile_prog_args>--eNB -w USRP -x -c </eNB_compile_prog_args> <eNB_pre_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash</eNB_pre_exec> <eNB_pre_exec_args></eNB_pre_exec_args> - <eNB_main_exec>$OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> - <eNB_main_exec_args> -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> + <eNB_main_exec>$OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem</eNB_main_exec> + <eNB_main_exec_args> -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf </eNB_main_exec_args> <eNB_traffic_exec></eNB_traffic_exec> <eNB_traffic_exec_args></eNB_traffic_exec_args> <eNB_search_expr_true></eNB_search_expr_true> @@ -7909,7 +7987,3 @@ c </testCaseList> - - - - diff --git a/cmake_targets/autotests/tools/git-retry.sh b/cmake_targets/autotests/tools/git-retry.sh new file mode 100755 index 0000000000000000000000000000000000000000..b897ba379d0a9b12b755603d72bdcb64a254f302 --- /dev/null +++ b/cmake_targets/autotests/tools/git-retry.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +#Simple script to retry git clone in case of failure + +REALGIT=/usr/bin/git + +RETRIES=10 +DELAY=10 +COUNT=1 +while [ $COUNT -lt $RETRIES ]; do + $REALGIT $* >> git-clone-`hostname`-log.txt 2>&1 + if [ $? -eq 0 ]; then + RETRIES=0 + break + fi + let COUNT=$COUNT+1 + sleep $DELAY +done diff --git a/cmake_targets/autotests/tools/remove_old_programs.bash b/cmake_targets/autotests/tools/remove_old_programs.bash index 772ba11f58342d542aba7ff980fa39996b82943f..c5c26e3752c1bcdc2208cf7ab5db22bba8fe2a48 100755 --- a/cmake_targets/autotests/tools/remove_old_programs.bash +++ b/cmake_targets/autotests/tools/remove_old_programs.bash @@ -1,7 +1,32 @@ #!/bin/bash #$1 programs to be killed and checked -var=`ps -A |grep -E -i $1` +echo "removing old programs..." +echo "args = $1" +echo "script name = $0" +filename=$(basename "$0") +echo "filename = $filename" +echo "programs to be killed...$1" + +echo "bash PID = $$" +pid="$$" +echo "pid = $pid" + +echo "Killing programs now..." + +ps -aux |grep -E -i -w "$1" + +var=`ps -aux |grep -E -i -w "$1" |awk '{print $2}'| tr '\n' ' ' | sed "s/$pid/ /"` +echo "Killing processes...$var" +#var=`ps -aux |grep -E -i '$1' |awk '{print $2}'| tr '\n' ' ' | sed "s/$pid/ /"` +#echo $var +if [ -n "$var" ] ; then sudo kill -9 $var ; fi + +#| sudo xargs kill -9 + +echo "checking for old programs..." +var=`ps -aux |grep -E -i -w '$1' |grep -Ev 'grep' | grep -Ev '$filename'` + echo $var if [ -n "$var" ]; then echo 'Match found'; else echo 'Match not found' ;fi diff --git a/cmake_targets/autotests/tools/run_gdb b/cmake_targets/autotests/tools/run_gdb new file mode 100755 index 0000000000000000000000000000000000000000..a12d6ce21dc0c7df6fc77c200ee766ebe7dab3f6 --- /dev/null +++ b/cmake_targets/autotests/tools/run_gdb @@ -0,0 +1,56 @@ +#!/bin/bash + +#arg0 -> Name of executable +#args[1...N] -> arguments to be passed to executable +if [ -z "$OPENAIR_DIR" ] +then + echo "OPENAIR_DIR environment not set. Exiting.." + exit +fi + +source $OPENAIR_DIR/cmake_targets/tools/build_helper + +args=($*) +exec_name=${args[0]} +exe_args=(${args[@]:1}) +gdb_file=$OPENAIR_DIR/targets/bin/gdb_file +gdb_log=$OPENAIR_DIR/targets/bin/gdb_log.bt + +echo "args = ${args[@]}" +echo "exec_name = $exec_name" +echo "exe_args = ${exe_args[@]}" +echo "gdb log file = $gdb_log" + +$SUDO rm -fr $gdb_file $gdb_log +$SUDO touch $gdb_file $gdb_log +$SUDO chmod 777 $gdb_file $gdb_log + +$SUDO echo "file $exec_name" >> $gdb_file +$SUDO echo "set args ${exe_args[@]}" >> $gdb_file +$SUDO echo "run" >> $gdb_file +$SUDO echo "set logging overwrite on" >> $gdb_file +$SUDO echo "set logging file $gdb_log" >> $gdb_file +$SUDO echo "set logging on" >> $gdb_file +$SUDO echo "set pagination off" >> $gdb_file +$SUDO echo "handle SIG33 pass nostop noprint" >> $gdb_file +$SUDO echo "echo backtrace:\n" >> $gdb_file +$SUDO echo "backtrace full" >> $gdb_file +$SUDO echo "echo \n\nVariables:\n" >> $gdb_file +$SUDO echo "info variables" >> $gdb_file +$SUDO echo "echo \n\nlocals:\n" >> $gdb_file +$SUDO echo "info locals" >> $gdb_file +$SUDO echo "echo \n\nregisters:\n" >> $gdb_file +$SUDO echo "info registers" >> $gdb_file +$SUDO echo "echo \n\ncurrent instructions:\n" >> $gdb_file +$SUDO echo "x/16i \$pc" >> $gdb_file +$SUDO echo "echo \n\nthreads backtrace:\n" >> $gdb_file +$SUDO echo "thread apply all backtrace" >> $gdb_file +$SUDO echo "set logging off" >> $gdb_file +$SUDO echo "quit" >> $gdb_file + +echo "Contents of gdb_file...start" +$SUDO cat $gdb_file +echo "Contents of gdb_file...finish" + +$SUDO gdb -n -x $gdb_file 2>&1 + diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai index 7ff2673b6b01bf30ca8410f0a77cd9bc58ab3225..967c92f557f1273c833e804cc0b14277128d7c95 100755 --- a/cmake_targets/build_oai +++ b/cmake_targets/build_oai @@ -61,6 +61,7 @@ TEST_CASE_GROUP="" BUILD_DOXYGEN=0 T_TRACER="False" DISABLE_HARDWARE_DEPENDENCY="False" +CMAKE_BUILD_TYPE="" trap handle_ctrl_c INT function print_help() { @@ -82,7 +83,7 @@ Options --install-optional-packages Install useful but not mandatory packages such as valgrind -g | --run-with-gdb - Add debugging symbols to compilation directives + Add debugging symbols to compilation directives. It also disables any compiler optimization. -h | --help Print this help --eNB @@ -170,7 +171,8 @@ function main() { shift;; -g | --run-with-gdb) GDB=1 - echo_info "Will Compile with gdb symbols" + CMAKE_BUILD_TYPE="Debug" + echo_info "Will Compile with gdb symbols and disable compiler optimization" shift;; --eNB) eNB=1 @@ -443,6 +445,7 @@ function main() { if [ "$NOS1" = "1" ] ; then cat $DIR/$lte_build_dir/CMakeLists.template >> $cmake_file fi + echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file echo "set ( XFORMS $XFORMS )" >> $cmake_file echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file @@ -568,6 +571,8 @@ function main() { cp $OPENAIR_DIR/cmake_targets/tools/init_exmimo2 $dbin fi + # oaisim compilation + ############### if [ "$oaisim" = "1" ] ; then dconf=$OPENAIR_DIR/targets/bin if [ "$NOS1" = "1" ] ; then @@ -581,6 +586,7 @@ function main() { echo_info "Compiling $oaisim_exec ($oaisim_build_dir)" cmake_file=$DIR/$oaisim_build_dir/CMakeLists.txt cp $DIR/$oaisim_build_dir/CMakeLists.template $cmake_file + echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >> $cmake_file echo "set ( XFORMS $XFORMS )" >> $cmake_file echo "set ( PRINT_STATS $PRINT_STATS )" >> $cmake_file @@ -649,9 +655,10 @@ function main() { cmake_file=$DIR/oaisim_mme_build_oai/CMakeLists.txt cp $DIR/oaisim_mme_build_oai/CMakeLists.template $cmake_file - echo "set(XFORMS $XFORMS )" >> $cmake_file - echo "set(RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file - echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file + echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file + echo "set ( XFORMS $XFORMS )" >> $cmake_file + echo "set ( RRC_ASN1_VERSION \"${REL}\")" >> $cmake_file + echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file echo "set ( T_TRACER $T_TRACER )" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file #[ "$CLEAN" = "1" ] && rm -rf $DIR/oaisim_mme_build_oai/build @@ -676,13 +683,14 @@ function main() { mkdir -p $DIR/$rrh_build_dir/build cmake_file=$DIR/$rrh_build_dir/CMakeLists.txt echo "cmake_minimum_required(VERSION 2.8)" > $cmake_file - echo "set(ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file - echo "set(ENABLE_ITTI False )" >> $cmake_file - echo "set(RF_BOARD \"${HW}\")" >> $cmake_file - echo "set(TRANSP_PRO \"${TP}\")" >> $cmake_file - echo 'set(PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file - echo "set (DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file - echo "set (CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file + echo "set ( CMAKE_BUILD_TYPE $CMAKE_BUILD_TYPE )" >> $cmake_file + echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )" >> $cmake_file + echo "set ( ENABLE_ITTI False )" >> $cmake_file + echo "set ( RF_BOARD \"${HW}\")" >> $cmake_file + echo "set ( TRANSP_PRO \"${TP}\")" >> $cmake_file + echo 'set ( PACKAGE_NAME "\"rrh_gw\"")' >> $cmake_file + echo "set ( DEADLINE_SCHEDULER \"${DEADLINE_SCHEDULER_FLAG_USER}\" )" >>$cmake_file + echo "set ( CPU_AFFINITY \"${CPU_AFFINITY_FLAG_USER}\" )" >>$cmake_file echo "set ( T_TRACER $T_TRACER )" >> $cmake_file echo 'include(${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt)' >> $cmake_file cd $DIR/$rrh_build_dir/build diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper index 514d7748ac7cf5fbc7afc2d1727e544906de47bc..4ebe2be1b0d2a986fbd4a7a6783d756f6acac929 100755 --- a/cmake_targets/tools/build_helper +++ b/cmake_targets/tools/build_helper @@ -369,7 +369,6 @@ check_install_oai_software() { libxml2 \ libxml2-dev \ libxslt1-dev \ - linux-headers-`uname -r` \ mscgen \ octave \ octave-signal \ @@ -385,6 +384,8 @@ check_install_oai_software() { $SUDO update-alternatives --set liblapack.so /usr/lib/atlas-base/atlas/liblapack.so + #Sometimes linux headers are not available in apt-get if kernel is custom or new + $SUDO apt-get install linux-headers-`uname -r` || true # First we remove gnutls/nettle installation and then install from sources $SUDO apt-get remove -y libgnutls-dev nettle-dev nettle-bin install_nettle_from_source @@ -397,13 +398,9 @@ install_asn1c_from_source(){ asn1_install_log=$OPENAIR_DIR/cmake_targets/log/asn1c_install_log.txt echo_info "\nInstalling ASN1. The log file for ASN1 installation is here: $asn1_install_log " ( - $SUDO rm -rf /tmp/asn1c-r1516 - svn co https://github.com/vlm/asn1c/trunk /tmp/asn1c-r1516 -r 1516 - cd /tmp/asn1c-r1516 - patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 - patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 - patch -p0 < $OPENAIR_DIR/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 - patch -p0 < $OPENAIR_DIR/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 + $SUDO rm -rf /tmp/asn1c + git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c + cd /tmp/asn1c ./configure make -j`nproc` $SUDO make install diff --git a/cmake_targets/tools/run_enb_ue_virt_s1 b/cmake_targets/tools/run_enb_ue_virt_s1 index 8f7255332a19169888484e7e0cd54698230e1750..9f325c7243cfd586cc93d19e33878bf8ab0b2772 100755 --- a/cmake_targets/tools/run_enb_ue_virt_s1 +++ b/cmake_targets/tools/run_enb_ue_virt_s1 @@ -252,7 +252,7 @@ function main() # Check table 200 lte in /etc/iproute2/rt_tables fgrep lte /etc/iproute2/rt_tables > /dev/null if [ $? -ne 0 ]; then - bash -c echo "200 lte " >> /etc/iproute2/rt_tables + echo "200 lte " >> /etc/iproute2/rt_tables fi ip rule add fwmark 1 table lte ifconfig oip1 up diff --git a/common/utils/T/.gitignore b/common/utils/T/.gitignore index a52d9a36677c9d9d15f873b7f0f874248b55c86c..f5724e6ff8c25fd4bf1fc8701f7ca881de58194a 100644 --- a/common/utils/T/.gitignore +++ b/common/utils/T/.gitignore @@ -9,4 +9,5 @@ tracer/record tracer/replay tracer/textlog tracer/vcd +tracer/macpdu2wireshark tracee/tracee diff --git a/common/utils/T/tracer/Makefile b/common/utils/T/tracer/Makefile index ee289aae59636c629934de82eddbedf0932d832d..71f1d25f9251b375dd5f57d88b59d78f979b3b11 100644 --- a/common/utils/T/tracer/Makefile +++ b/common/utils/T/tracer/Makefile @@ -5,7 +5,7 @@ CFLAGS=-Wall -g -pthread -DT_TRACER -I. LIBS=-lX11 -lm -lpng -lXft -all: record replay extract_config textlog enb vcd +all: record replay extract_config textlog enb vcd macpdu2wireshark record: utils.o record.o database.o config.o $(CC) $(CFLAGS) -o record $^ $(LIBS) @@ -31,6 +31,10 @@ vcd: utils.o vcd.o database.o event.o handler.o config.o \ filter/filter.a $(CC) $(CFLAGS) -o vcd $^ $(LIBS) +macpdu2wireshark: macpdu2wireshark.o database.o utils.o handler.o event.o \ + config.o + $(CC) $(CFLAGS) -o $@ $^ $(LIBS) + .PHONY: all gui/gui.a view/view.a logger/logger.a filter/filter.a gui/gui.a: @@ -50,7 +54,7 @@ filter/filter.a: clean: rm -f *.o core tracer_remote textlog enb vcd record replay - rm -f extract_config + rm -f extract_config macpdu2wireshark cd gui && make clean cd view && make clean cd logger && make clean diff --git a/common/utils/T/tracer/macpdu2wireshark.c b/common/utils/T/tracer/macpdu2wireshark.c new file mode 100644 index 0000000000000000000000000000000000000000..886638f5ef2c6774045395cc593e20cbd12a50a9 --- /dev/null +++ b/common/utils/T/tracer/macpdu2wireshark.c @@ -0,0 +1,260 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include "database.h" +#include "event.h" +#include "handler.h" +#include "config.h" +#include "utils.h" +#include "packet-mac-lte.h" + +#define DEFAULT_IP "127.0.0.1" +#define DEFAULT_PORT 9999 + +typedef struct { + int socket; + struct sockaddr_in to; + OBUF buf; + /* ul */ + int ul_rnti; + int ul_frame; + int ul_subframe; + int ul_data; + /* dl */ + int dl_rnti; + int dl_frame; + int dl_subframe; + int dl_data; +} ev_data; + +void ul(void *_d, event e) +{ + ev_data *d = _d; + ssize_t ret; + int fsf; + int i; + + d->buf.osize = 0; + + PUTS(&d->buf, MAC_LTE_START_STRING); + PUTC(&d->buf, FDD_RADIO); + PUTC(&d->buf, DIRECTION_UPLINK); + PUTC(&d->buf, C_RNTI); + + PUTC(&d->buf, MAC_LTE_RNTI_TAG); + PUTC(&d->buf, (e.e[d->ul_rnti].i>>8) & 255); + PUTC(&d->buf, e.e[d->ul_rnti].i & 255); + + /* for newer version of wireshark? */ + fsf = (e.e[d->ul_frame].i << 4) + e.e[d->ul_subframe].i; + /* for older version? */ + fsf = e.e[d->ul_subframe].i; + PUTC(&d->buf, MAC_LTE_FRAME_SUBFRAME_TAG); + PUTC(&d->buf, (fsf>>8) & 255); + PUTC(&d->buf, fsf & 255); + + PUTC(&d->buf, MAC_LTE_PAYLOAD_TAG); + for (i = 0; i < e.e[d->ul_data].bsize; i++) + PUTC(&d->buf, ((char*)e.e[d->ul_data].b)[i]); + + ret = sendto(d->socket, d->buf.obuf, d->buf.osize, 0, + (struct sockaddr *)&d->to, sizeof(struct sockaddr_in)); + if (ret != d->buf.osize) abort(); +} + +void dl(void *_d, event e) +{ + ev_data *d = _d; + ssize_t ret; + int fsf; + int i; + + d->buf.osize = 0; + + PUTS(&d->buf, MAC_LTE_START_STRING); + PUTC(&d->buf, FDD_RADIO); + PUTC(&d->buf, DIRECTION_DOWNLINK); + PUTC(&d->buf, C_RNTI); + + PUTC(&d->buf, MAC_LTE_RNTI_TAG); + PUTC(&d->buf, (e.e[d->dl_rnti].i>>8) & 255); + PUTC(&d->buf, e.e[d->dl_rnti].i & 255); + + /* for newer version of wireshark? */ + fsf = (e.e[d->dl_frame].i << 4) + e.e[d->dl_subframe].i; + /* for older version? */ + fsf = e.e[d->dl_subframe].i; + PUTC(&d->buf, MAC_LTE_FRAME_SUBFRAME_TAG); + PUTC(&d->buf, (fsf>>8) & 255); + PUTC(&d->buf, fsf & 255); + + PUTC(&d->buf, MAC_LTE_PAYLOAD_TAG); + for (i = 0; i < e.e[d->dl_data].bsize; i++) + PUTC(&d->buf, ((char*)e.e[d->dl_data].b)[i]); + + ret = sendto(d->socket, d->buf.obuf, d->buf.osize, 0, + (struct sockaddr *)&d->to, sizeof(struct sockaddr_in)); + if (ret != d->buf.osize) abort(); +} + +void setup_data(ev_data *d, void *database, int ul_id, int dl_id) +{ + database_event_format f; + int i; + + d->ul_rnti = -1; + d->ul_frame = -1; + d->ul_subframe = -1; + d->ul_data = -1; + + d->dl_rnti = -1; + d->dl_frame = -1; + d->dl_subframe = -1; + d->dl_data = -1; + +#define G(var_name, var_type, var) \ + if (!strcmp(f.name[i], var_name)) { \ + if (strcmp(f.type[i], var_type)) goto error; \ + var = i; \ + continue; \ + } + + /* ul: rnti, frame, subframe, data */ + f = get_format(database, ul_id); + for (i = 0; i < f.count; i++) { + G("rnti", "int", d->ul_rnti); + G("frame", "int", d->ul_frame); + G("subframe", "int", d->ul_subframe); + G("data", "buffer", d->ul_data); + } + if (d->ul_rnti == -1 || d->ul_frame == -1 || d->ul_subframe == -1 || + d->ul_data == -1) goto error; + + /* dl: rnti, frame, subframe, data */ + f = get_format(database, dl_id); + for (i = 0; i < f.count; i++) { + G("rnti", "int", d->dl_rnti); + G("frame", "int", d->dl_frame); + G("subframe", "int", d->dl_subframe); + G("data", "buffer", d->dl_data); + } + if (d->dl_rnti == -1 || d->dl_frame == -1 || d->dl_subframe == -1 || + d->dl_data == -1) goto error; + +#undef G + + return; + +error: + printf("bad T_messages.txt\n"); + abort(); +} + +void *receiver(void *_d) +{ + ev_data *d = _d; + int s; + char buf[100000]; + + s = socket(AF_INET, SOCK_DGRAM, 0); + if (s == -1) { perror("socket"); abort(); } + + if (bind(s, (struct sockaddr *)&d->to, sizeof(struct sockaddr_in)) == -1) + { perror("bind"); abort(); } + + while (1) { + if (recv(s, buf, 100000, 0) <= 0) abort(); + } + + return 0; +} + +void usage(void) +{ + printf( +"options:\n" +" -d <database file> this option is mandatory\n" +" -in <dump file> read events from this dump file\n" +" -ip <IP address> send packets to this IP address (default %s)\n" +" -p <port> send packets to this port (default %d)\n", + DEFAULT_IP, + DEFAULT_PORT + ); + exit(1); +} + +int main(int n, char **v) +{ + char *database_filename = NULL; + char *input_filename = NULL; + void *database; + event_handler *h; + int in; + int i; + int ul_id, dl_id; + ev_data d; + char *ip = DEFAULT_IP; + int port = DEFAULT_PORT; + + memset(&d, 0, sizeof(ev_data)); + + 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], "-in")) + { if (i > n-2) usage(); input_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); + } + + if (input_filename == NULL) { + printf("ERROR: provide an input file (-i)\n"); + exit(1); + } + + in = open(input_filename, O_RDONLY); + if (in == -1) { perror(input_filename); return 1; } + + database = parse_database(database_filename); + load_config_file(database_filename); + + h = new_handler(database); + + ul_id = event_id_from_name(database, "ENB_MAC_UE_UL_PDU_WITH_DATA"); + dl_id = event_id_from_name(database, "ENB_MAC_UE_DL_PDU_WITH_DATA"); + setup_data(&d, database, ul_id, dl_id); + + register_handler_function(h, ul_id, ul, &d); + register_handler_function(h, dl_id, dl, &d); + + d.socket = socket(AF_INET, SOCK_DGRAM, 0); + if (d.socket == -1) { perror("socket"); exit(1); } + + d.to.sin_family = AF_INET; + d.to.sin_port = htons(port); + d.to.sin_addr.s_addr = inet_addr(ip); + + new_thread(receiver, &d); + + /* read messages */ + while (1) { + char v[T_BUFFER_MAX]; + event e; + e = get_event(in, v, database); + if (e.type == -1) break; + if (!(e.type == ul_id || e.type == dl_id)) continue; + handle_event(h, e); + } + + return 0; +} diff --git a/common/utils/T/tracer/packet-mac-lte.h b/common/utils/T/tracer/packet-mac-lte.h new file mode 100644 index 0000000000000000000000000000000000000000..039b9dc3c4cfe13cd5310f1e8a3c6275f081df9b --- /dev/null +++ b/common/utils/T/tracer/packet-mac-lte.h @@ -0,0 +1,404 @@ +/* packet-mac-lte.h + * + * Martin Mathieson + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * This header file may also be distributed under + * the terms of the BSD Licence as follows: + * + * Copyright (C) 2009 Martin Mathieson. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE + */ + +//#include "ws_symbol_export.h" + +/* radioType */ +#define FDD_RADIO 1 +#define TDD_RADIO 2 + +/* Direction */ +#define DIRECTION_UPLINK 0 +#define DIRECTION_DOWNLINK 1 + +/* rntiType */ +#define NO_RNTI 0 +#define P_RNTI 1 +#define RA_RNTI 2 +#define C_RNTI 3 +#define SI_RNTI 4 +#define SPS_RNTI 5 +#define M_RNTI 6 +#define SL_BCH_RNTI 7 +#define SL_RNTI 8 +#define SC_RNTI 9 +#define G_RNTI 10 + +#if 0 +typedef enum mac_lte_oob_event { + ltemac_send_preamble, + ltemac_send_sr, + ltemac_sr_failure +} mac_lte_oob_event; + +typedef enum mac_lte_dl_retx { + dl_retx_no, + dl_retx_yes, + dl_retx_unknown +} mac_lte_dl_retx; + +typedef enum mac_lte_crc_status { + crc_fail = 0, + crc_success = 1, + crc_high_code_rate = 2, + crc_pdsch_lost = 3, + crc_duplicate_nonzero_rv = 4, + crc_false_dci = 5 +} mac_lte_crc_status; + +typedef enum mac_lte_carrier_id { + carrier_id_primary, + carrier_id_secondary_1, + carrier_id_secondary_2, + carrier_id_secondary_3, + carrier_id_secondary_4 +} mac_lte_carrier_id; + +typedef enum mac_lte_ce_mode { + no_ce_mode = 0, + ce_mode_a = 1, + ce_mode_b = 2 +} mac_lte_ce_mode; + +typedef enum mac_lte_nb_mode { + no_nb_mode = 0, + nb_mode = 1 +} mac_lte_nb_mode; + +/* Context info attached to each LTE MAC frame */ +typedef struct mac_lte_info +{ + /* Needed for decode */ + guint8 radioType; + guint8 direction; + guint8 rntiType; + + /* Extra info to display */ + guint16 rnti; + guint16 ueid; + + /* Timing info */ + guint16 sysframeNumber; + guint16 subframeNumber; + + /* Optional field. More interesting for TDD (FDD is always -4 subframeNumber) */ + gboolean subframeNumberOfGrantPresent; + guint16 subframeNumberOfGrant; + + /* Flag set only if doing PHY-level data test - i.e. there may not be a + well-formed MAC PDU so just show as raw data */ + gboolean isPredefinedData; + + /* Length of DL PDU or UL grant size in bytes */ + guint16 length; + + /* 0=newTx, 1=first-retx, etc */ + guint8 reTxCount; + guint8 isPHICHNACK; /* FALSE=PDCCH retx grant, TRUE=PHICH NACK */ + + /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set */ + gboolean isExtendedBSRSizes; + + /* UL only. Indicates if the R10 simultaneousPUCCH-PUSCH parameter is set for PCell */ + gboolean isSimultPUCCHPUSCHPCell; + + /* UL only. Indicates if the R10 extendedBSR-Sizes parameter is set for PSCell */ + gboolean isSimultPUCCHPUSCHPSCell; + + /* Status of CRC check. For UE it is DL only. For eNodeB it is UL + only. For an analyzer, it is present for both DL and UL. */ + gboolean crcStatusValid; + mac_lte_crc_status crcStatus; + + /* Carrier ID */ + mac_lte_carrier_id carrierId; + + /* DL only. Is this known to be a retransmission? */ + mac_lte_dl_retx dl_retx; + + /* DL only. CE mode to be used for RAR decoding */ + mac_lte_ce_mode ceMode; + + /* DL and UL. NB-IoT mode of the UE */ + mac_lte_nb_mode nbMode; + + /* More Physical layer info (see direction above for which side of union to use) */ + union { + struct mac_lte_ul_phy_info + { + guint8 present; /* Remaining UL fields are present and should be displayed */ + guint8 modulation_type; + guint8 tbs_index; + guint8 resource_block_length; + guint8 resource_block_start; + guint8 harq_id; + gboolean ndi; + } ul_info; + struct mac_lte_dl_phy_info + { + guint8 present; /* Remaining DL fields are present and should be displayed */ + guint8 dci_format; + guint8 resource_allocation_type; + guint8 aggregation_level; + guint8 mcs_index; + guint8 redundancy_version_index; + guint8 resource_block_length; + guint8 harq_id; + gboolean ndi; + guint8 transport_block; /* 0..1 */ + } dl_info; + } detailed_phy_info; + + /* Relating to out-of-band events */ + /* N.B. dissector will only look to these fields if length is 0... */ + mac_lte_oob_event oob_event; + guint8 rapid; + guint8 rach_attempt_number; + #define MAX_SRs 20 + guint16 number_of_srs; + guint16 oob_ueid[MAX_SRs]; + guint16 oob_rnti[MAX_SRs]; +} mac_lte_info; + + +typedef struct mac_lte_tap_info { + /* Info from context */ + guint16 rnti; + guint16 ueid; + guint8 rntiType; + guint8 isPredefinedData; + gboolean crcStatusValid; + mac_lte_crc_status crcStatus; + guint8 direction; + + guint8 isPHYRetx; + guint16 ueInTTI; + + nstime_t mac_lte_time; + + /* Number of bytes (which part is used depends upon context settings) */ + guint32 single_number_of_bytes; + guint32 bytes_for_lcid[11]; + guint32 sdus_for_lcid[11]; + guint8 number_of_rars; + guint8 number_of_paging_ids; + + /* Number of padding bytes includes padding subheaders and trailing padding */ + guint16 padding_bytes; + guint16 raw_length; +} mac_lte_tap_info; + + +/* Accessor function to check if a frame was considered to be ReTx */ +int is_mac_lte_frame_retx(packet_info *pinfo, guint8 direction); + +#endif + +/*****************************************************************/ +/* UDP framing format */ +/* ----------------------- */ +/* Several people have asked about dissecting MAC by framing */ +/* PDUs over IP. A suggested format over UDP has been created */ +/* and implemented by this dissector, using the definitions */ +/* below. A link to an example program showing you how to encode */ +/* these headers and send LTE MAC PDUs on a UDP socket is */ +/* provided at https://wiki.wireshark.org/MAC-LTE */ +/* */ +/* A heuristic dissecter (enabled by a preference) will */ +/* recognise a signature at the beginning of these frames. */ +/*****************************************************************/ + + +/* Signature. Rather than try to define a port for this, or make the + port number a preference, frames will start with this string (with no + terminating NULL */ +#define MAC_LTE_START_STRING "mac-lte" + +/* Fixed fields. This is followed by the following 3 mandatory fields: + - radioType (1 byte) + - direction (1 byte) + - rntiType (1 byte) + (where the allowed values are defined above */ + +/* Optional fields. Attaching this info to frames will allow you + to show you display/filter/plot/add-custom-columns on these fields, so should + be added if available. + The format is to have the tag, followed by the value (there is no length field, + it's implicit from the tag) */ + +#define MAC_LTE_RNTI_TAG 0x02 +/* 2 bytes, network order */ + +#define MAC_LTE_UEID_TAG 0x03 +/* 2 bytes, network order */ + +#define MAC_LTE_FRAME_SUBFRAME_TAG 0x04 +/* 2 bytes, network order, SFN is stored in 12 MSB and SF in 4 LSB */ + +#define MAC_LTE_PREDEFINED_DATA_TAG 0x05 +/* 1 byte */ + +#define MAC_LTE_RETX_TAG 0x06 +/* 1 byte */ + +#define MAC_LTE_CRC_STATUS_TAG 0x07 +/* 1 byte */ + +#define MAC_LTE_EXT_BSR_SIZES_TAG 0x08 +/* 0 byte */ + +#define MAC_LTE_SEND_PREAMBLE_TAG 0x09 +/* 2 bytes, RAPID value (1 byte) followed by RACH attempt number (1 byte) */ + +#define MAC_LTE_CARRIER_ID_TAG 0x0A +/* 1 byte */ + +#define MAC_LTE_PHY_TAG 0x0B +/* variable length, length (1 byte) then depending on direction + in UL: modulation type (1 byte), TBS index (1 byte), RB length (1 byte), + RB start (1 byte), HARQ id (1 byte), NDI (1 byte) + in DL: DCI format (1 byte), resource allocation type (1 byte), aggregation level (1 byte), + MCS index (1 byte), redundancy version (1 byte), resource block length (1 byte), + HARQ id (1 byte), NDI (1 byte), TB (1 byte), DL reTx (1 byte) */ + +#define MAC_LTE_SIMULT_PUCCH_PUSCH_PCELL 0x0C +/* 0 byte */ + +#define MAC_LTE_SIMULT_PUCCH_PUSCH_PSCELL 0x0D +/* 0 byte */ + +#define MAC_LTE_CE_MODE 0x0E +/* 1 byte containing mac_lte_ce_mode enum value */ + +#define MAC_LTE_NB_MODE 0x0F +/* 1 byte containing mac_lte_nb_mode enum value */ + +/* MAC PDU. Following this tag comes the actual MAC PDU (there is no length, the PDU + continues until the end of the frame) */ +#define MAC_LTE_PAYLOAD_TAG 0x01 + + +#if 0 + +/* Type to store parameters for configuring LCID->RLC channel settings for DRB */ +/* Some are optional, and may not be seen (e.g. on reestablishment) */ +typedef struct drb_mapping_t +{ + guint16 ueid; /* Mandatory */ + guint8 drbid; /* Mandatory */ + gboolean lcid_present; + guint8 lcid; /* Part of LogicalChannelConfig - optional */ + gboolean rlcMode_present; + guint8 rlcMode; /* Part of RLC config - optional */ + gboolean rlc_ul_ext_li_field; /* Part of RLC config - optional */ + gboolean rlc_dl_ext_li_field; /* Part of RLC config - optional */ + gboolean rlc_ul_ext_am_sn; /* Part of RLC config - optional */ + gboolean rlc_dl_ext_am_sn; /* Part of RLC config - optional */ + gboolean um_sn_length_present; + guint8 um_sn_length; /* Part of RLC config - optional */ + gboolean ul_priority_present; + guint8 ul_priority; /* Part of LogicalChannelConfig - optional */ + gboolean pdcp_sn_size_present; + guint8 pdcp_sn_size; /* Part of pdcp-Config - optional */ +} drb_mapping_t; + + +/* Set details of an LCID -> drb channel mapping. To be called from + configuration protocol (e.g. RRC) */ +void set_mac_lte_channel_mapping(drb_mapping_t *drb_mapping); + + +/* Dedicated DRX config. Used to verify that a sensible config is given. + Also, beginning to configure MAC with this config and (optionally) show + DRX config and state (cycles/timers) attached to each UL/DL PDU! */ +typedef struct drx_config_t { + gboolean configured; + guint32 frameNum; + guint32 previousFrameNum; + + guint32 onDurationTimer; + guint32 inactivityTimer; + guint32 retransmissionTimer; + guint32 longCycle; + guint32 cycleOffset; + /* Optional Short cycle */ + gboolean shortCycleConfigured; + guint32 shortCycle; + guint32 shortCycleTimer; +} drx_config_t; + +/* Functions to set/release up dedicated DRX config */ +void set_mac_lte_drx_config(guint16 ueid, drx_config_t *drx_config, packet_info *pinfo); +void set_mac_lte_drx_config_release(guint16 ueid, packet_info *pinfo); + +/* RRC can tell this dissector which RAPIDs are Group A, Group A&B */ +void set_mac_lte_rapid_ranges(guint groupA, guint all_RA); + +/* RRC can indicate whether extended BSR sizes are used */ +void set_mac_lte_extended_bsr_sizes(guint16 ueid, gboolean use_ext_bsr_sizes, packet_info *pinfo); + +/* RRC can indicate whether simultaneous PUCCH/PUSCH is used */ +typedef enum { + SIMULT_PUCCH_PUSCH_PCELL = 0, + SIMULT_PUCCH_PUSCH_PSCELL +} simult_pucch_pusch_cell_type; +void set_mac_lte_simult_pucch_pusch(guint16 ueid, simult_pucch_pusch_cell_type cell_type, gboolean use_simult_pucch_pusch, packet_info *pinfo); + +/* Functions to be called from outside this module (e.g. in a plugin, where mac_lte_info + isn't available) to get/set per-packet data */ +WS_DLL_PUBLIC +mac_lte_info *get_mac_lte_proto_data(packet_info *pinfo); +WS_DLL_PUBLIC +void set_mac_lte_proto_data(packet_info *pinfo, mac_lte_info *p_mac_lte_info); + +/* Function to attempt to populate p_mac_lte_info using framing definition above */ +gboolean dissect_mac_lte_context_fields(struct mac_lte_info *p_mac_lte_info, tvbuff_t *tvb, + gint *p_offset); + +#endif diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c index e673a333718069e8f8a7a60e4686b565a000f289..64c5bc12b5e882ba4a8629a6b5dfd57aa999d05f 100644 --- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c +++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c @@ -68,6 +68,7 @@ #include "SIMULATION/TOOLS/defs.h" // for taus +#include "T.h" void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,unsigned char Msg3_subframe) { @@ -644,6 +645,9 @@ void schedule_RA(module_id_t module_idP,frame_t frameP, sub_frame_t subframeP,un &eNB->common_channels[CC_id].CCCH_pdu.payload[0], rrc_sdu_length); + T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(RA_template->rnti), T_INT(frameP), T_INT(subframeP), + T_INT(0 /*harq_pid always 0?*/), T_BUFFER(&eNB->UE_list.DLSCH_pdu[CC_id][0][UE_id].payload[0], TBsize)); + if (opt_enabled==1) { trace_pdu(1, (uint8_t *)eNB->UE_list.DLSCH_pdu[CC_id][0][(unsigned char)UE_id].payload[0], rrc_sdu_length, UE_id, 3, UE_RNTI(module_idP, UE_id), diff --git a/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 b/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 deleted file mode 100644 index 18dc516285b45214f9dd88598ce8ed08753a7588..0000000000000000000000000000000000000000 --- a/openair2/RRC/LITE/MESSAGES/asn1c/asn1cpatch.p0 +++ /dev/null @@ -1,13 +0,0 @@ -Index: skeletons/per_opentype.c -=================================================================== ---- skeletons/per_opentype.c (revision 1516) -+++ skeletons/per_opentype.c (working copy) -@@ -277,7 +306,7 @@ - (void)constraints; - (void)sptr; - -- while(per_get_few_bits(pd, 24) >= 0); -+ while(per_get_few_bits(pd, 1 /*24*/) >= 0); - - rv.code = RC_OK; - rv.consumed = pd->moved; diff --git a/openair2/RRC/LITE/rrc_eNB_S1AP.c b/openair2/RRC/LITE/rrc_eNB_S1AP.c index 1414c4e1b305f116b2fe1121722010c4cb74e0f1..cdb2ddc0ca2bf42cfac591217cbcf32bb9438258 100644 --- a/openair2/RRC/LITE/rrc_eNB_S1AP.c +++ b/openair2/RRC/LITE/rrc_eNB_S1AP.c @@ -60,6 +60,8 @@ #endif #include "msc.h" +#include "UERadioAccessCapabilityInformation.h" + #include "gtpv1u_eNB_task.h" #include "RRC/LITE/rrc_eNB_GTPV1U.h" @@ -584,29 +586,42 @@ void rrc_eNB_send_S1AP_UE_CAPABILITIES_IND( //------------------------------------------------------------------------------ { UECapabilityInformation_t *ueCapabilityInformation = &ul_dcch_msg->message.choice.c1.choice.ueCapabilityInformation; - - if ((ueCapabilityInformation->criticalExtensions.present == UECapabilityInformation__criticalExtensions_PR_c1) - && (ueCapabilityInformation->criticalExtensions.choice.c1.present - == UECapabilityInformation__criticalExtensions__c1_PR_ueCapabilityInformation_r8) - && (ueCapabilityInformation->criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList.list.count > 0)) { - UE_CapabilityRAT_ContainerList_t* ue_CapabilityRAT_ContainerList = - &ueCapabilityInformation->criticalExtensions.choice.c1.choice.ueCapabilityInformation_r8.ue_CapabilityRAT_ContainerList; - MessageDef *msg_p; - - msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UE_CAPABILITIES_IND); - S1AP_UE_CAPABILITIES_IND (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; - S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.length = ue_CapabilityRAT_ContainerList->list.array[0]->ueCapabilityRAT_Container.size; - S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.buffer = ue_CapabilityRAT_ContainerList->list.array[0]->ueCapabilityRAT_Container.buf; - - itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p); - - if (ue_CapabilityRAT_ContainerList->list.count > 1) { - LOG_W (RRC,"[eNB %d][UE %x] can only handle 1 UE capability RAT item for now (%d)\n", - ctxt_pP->module_id, - ue_context_pP->ue_context.rnti, - ue_CapabilityRAT_ContainerList->list.count); - } + /* 4096 is arbitrary, should be big enough */ + unsigned char buf[4096]; + unsigned char *buf2; + UERadioAccessCapabilityInformation_t rac; + + if (ueCapabilityInformation->criticalExtensions.present != UECapabilityInformation__criticalExtensions_PR_c1 + || ueCapabilityInformation->criticalExtensions.choice.c1.present != UECapabilityInformation__criticalExtensions__c1_PR_ueCapabilityInformation_r8) { + LOG_E(RRC, "[eNB %d][UE %x] bad UE capabilities\n", ctxt_pP->module_id, ue_context_pP->ue_context.rnti); + return; } + + asn_enc_rval_t ret = uper_encode_to_buffer(&asn_DEF_UECapabilityInformation, ueCapabilityInformation, buf, 4096); + if (ret.encoded == -1) abort(); + + memset(&rac, 0, sizeof(UERadioAccessCapabilityInformation_t)); + + rac.criticalExtensions.present = UERadioAccessCapabilityInformation__criticalExtensions_PR_c1; + rac.criticalExtensions.choice.c1.present = UERadioAccessCapabilityInformation__criticalExtensions__c1_PR_ueRadioAccessCapabilityInformation_r8; + rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.ue_RadioAccessCapabilityInfo.buf = buf; + rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.ue_RadioAccessCapabilityInfo.size = (ret.encoded+7)/8; + rac.criticalExtensions.choice.c1.choice.ueRadioAccessCapabilityInformation_r8.nonCriticalExtension = NULL; + + /* 8192 is arbitrary, should be big enough */ + buf2 = malloc16(8192); + if (buf2 == NULL) abort(); + ret = uper_encode_to_buffer(&asn_DEF_UERadioAccessCapabilityInformation, &rac, buf2, 8192); + if (ret.encoded == -1) abort(); + + MessageDef *msg_p; + + msg_p = itti_alloc_new_message (TASK_RRC_ENB, S1AP_UE_CAPABILITIES_IND); + S1AP_UE_CAPABILITIES_IND (msg_p).eNB_ue_s1ap_id = ue_context_pP->ue_context.eNB_ue_s1ap_id; + S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.length = (ret.encoded+7)/8; + S1AP_UE_CAPABILITIES_IND (msg_p).ue_radio_cap.buffer = buf2; + + itti_send_msg_to_task (TASK_S1AP, ctxt_pP->instance, msg_p); } //------------------------------------------------------------------------------ diff --git a/openair3/NAS/UE/API/USIM/usim_api.c b/openair3/NAS/UE/API/USIM/usim_api.c index fe8dc8b35074b8b38c745e7bab232bcfb29f356f..807ee467242e030694a2c3c12e5bb49ff5721d53 100644 --- a/openair3/NAS/UE/API/USIM/usim_api.c +++ b/openair3/NAS/UE/API/USIM/usim_api.c @@ -77,7 +77,8 @@ Description Implements the API used by the NAS layer to read/write * Subscriber authentication security key */ #define USIM_API_K_SIZE 16 -#define USIM_API_K_VALUE "fec86ba6eb707ed08905757b1bb44b8f" +//#define USIM_API_K_VALUE "fec86ba6eb707ed08905757b1bb44b8f" +#define USIM_API_K_VALUE "8BAF473F2F8FD09487CCCBD7097C6862" static uint8_t _usim_api_k[USIM_API_K_SIZE]; diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 b/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 deleted file mode 100644 index b3a5b8d39f5059fabb85b65f03f23ea8f6760784..0000000000000000000000000000000000000000 --- a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch.p0 +++ /dev/null @@ -1,5082 +0,0 @@ -Index: asn1c/unber.c -=================================================================== ---- asn1c/unber.c (revision 1516) -+++ asn1c/unber.c (working copy) -@@ -775,4 +775,8 @@ - - asn_enc_rval_t OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *cts, void *sptr, asn_per_outp_t *po) { asn_enc_rval_t er = { 0, 0, 0 }; (void)td; (void)cts; (void)sptr; (void)po; return er; } - -+asn_dec_rval_t OCTET_STRING_decode_aper(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, asn_per_constraints_t *cts, void **sptr, asn_per_data_t *pd) { asn_dec_rval_t rv = { 0, 0 }; (void)ctx; (void)td; (void)cts; (void)sptr; (void)pd; return rv; } -+ -+asn_enc_rval_t OCTET_STRING_encode_aper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *cts, void *sptr, asn_per_outp_t *po) { asn_enc_rval_t er = { 0, 0, 0 }; (void)td; (void)cts; (void)sptr; (void)po; return er; } -+ - size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { (void)chunk_buf; (void)chunk_size; return 0; } -Index: asn1c/asn1c.c -=================================================================== ---- asn1c/asn1c.c (revision 1516) -+++ asn1c/asn1c.c (working copy) -@@ -111,6 +111,8 @@ - asn1_compiler_flags &= ~A1C_LINK_SKELETONS; - } else if(strcmp(optarg, "link-skeletons") == 0) { - asn1_compiler_flags |= A1C_LINK_SKELETONS; -+ } else if(strcmp(optarg, "have_native64") == 0) { -+ asn1_compiler_flags |= A1C_HAVE_NATIVE_64; - } else { - fprintf(stderr, "-f%s: Invalid argument\n", optarg); - exit(EX_USAGE); -@@ -471,6 +473,7 @@ - " -fno-include-deps Do not generate courtesy #includes for dependencies\n" - " -funnamed-unions Enable unnamed unions in structures\n" - " -fwide-types Use INTEGER_t instead of \"long\" by default, etc.\n" -+" -fhave_native64 Use int64_t/uint64_t for target platform\n" - "\n" - - " -gen-PER Generate PER support code\n" -Index: examples/README -=================================================================== ---- examples/README (revision 1516) -+++ examples/README (working copy) -@@ -25,6 +25,8 @@ - UserPlane Location Protocol decoder. Before trying to compile, read the - README file in that directory. - -+The clyx2asn1.pl script can be used to extract ASN.1 data from LyX editor files. -+ - The crfc2asn1.pl script can be used to extract ASN.1 data from RFC texts. - For instance, it is used to extract X.509, MEGACO, and LDAPv3 ASN.1 modules - from the corresponding RFC texts (rfc3280.txt, rfc3525.txt, rfc4211.txt). -Index: skeletons/UTF8String.c -=================================================================== ---- skeletons/UTF8String.c (revision 1516) -+++ skeletons/UTF8String.c (working copy) -@@ -25,6 +25,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UTF8String_tags, - sizeof(asn_DEF_UTF8String_tags) -Index: skeletons/constr_TYPE.h -=================================================================== ---- skeletons/constr_TYPE.h (revision 1516) -+++ skeletons/constr_TYPE.h (working copy) -@@ -99,6 +99,8 @@ - xer_type_encoder_f *xer_encoder; /* [Canonical] XER encoder */ - per_type_decoder_f *uper_decoder; /* Unaligned PER decoder */ - per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ -+ per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ -+ per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ - - /*********************************************************************** - * Internally useful members. Not to be used by applications directly. * -Index: skeletons/RELATIVE-OID.c -=================================================================== ---- skeletons/RELATIVE-OID.c (revision 1516) -+++ skeletons/RELATIVE-OID.c (working copy) -@@ -28,6 +28,8 @@ - RELATIVE_OID_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_RELATIVE_OID_tags, - sizeof(asn_DEF_RELATIVE_OID_tags) -Index: skeletons/per_encoder.c -=================================================================== ---- skeletons/per_encoder.c (revision 1516) -+++ skeletons/per_encoder.c (working copy) -@@ -4,6 +4,7 @@ - - static asn_enc_rval_t uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); - -+static asn_enc_rval_t aper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *, void *sptr, asn_app_consume_bytes_f *cb, void *app_key); - asn_enc_rval_t - uper_encode(asn_TYPE_descriptor_t *td, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { - return uper_encode_internal(td, 0, sptr, cb, app_key); -@@ -41,6 +42,18 @@ - return uper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); - } - -+asn_enc_rval_t -+aper_encode_to_buffer(asn_TYPE_descriptor_t *td, void *sptr, void *buffer, size_t buffer_size) { -+ enc_to_buf_arg key; -+ -+ key.buffer = buffer; -+ key.left = buffer_size; -+ -+ if(td) ASN_DEBUG("Encoding \"%s\" using ALIGNED PER", td->name); -+ -+ return aper_encode_internal(td, 0, sptr, encode_to_buffer_cb, &key); -+} -+ - typedef struct enc_dyn_arg { - void *buffer; - size_t length; -@@ -93,6 +106,35 @@ - } - } - -+ssize_t -+aper_encode_to_new_buffer(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, void **buffer_r) { -+ asn_enc_rval_t er; -+ enc_dyn_arg key; -+ -+ memset(&key, 0, sizeof(key)); -+ -+ er = aper_encode_internal(td, constraints, sptr, encode_dyn_cb, &key); -+ switch(er.encoded) { -+ case -1: -+ FREEMEM(key.buffer); -+ return -1; -+ case 0: -+ FREEMEM(key.buffer); -+ key.buffer = MALLOC(1); -+ if(key.buffer) { -+ *(char *)key.buffer = '\0'; -+ *buffer_r = key.buffer; -+ return 1; -+ } else { -+ return -1; -+ } -+ default: -+ *buffer_r = key.buffer; -+ ASN_DEBUG("Complete encoded in %ld bits", (long)er.encoded); -+ return ((er.encoded + 7) >> 3); -+ } -+} -+ - /* - * Internally useful functions. - */ -@@ -115,6 +157,23 @@ - return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); - } - -+static int -+_aper_encode_flush_outp(asn_per_outp_t *po) { -+ uint8_t *buf; -+ -+ if(po->nboff == 0 && po->buffer == po->tmpspace) -+ return 0; -+ -+ buf = po->buffer + (po->nboff >> 3); -+ /* Make sure we account for the last, partially filled */ -+ if(po->nboff & 0x07) { -+ buf[0] &= 0xff << (8 - (po->nboff & 0x07)); -+ buf++; -+ } -+ -+ return po->outper(po->tmpspace, buf - po->tmpspace, po->op_key); -+} -+ - static asn_enc_rval_t - uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { - asn_per_outp_t po; -@@ -149,3 +208,37 @@ - return er; - } - -+static asn_enc_rval_t -+aper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_app_consume_bytes_f *cb, void *app_key) { -+ asn_per_outp_t po; -+ asn_enc_rval_t er; -+ -+ /* -+ * Invoke type-specific encoder. -+ */ -+ if(!td || !td->aper_encoder) -+ _ASN_ENCODE_FAILED; /* PER is not compiled in */ -+ -+ po.buffer = po.tmpspace; -+ po.nboff = 0; -+ po.nbits = 8 * sizeof(po.tmpspace); -+ po.outper = cb; -+ po.op_key = app_key; -+ po.flushed_bytes = 0; -+ -+ er = td->aper_encoder(td, constraints, sptr, &po); -+ if(er.encoded != -1) { -+ size_t bits_to_flush; -+ -+ bits_to_flush = ((po.buffer - po.tmpspace) << 3) + po.nboff; -+ -+ /* Set number of bits encoded to a firm value */ -+ er.encoded = (po.flushed_bytes << 3) + bits_to_flush; -+ -+ if(_aper_encode_flush_outp(&po)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ return er; -+} -+ -Index: skeletons/NumericString.c -=================================================================== ---- skeletons/NumericString.c (revision 1516) -+++ skeletons/NumericString.c (working copy) -@@ -49,6 +49,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NumericString_tags, - sizeof(asn_DEF_NumericString_tags) -Index: skeletons/per_encoder.h -=================================================================== ---- skeletons/per_encoder.h (revision 1516) -+++ skeletons/per_encoder.h (working copy) -@@ -38,6 +38,12 @@ - size_t buffer_size /* Initial buffer size (max) */ - ); - -+asn_enc_rval_t aper_encode_to_buffer( -+ struct asn_TYPE_descriptor_s *type_descriptor, -+ void *struct_ptr, /* Structure to be encoded */ -+ void *buffer, /* Pre-allocated buffer */ -+ size_t buffer_size /* Initial buffer size (max) */ -+); - /* - * A variant of uper_encode_to_buffer() which allocates buffer itself. - * Returns the number of bytes in the buffer or -1 in case of failure. -@@ -52,6 +58,11 @@ - void **buffer_r /* Buffer allocated and returned */ - ); - -+ssize_t -+aper_encode_to_new_buffer(struct asn_TYPE_descriptor_s *td, -+ asn_per_constraints_t *constraints, -+ void *sptr, -+ void **buffer_r); - /* - * Type of the generic PER encoder function. - */ -Index: skeletons/T61String.c -=================================================================== ---- skeletons/T61String.c (revision 1516) -+++ skeletons/T61String.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_T61String_tags, - sizeof(asn_DEF_T61String_tags) -Index: skeletons/TeletexString.c -=================================================================== ---- skeletons/TeletexString.c (revision 1516) -+++ skeletons/TeletexString.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_TeletexString_tags, - sizeof(asn_DEF_TeletexString_tags) -Index: skeletons/BMPString.c -=================================================================== ---- skeletons/BMPString.c (revision 1516) -+++ skeletons/BMPString.c (working copy) -@@ -35,6 +35,8 @@ - BMPString_encode_xer, /* Convert to UTF-8 */ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, /* Aligned PER decoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BMPString_tags, - sizeof(asn_DEF_BMPString_tags) -Index: skeletons/ObjectDescriptor.c -=================================================================== ---- skeletons/ObjectDescriptor.c (revision 1516) -+++ skeletons/ObjectDescriptor.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ObjectDescriptor_tags, - sizeof(asn_DEF_ObjectDescriptor_tags) -Index: skeletons/PrintableString.c -=================================================================== ---- skeletons/PrintableString.c (revision 1516) -+++ skeletons/PrintableString.c (working copy) -@@ -59,6 +59,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_PrintableString_tags, - sizeof(asn_DEF_PrintableString_tags) -Index: skeletons/constr_SET_OF.c -=================================================================== ---- skeletons/constr_SET_OF.c (revision 1516) -+++ skeletons/constr_SET_OF.c (working copy) -@@ -34,7 +34,7 @@ - #undef ADVANCE - #define ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- ptr = ((const void *)ptr) + num;\ -+ ptr = ((const char *)ptr) + num;\ - size -= num; \ - if(ctx->left >= 0) \ - ctx->left -= num; \ -@@ -100,7 +100,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Start to parse where left previously -@@ -457,7 +457,7 @@ - #undef XER_ADVANCE - #define XER_ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- buf_ptr = ((const void *)buf_ptr) + num;\ -+ buf_ptr = ((const char *)buf_ptr) + num;\ - size -= num; \ - consumed_myself += num; \ - } while(0) -@@ -505,7 +505,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Phases of XER/XML processing: -@@ -627,7 +627,7 @@ - t->buffer = p; - t->size = newsize; - } -- memcpy((void *)t->buffer + t->offset, buffer, size); -+ memcpy((char *)t->buffer + t->offset, buffer, size); - t->offset += size; - return 0; - } -@@ -809,7 +809,7 @@ - asn_set_empty(list); /* Remove (list->array) */ - - specs = (asn_SET_OF_specifics_t *)td->specifics; -- ctx = (asn_struct_ctx_t *)((void *)ptr + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset); - if(ctx->ptr) { - ASN_STRUCT_FREE(*elm->type, ctx->ptr); - ctx->ptr = 0; -@@ -884,7 +884,7 @@ - if(!st) { - st = *sptr = CALLOC(1, specs->struct_size); - if(!st) _ASN_DECODE_FAILED; -- } -+ } - list = _A_SET_FROM_VOID(st); - - /* Figure out which constraints to use */ -@@ -901,7 +901,7 @@ - if(ct && ct->effective_bits >= 0) { - /* X.691, #19.5: No length determinant */ - nelems = per_get_few_bits(pd, ct->effective_bits); -- ASN_DEBUG("Preparing to fetch %ld+%ld elements from %s", -+ ASN_DEBUG("Preparing to fetch %ld+%"PRIdMAX" elements from %s", - (long)nelems, ct->lower_bound, td->name); - if(nelems < 0) _ASN_DECODE_STARVED; - nelems += ct->lower_bound; -@@ -951,3 +951,91 @@ - return rv; - } - -+asn_dec_rval_t -+SET_OF_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_dec_rval_t rv; -+ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; -+ asn_TYPE_member_t *elm = td->elements; /* Single one */ -+ void *st = *sptr; -+ asn_anonymous_set_ *list; -+ asn_per_constraint_t *ct; -+ int repeat = 0; -+ ssize_t nelems; -+ -+ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) -+ _ASN_DECODE_FAILED; -+ -+ /* -+ * Create the target structure if it is not present already. -+ */ -+ if(!st) { -+ st = *sptr = CALLOC(1, specs->struct_size); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ list = _A_SET_FROM_VOID(st); -+ -+ /* Figure out which constraints to use */ -+ if(constraints) ct = &constraints->size; -+ else if(td->per_constraints) ct = &td->per_constraints->size; -+ else ct = 0; -+ -+ if(ct && ct->flags & APC_EXTENSIBLE) { -+ int value = per_get_few_bits(pd, 1); -+ if(value < 0) _ASN_DECODE_STARVED; -+ if(value) ct = 0; /* Not restricted! */ -+ } -+ -+ if(ct && ct->effective_bits >= 0) { -+ /* X.691, #19.5: No length determinant */ -+// nelems = per_get_few_bits(pd, ct->effective_bits); -+ nelems = aper_get_nsnnwn(pd, ct->upper_bound - ct->lower_bound); -+ ASN_DEBUG("Preparing to fetch %ld+%"PRIdMAX" elements from %s", -+ (long)nelems, ct->lower_bound, td->name); -+ if(nelems < 0) _ASN_DECODE_STARVED; -+ nelems += ct->lower_bound; -+ } else { -+ nelems = -1; -+ } -+ -+ do { -+ int i; -+ if(nelems < 0) { -+ nelems = aper_get_length(pd, ct ? ct->upper_bound - ct->lower_bound + 1 : -1, -+ ct ? ct->effective_bits : -1, &repeat); -+ ASN_DEBUG("Got to decode %d elements (eff %d)", -+ (int)nelems, (int)ct ? ct->effective_bits : -1); -+ if(nelems < 0) _ASN_DECODE_STARVED; -+ } -+ -+ for(i = 0; i < nelems; i++) { -+ void *ptr = 0; -+ ASN_DEBUG("SET OF %s decoding", elm->type->name); -+ rv = elm->type->aper_decoder(opt_codec_ctx, elm->type, -+ elm->per_constraints, &ptr, pd); -+ ASN_DEBUG("%s SET OF %s decoded %d, %p", -+ td->name, elm->type->name, rv.code, ptr); -+ if(rv.code == RC_OK) { -+ if(ASN_SET_ADD(list, ptr) == 0) -+ continue; -+ ASN_DEBUG("Failed to add element into %s", -+ td->name); -+ /* Fall through */ -+ rv.code = RC_FAIL; -+ } else { -+ ASN_DEBUG("Failed decoding %s of %s (SET OF)", -+ elm->type->name, td->name); -+ } -+ if(ptr) ASN_STRUCT_FREE(*elm->type, ptr); -+ return rv; -+ } -+ -+ nelems = -1; /* Allow uper_get_length() */ -+ } while(repeat); -+ -+ ASN_DEBUG("Decoded %s as SET OF", td->name); -+ -+ rv.code = RC_OK; -+ rv.consumed = 0; -+ return rv; -+} -Index: skeletons/NULL.c -=================================================================== ---- skeletons/NULL.c (revision 1516) -+++ skeletons/NULL.c (working copy) -@@ -25,6 +25,8 @@ - NULL_encode_xer, - NULL_decode_uper, /* Unaligned PER decoder */ - NULL_encode_uper, /* Unaligned PER encoder */ -+ NULL_decode_aper, /* Aligned PER decoder */ -+ NULL_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NULL_tags, - sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), -@@ -135,6 +137,34 @@ - return rv; - } - -+asn_dec_rval_t -+NULL_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_dec_rval_t rv; -+ -+ (void)opt_codec_ctx; -+ (void)td; -+ (void)constraints; -+ (void)pd; -+ -+ if(!*sptr) { -+ *sptr = MALLOC(sizeof(NULL_t)); -+ if(*sptr) { -+ *(NULL_t *)*sptr = 0; -+ } else { -+ _ASN_DECODE_FAILED; -+ } -+ } -+ -+ /* -+ * NULL type does not have content octets. -+ */ -+ -+ rv.code = RC_OK; -+ rv.consumed = 0; -+ return rv; -+} -+ - asn_enc_rval_t - NULL_encode_uper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, - void *sptr, asn_per_outp_t *po) { -@@ -148,3 +178,17 @@ - er.encoded = 0; - _ASN_ENCODED_OK(er); - } -+ -+asn_enc_rval_t -+NULL_encode_aper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, -+ void *sptr, asn_per_outp_t *po) { -+ asn_enc_rval_t er; -+ -+ (void)td; -+ (void)constraints; -+ (void)sptr; -+ (void)po; -+ -+ er.encoded = 0; -+ _ASN_ENCODED_OK(er); -+} -Index: skeletons/per_decoder.c -=================================================================== ---- skeletons/per_decoder.c (revision 1516) -+++ skeletons/per_decoder.c (working copy) -@@ -37,6 +37,35 @@ - } - - asn_dec_rval_t -+aper_decode_complete(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size) { -+ asn_dec_rval_t rval; -+ -+ rval = aper_decode(opt_codec_ctx, td, sptr, buffer, size, 0, 0); -+ if(rval.consumed) { -+ /* -+ * We've always given 8-aligned data, -+ * so convert bits to integral bytes. -+ */ -+ rval.consumed += 7; -+ rval.consumed >>= 3; -+ } else if(rval.code == RC_OK) { -+ if(size) { -+ if(((const uint8_t *)buffer)[0] == 0) { -+ rval.consumed = 1; /* 1 byte */ -+ } else { -+ ASN_DEBUG("Expecting single zeroed byte"); -+ rval.code = RC_FAIL; -+ } -+ } else { -+ /* Must contain at least 8 bits. */ -+ rval.code = RC_WMORE; -+ } -+ } -+ -+ return rval; -+} -+ -+asn_dec_rval_t - uper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { - asn_codec_ctx_t s_codec_ctx; - asn_dec_rval_t rval; -@@ -91,3 +120,57 @@ - return rval; - } - -+asn_dec_rval_t -+aper_decode(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, void **sptr, const void *buffer, size_t size, int skip_bits, int unused_bits) { -+ asn_codec_ctx_t s_codec_ctx; -+ asn_dec_rval_t rval; -+ asn_per_data_t pd; -+ -+ if(skip_bits < 0 || skip_bits > 7 -+ || unused_bits < 0 || unused_bits > 7 -+ || (unused_bits > 0 && !size)) -+ _ASN_DECODE_FAILED; -+ -+ /* -+ * Stack checker requires that the codec context -+ * must be allocated on the stack. -+ */ -+ if(opt_codec_ctx) { -+ if(opt_codec_ctx->max_stack_size) { -+ s_codec_ctx = *opt_codec_ctx; -+ opt_codec_ctx = &s_codec_ctx; -+ } -+ } else { -+ /* If context is not given, be security-conscious anyway */ -+ memset(&s_codec_ctx, 0, sizeof(s_codec_ctx)); -+ s_codec_ctx.max_stack_size = _ASN_DEFAULT_STACK_MAX; -+ opt_codec_ctx = &s_codec_ctx; -+ } -+ -+ /* Fill in the position indicator */ -+ memset(&pd, 0, sizeof(pd)); -+ pd.buffer = (const uint8_t *)buffer; -+ pd.nboff = skip_bits; -+ pd.nbits = 8 * size - unused_bits; /* 8 is CHAR_BIT from <limits.h> */ -+ if(pd.nboff > pd.nbits) -+ _ASN_DECODE_FAILED; -+ -+ /* -+ * Invoke type-specific decoder. -+ */ -+ if(!td->aper_decoder) -+ _ASN_DECODE_FAILED; /* PER is not compiled in */ -+ rval = td->aper_decoder(opt_codec_ctx, td, 0, sptr, &pd); -+ if(rval.code == RC_OK) { -+ /* Return the number of consumed bits */ -+ rval.consumed = ((pd.buffer - (const uint8_t *)buffer) << 3) -+ + pd.nboff - skip_bits; -+ ASN_DEBUG("PER decoding consumed %d, counted %d", -+ rval.consumed, pd.moved); -+ assert(rval.consumed == pd.moved); -+ } else { -+ /* PER codec is not a restartable */ -+ rval.consumed = 0; -+ } -+ return rval; -+} -Index: skeletons/constr_SET_OF.h -=================================================================== ---- skeletons/constr_SET_OF.h (revision 1516) -+++ skeletons/constr_SET_OF.h (working copy) -@@ -34,6 +34,8 @@ - xer_type_encoder_f SET_OF_encode_xer; - per_type_decoder_f SET_OF_decode_uper; - per_type_encoder_f SET_OF_encode_uper; -+per_type_decoder_f SET_OF_decode_aper; -+per_type_encoder_f SET_OF_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/NULL.h -=================================================================== ---- skeletons/NULL.h (revision 1516) -+++ skeletons/NULL.h (working copy) -@@ -25,6 +25,8 @@ - xer_type_encoder_f NULL_encode_xer; - per_type_decoder_f NULL_decode_uper; - per_type_encoder_f NULL_encode_uper; -+per_type_decoder_f NULL_decode_aper; -+per_type_encoder_f NULL_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/per_decoder.h -=================================================================== ---- skeletons/per_decoder.h (revision 1516) -+++ skeletons/per_decoder.h (working copy) -@@ -38,8 +38,30 @@ - int unused_bits /* Number of unused tailing bits, 0..7 */ - ); - -+/* -+ * Aligned PER decoder of a "complete encoding" as per X.691#10.1. -+ * On success, this call always returns (.consumed >= 1), as per X.691#10.1.3. -+ */ -+asn_dec_rval_t aper_decode_complete(struct asn_codec_ctx_s *opt_codec_ctx, -+ struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ -+ void **struct_ptr, /* Pointer to a target structure's pointer */ -+ const void *buffer, /* Data to be decoded */ -+ size_t size /* Size of data buffer */ -+ ); - - /* -+ * Aligned PER decoder of any ASN.1 type. May be invoked by the application. -+ * WARNING: This call returns the number of BITS read from the stream. Beware. -+ */ -+asn_dec_rval_t aper_decode(struct asn_codec_ctx_s *opt_codec_ctx, -+ struct asn_TYPE_descriptor_s *type_descriptor, /* Type to decode */ -+ void **struct_ptr, /* Pointer to a target structure's pointer */ -+ const void *buffer, /* Data to be decoded */ -+ size_t size, /* Size of data buffer */ -+ int skip_bits, /* Number of unused leading bits, 0..7 */ -+ int unused_bits /* Number of unused tailing bits, 0..7 */ -+ ); -+/* - * Type of the type-specific PER decoder function. - */ - typedef asn_dec_rval_t (per_type_decoder_f)(asn_codec_ctx_t *opt_codec_ctx, -Index: skeletons/per_support.c -=================================================================== ---- skeletons/per_support.c (revision 1516) -+++ skeletons/per_support.c (working copy) -@@ -31,6 +31,16 @@ - } - } - -+int32_t -+aper_get_align(asn_per_data_t *pd) { -+ -+ if(pd->nboff & 0x7) { -+ ASN_DEBUG("Aligning %d bits", 8 - (pd->nboff & 0x7)); -+ return per_get_few_bits(pd, 8 - (pd->nboff & 0x7)); -+ } -+ return 0; -+} -+ - /* - * Extract a small number of bits (<= 31) from the specified PER data pointer. - */ -@@ -187,6 +197,36 @@ - return (16384 * value); - } - -+ssize_t -+aper_get_length(asn_per_data_t *pd, int range, int ebits, int *repeat) { -+ ssize_t value; -+ -+ *repeat = 0; -+ -+ if (range <= 65536 && range >= 0) -+ return aper_get_nsnnwn(pd, range); -+ -+ if (aper_get_align(pd) < 0) -+ return -1; -+ -+ if(ebits >= 0) return per_get_few_bits(pd, ebits); -+ -+ value = per_get_few_bits(pd, 8); -+ if(value < 0) return -1; -+ if((value & 128) == 0) /* #10.9.3.6 */ -+ return (value & 0x7F); -+ if((value & 64) == 0) { /* #10.9.3.7 */ -+ value = ((value & 63) << 8) | per_get_few_bits(pd, 8); -+ if(value < 0) return -1; -+ return value; -+ } -+ value &= 63; /* this is "m" from X.691, #10.9.3.8 */ -+ if(value < 1 || value > 4) -+ return -1; -+ *repeat = 1; -+ return (16384 * value); -+} -+ - /* - * Get the normally small length "n". - * This procedure used to decode length of extensions bit-maps -@@ -211,6 +251,25 @@ - } - } - -+ssize_t -+aper_get_nslength(asn_per_data_t *pd) { -+ ssize_t length; -+ -+ ASN_DEBUG("Getting normally small length"); -+ -+ if(per_get_few_bits(pd, 1) == 0) { -+ length = per_get_few_bits(pd, 6) + 1; -+ if(length <= 0) return -1; -+ ASN_DEBUG("l=%d", length); -+ return length; -+ } else { -+ int repeat; -+ length = aper_get_length(pd, -1, -1, &repeat); -+ if(length >= 0 && !repeat) return length; -+ return -1; /* Error, or do not support >16K extensions */ -+ } -+} -+ - /* - * Get the normally small non-negative whole number. - * X.691, #10.6 -@@ -237,6 +296,40 @@ - return value; - } - -+ssize_t -+aper_get_nsnnwn(asn_per_data_t *pd, int range) { -+ ssize_t value; -+ int bytes = 0; -+ -+ ASN_DEBUG("getting nsnnwn with range %d", range); -+ -+ if(range <= 255) { -+ if (range < 0) return -1; -+ /* 1 -> 8 bits */ -+ int i; -+ for (i = 1; i <= 8; i++) { -+ int upper = 1 << i; -+ if (upper >= range) -+ break; -+ } -+ value = per_get_few_bits(pd, i); -+ return value; -+ } else if (range == 256){ -+ /* 1 byte */ -+ bytes = 1; -+ return -1; -+ } else if (range <= 65536) { -+ /* 2 bytes */ -+ bytes = 2; -+ } else { -+ return -1; -+ } -+ if (aper_get_align(pd) < 0) -+ return -1; -+ value = per_get_few_bits(pd, 8 * bytes); -+ return value; -+} -+ - /* - * Put the normally small non-negative whole number. - * X.691, #10.6 -@@ -263,7 +356,59 @@ - return per_put_few_bits(po, n, 8 * bytes); - } - -+int -+aper_put_nsnnwn(asn_per_outp_t *po, int range, int number) { -+ int bytes; - -+ /* 10.5.7.1 X.691 */ -+ if(range < 0) { -+ int i; -+ for (i = 1; ; i++) { -+ int bits = 1 << (8 * i); -+ if (number <= bits) -+ break; -+ } -+ bytes = i; -+ assert(i <= 4); -+ } -+ if(range <= 255) { -+ int i; -+ for (i = 1; i <= 8; i++) { -+ int bits = 1 << i; -+ if (range <= bits) -+ break; -+ } -+ return per_put_few_bits(po, number, i); -+ } else if(range == 256) { -+ bytes = 1; -+ } else if(range <= 65536) { -+ bytes = 2; -+ } else { /* Ranges > 64K */ -+ int i; -+ for (i = 1; ; i++) { -+ int bits = 1 << (8 * i); -+ if (range <= bits) -+ break; -+ } -+ assert(i <= 4); -+ bytes = i; -+ } -+ if(aper_put_align(po) < 0) /* Aligning on octet */ -+ return -1; -+ -+ return per_put_few_bits(po, number, 8 * bytes); -+} -+ -+int aper_put_align(asn_per_outp_t *po) { -+ -+ if(po->nboff & 0x7) { -+ ASN_DEBUG("Aligning %d bits", 8 - (po->nboff & 0x7)); -+ if(per_put_few_bits(po, 0x00, (8 - (po->nboff & 0x7)))) -+ return -1; -+ } -+ return 0; -+} -+ - /* - * Put a small number of bits (<= 31). - */ -@@ -392,6 +537,8 @@ - ssize_t - uper_put_length(asn_per_outp_t *po, size_t length) { - -+ ASN_DEBUG("UPER put length %d", length); -+ - if(length <= 127) /* #10.9.3.6 */ - return per_put_few_bits(po, length, 8) - ? -1 : (ssize_t)length; -@@ -406,7 +553,34 @@ - ? -1 : (ssize_t)(length << 14); - } - -+ssize_t -+aper_put_length(asn_per_outp_t *po, int range, size_t length) { - -+ ASN_DEBUG("APER put length %d with range %d", length, range); -+ -+ /* 10.9 X.691 Note 2 */ -+ if (range <= 65536 && range >= 0) -+ return aper_put_nsnnwn(po, range, length); -+ -+ if (aper_put_align(po) < 0) -+ return -1; -+ -+ if(length <= 127) /* #10.9.3.6 */{ -+ return per_put_few_bits(po, length, 8) -+ ? -1 : (ssize_t)length; -+ } -+ else if(length < 16384) /* #10.9.3.7 */ -+ return per_put_few_bits(po, length|0x8000, 16) -+ ? -1 : (ssize_t)length; -+ -+ length >>= 14; -+ if(length > 4) length = 4; -+ -+ return per_put_few_bits(po, 0xC0 | length, 8) -+ ? -1 : (ssize_t)(length << 14); -+} -+ -+ - /* - * Put the normally small length "n" into the stream. - * This procedure used to encode length of extensions bit-maps -@@ -429,3 +603,19 @@ - return 0; - } - -+int -+aper_put_nslength(asn_per_outp_t *po, size_t length) { -+ -+ if(length <= 64) { -+ /* #10.9.3.4 */ -+ if(length == 0) return -1; -+ return per_put_few_bits(po, length-1, 7) ? -1 : 0; -+ } else { -+ if(aper_put_length(po, -1, length) != (ssize_t)length) { -+ /* This might happen in case of >16K extensions */ -+ return -1; -+ } -+ } -+ -+ return 0; -+} -Index: skeletons/constr_SET.c -=================================================================== ---- skeletons/constr_SET.c (revision 1516) -+++ skeletons/constr_SET.c (working copy) -@@ -36,7 +36,7 @@ - #undef ADVANCE - #define ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- ptr = ((const void *)ptr) + num;\ -+ ptr = ((const char *)ptr) + num;\ - size -= num; \ - if(ctx->left >= 0) \ - ctx->left -= num; \ -@@ -132,7 +132,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Start to parse where left previously -@@ -250,7 +250,7 @@ - - skip = ber_skip_length(opt_codec_ctx, - BER_TLV_CONSTRUCTED(ptr), -- (const void *)ptr + tag_len, LEFT - tag_len); -+ (const char *)ptr + tag_len, LEFT - tag_len); - - switch(skip) { - case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); -@@ -271,7 +271,7 @@ - * Check for duplications: must not overwrite - * already decoded elements. - */ -- if(ASN_SET_ISPRESENT2((void *)st + specs->pres_offset, edx)) { -+ if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset, edx)) { - ASN_DEBUG("SET %s: Duplicate element %s (%d)", - td->name, elements[edx].name, edx); - RETURN(RC_FAIL); -@@ -284,13 +284,13 @@ - */ - if(elements[edx].flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st + elements[edx].memb_offset); -+ memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); - } else { - /* - * A pointer to a pointer - * holding the start of the structure - */ -- memb_ptr = (void *)st + elements[edx].memb_offset; -+ memb_ptr = (char *)st + elements[edx].memb_offset; - memb_ptr2 = &memb_ptr; - } - /* -@@ -302,7 +302,7 @@ - elements[edx].tag_mode); - switch(rval.code) { - case RC_OK: -- ASN_SET_MKPRESENT((void *)st + specs->pres_offset, edx); -+ ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx); - break; - case RC_WMORE: /* More data expected */ - if(!SIZE_VIOLATION) { -@@ -369,7 +369,7 @@ - - ll = ber_skip_length(opt_codec_ctx, - BER_TLV_CONSTRUCTED(ptr), -- (const void *)ptr + tl, LEFT - tl); -+ (const char *)ptr + tl, LEFT - tl); - switch(ll) { - case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); - /* Fall through */ -@@ -404,7 +404,7 @@ - unsigned int midx, pres, must; - - midx = edx/(8 * sizeof(specs->_mandatory_elements[0])); -- pres = ((unsigned int *)((void *)st+specs->pres_offset))[midx]; -+ pres = ((unsigned int *)((char *)st+specs->pres_offset))[midx]; - must = sys_ntohl(specs->_mandatory_elements[midx]); - - if((pres & must) == must) { -@@ -473,7 +473,7 @@ - * Compute the length of the encoding of this member. - */ - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(!elm->optional) - /* Mandatory elements missing */ -@@ -486,7 +486,7 @@ - continue; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - tmper = elm->type->der_encoder(elm->type, memb_ptr, - elm->tag_mode, elm->tag, -@@ -547,10 +547,10 @@ - elm = &td->elements[t2m[edx].el_no]; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) continue; - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - tmper = elm->type->der_encoder(elm->type, memb_ptr, - elm->tag_mode, elm->tag, -@@ -570,10 +570,185 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+SET_encode_uper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, -+ void *sptr, -+ asn_per_outp_t *po) { -+} -+ -+asn_dec_rval_t -+SET_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+} -+ -+asn_enc_rval_t -+SET_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, -+ void *sptr, -+ asn_per_outp_t *po) { -+ asn_SET_specifics_t *specs = (asn_SET_specifics_t *)td->specifics; -+ asn_enc_rval_t er; -+ int edx, i; -+ int t2m_build_own = (specs->tag2el_count != td->elements_count); -+ asn_TYPE_tag2member_t *t2m; -+ int t2m_count; -+ -+ (void)constraints; -+ -+ if(!sptr) -+ _ASN_ENCODE_FAILED; -+ -+ er.encoded = 0; -+ -+ ASN_DEBUG("Encoding %s as SET (APER) map %d", td->name, specs->_mandatory_elements[0]); -+ -+ /* -+ * Use existing, or build our own tags map. -+ */ -+ if(t2m_build_own) { -+ t2m = (asn_TYPE_tag2member_t *)alloca( -+ td->elements_count * sizeof(t2m[0])); -+ if(!t2m) _ASN_ENCODE_FAILED; /* There are such platforms */ -+ t2m_count = 0; -+ } else { -+ /* -+ * There is no untagged CHOICE in this SET. -+ * Employ existing table. -+ */ -+ t2m = specs->tag2el; -+ t2m_count = specs->tag2el_count; -+ } -+ -+ /* -+ * Gather the length of the underlying members sequence. -+ */ -+ for(edx = 0; edx < td->elements_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ asn_enc_rval_t tmper; -+ void *memb_ptr; -+ -+ /* -+ * Compute the length of the encoding of this member. -+ */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); -+ if(!memb_ptr) { -+ if(!elm->optional) -+ /* Mandatory elements missing */ -+ _ASN_ENCODE_FAILED; -+ if(t2m_build_own) { -+ t2m[t2m_count].el_no = edx; -+ t2m[t2m_count].el_tag = 0; -+ t2m_count++; -+ } -+ continue; -+ } -+ } else { -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); -+ } -+ -+ /* -+ * Remember the outmost tag of this member. -+ */ -+ if(t2m_build_own) { -+ t2m[t2m_count].el_no = edx; -+ t2m[t2m_count].el_tag = asn_TYPE_outmost_tag( -+ elm->type, memb_ptr, elm->tag_mode, elm->tag); -+ t2m_count++; -+ } else { -+ /* -+ * No dynamic sorting is necessary. -+ */ -+ } -+ } -+ -+ /* -+ * Finalize order of the components. -+ */ -+ assert(t2m_count == td->elements_count); -+ if(t2m_build_own) { -+ /* -+ * Sort the underlying members according to their -+ * canonical tags order. DER encoding mandates it. -+ */ -+ qsort(t2m, t2m_count, sizeof(specs->tag2el[0]), _t2e_cmp); -+ } else { -+ /* -+ * Tags are already sorted by the compiler. -+ */ -+ } -+ -+ for(edx = 0; edx < td->elements_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[t2m[edx].el_no]; -+ asn_enc_rval_t tmper; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ int present; -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); -+ present = (*memb_ptr2 != 0); -+ } else { -+// memb_ptr = (void *)((char *)sptr + elm->memb_offset); -+// memb_ptr2 = &memb_ptr; -+ present = 1; -+ continue; -+ } -+ -+// /* Eliminate default values */ -+// if(present && elm->default_value -+// && elm->default_value(0, memb_ptr2) == 1) -+// present = 0; -+ -+ ASN_DEBUG("Element %s %s %s->%s is %s", -+ elm->flags & ATF_POINTER ? "ptr" : "inline", -+ elm->default_value ? "def" : "wtv", -+ td->name, elm->name, present ? "present" : "absent"); -+ if(per_put_few_bits(po, present << 7, 8)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ /* -+ * Encode all members. -+ */ -+ for(edx = 0; edx < td->elements_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ asn_enc_rval_t tmper; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ -+ /* Encode according to the tag order */ -+// elm = &td->elements[t2m[edx].el_no]; -+ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); -+ if(!*memb_ptr2) { -+ ASN_DEBUG("Element %s %d not present", -+ elm->name, edx); -+ if(elm->optional) -+ continue; -+ /* Mandatory element is missing */ -+ _ASN_ENCODE_FAILED; -+ } -+ } else { -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); -+ memb_ptr2 = &memb_ptr; -+ } -+ tmper = elm->type->aper_encoder(elm->type, elm->per_constraints, -+ *memb_ptr2, po); -+ if(tmper.encoded == -1) -+ return tmper; -+ } -+ -+ _ASN_ENCODED_OK(er); -+} -+ - #undef XER_ADVANCE - #define XER_ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- buf_ptr = ((const void *)buf_ptr) + num;\ -+ buf_ptr = ((const char *)buf_ptr) + num;\ - size -= num; \ - consumed_myself += num; \ - } while(0) -@@ -613,7 +788,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Phases of XER/XML processing: -@@ -637,7 +812,7 @@ - void *memb_ptr; /* Pointer to the member */ - void **memb_ptr2; /* Pointer to that pointer */ - -- if(ASN_SET_ISPRESENT2((void *)st + specs->pres_offset, -+ if(ASN_SET_ISPRESENT2((char *)st + specs->pres_offset, - edx)) { - ASN_DEBUG("SET %s: Duplicate element %s (%d)", - td->name, elements[edx].name, edx); -@@ -648,10 +823,10 @@ - - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st -+ memb_ptr2 = (void **)((char *)st - + elm->memb_offset); - } else { -- memb_ptr = (void *)st + elm->memb_offset; -+ memb_ptr = (char *)st + elm->memb_offset; - memb_ptr2 = &memb_ptr; - } - -@@ -663,7 +838,7 @@ - if(tmprval.code != RC_OK) - RETURN(tmprval.code); - ctx->phase = 1; /* Back to body processing */ -- ASN_SET_MKPRESENT((void *)st + specs->pres_offset, edx); -+ ASN_SET_MKPRESENT((char *)st + specs->pres_offset, edx); - ASN_DEBUG("XER/SET phase => %d", ctx->phase); - /* Fall through */ - } -@@ -827,7 +1002,7 @@ - mlen = strlen(elm->name); - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) - continue; -@@ -835,7 +1010,7 @@ - _ASN_ENCODE_FAILED; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - - if(!xcan) -@@ -877,14 +1052,14 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) continue; - /* Print <absent> line */ - /* Fall through */ - } - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - _i_INDENT(1); -@@ -919,11 +1094,11 @@ - asn_TYPE_member_t *elm = &td->elements[edx]; - void *memb_ptr; - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)ptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)ptr + elm->memb_offset); - if(memb_ptr) - ASN_STRUCT_FREE(*elm->type, memb_ptr); - } else { -- memb_ptr = (void *)((void *)ptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)ptr + elm->memb_offset); - ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); - } - } -@@ -953,7 +1128,7 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) - continue; -@@ -963,7 +1138,7 @@ - return -1; - } - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - if(elm->memb_constraints) { -Index: skeletons/constr_SEQUENCE_OF.c -=================================================================== ---- skeletons/constr_SEQUENCE_OF.c (revision 1516) -+++ skeletons/constr_SEQUENCE_OF.c (working copy) -@@ -164,7 +164,7 @@ - if(ct) { - int not_in_root = (list->count < ct->lower_bound - || list->count > ct->upper_bound); -- ASN_DEBUG("lb %ld ub %ld %s", -+ ASN_DEBUG("lb %"PRIdMAX" ub %"PRIdMAX" %s", - ct->lower_bound, ct->upper_bound, - ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); - if(ct->flags & APC_EXTENSIBLE) { -@@ -206,3 +206,70 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+SEQUENCE_OF_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_anonymous_sequence_ *list; -+ asn_per_constraint_t *ct; -+ asn_enc_rval_t er; -+ asn_TYPE_member_t *elm = td->elements; -+ int seq; -+ -+ if(!sptr) _ASN_ENCODE_FAILED; -+ list = _A_SEQUENCE_FROM_VOID(sptr); -+ -+ er.encoded = 0; -+ -+ ASN_DEBUG("Encoding %s as SEQUENCE OF size (%d) using ALIGNED PER", td->name, list->count); -+ -+ if(constraints) ct = &constraints->size; -+ else if(td->per_constraints) ct = &td->per_constraints->size; -+ else ct = 0; -+ -+ /* If extensible constraint, check if size is in root */ -+ if(ct) { -+ int not_in_root = (list->count < ct->lower_bound -+ || list->count > ct->upper_bound); -+ ASN_DEBUG("lb %"PRIdMAX" ub %"PRIdMAX" %s", -+ ct->lower_bound, ct->upper_bound, -+ ct->flags & APC_EXTENSIBLE ? "ext" : "fix"); -+ if(ct->flags & APC_EXTENSIBLE) { -+ /* Declare whether size is in extension root */ -+ if(per_put_few_bits(po, not_in_root, 1)) -+ _ASN_ENCODE_FAILED; -+ if(not_in_root) ct = 0; -+ } else if(not_in_root && ct->effective_bits >= 0) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ if(ct && ct->effective_bits >= 0) { -+ /* X.691, #19.5: No length determinant */ -+// if(per_put_few_bits(po, list->count - ct->lower_bound, -+// ct->effective_bits)) -+// _ASN_ENCODE_FAILED; -+ if (aper_put_length(po, ct->upper_bound - ct->lower_bound + 1, list->count - ct->lower_bound) < 0) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ for(seq = -1; seq < list->count;) { -+ ssize_t mayEncode; -+ if(seq < 0) seq = 0; -+ if(ct && ct->effective_bits >= 0) { -+ mayEncode = list->count; -+ } else { -+ mayEncode = aper_put_length(po, -1, list->count - seq); -+ if(mayEncode < 0) _ASN_ENCODE_FAILED; -+ } -+ -+ while(mayEncode--) { -+ void *memb_ptr = list->array[seq++]; -+ if(!memb_ptr) _ASN_ENCODE_FAILED; -+ er = elm->type->aper_encoder(elm->type, -+ elm->per_constraints, memb_ptr, po); -+ if(er.encoded == -1) -+ _ASN_ENCODE_FAILED; -+ } -+ } -+ -+ _ASN_ENCODED_OK(er); -+} -Index: skeletons/per_support.h -=================================================================== ---- skeletons/per_support.h (revision 1516) -+++ skeletons/per_support.h (working copy) -@@ -24,8 +24,8 @@ - } flags; - int range_bits; /* Full number of bits in the range */ - int effective_bits; /* Effective bits */ -- long lower_bound; /* "lb" value */ -- long upper_bound; /* "ub" value */ -+ int64_t lower_bound; /* "lb" value */ -+ int64_t upper_bound; /* "ub" value */ - } asn_per_constraint_t; - typedef struct asn_per_constraints_s { - asn_per_constraint_t value; -@@ -39,9 +39,9 @@ - */ - typedef struct asn_per_data_s { - const uint8_t *buffer; /* Pointer to the octet stream */ -- size_t nboff; /* Bit offset to the meaningful bit */ -- size_t nbits; /* Number of bits in the stream */ -- size_t moved; /* Number of bits moved through this bit stream */ -+ size_t nboff; /* Bit offset to the meaningful bit */ -+ size_t nbits; /* Number of bits in the stream */ -+ size_t moved; /* Number of bits moved through this bit stream */ - int (*refill)(struct asn_per_data_s *); - void *refill_key; - } asn_per_data_t; -@@ -71,15 +71,22 @@ - int effective_bound_bits, - int *repeat); - -+ssize_t aper_get_length(asn_per_data_t *pd, -+ int range, -+ int effective_bound_bits, -+ int *repeat); -+ - /* - * Get the normally small length "n". - */ - ssize_t uper_get_nslength(asn_per_data_t *pd); -+ssize_t aper_get_nslength(asn_per_data_t *pd); - - /* - * Get the normally small non-negative whole number. - */ - ssize_t uper_get_nsnnwn(asn_per_data_t *pd); -+ssize_t aper_get_nsnnwn(asn_per_data_t *pd, int range); - - /* Non-thread-safe debugging function, don't use it */ - char *per_data_string(asn_per_data_t *pd); -@@ -103,6 +110,10 @@ - /* Output a large number of bits */ - int per_put_many_bits(asn_per_outp_t *po, const uint8_t *src, int put_nbits); - -+/* Align the current bit position to octet bundary */ -+int aper_put_align(asn_per_outp_t *po); -+int32_t aper_get_align(asn_per_data_t *pd); -+ - /* - * Put the length "n" to the Unaligned PER stream. - * This function returns the number of units which may be flushed -@@ -110,17 +121,23 @@ - */ - ssize_t uper_put_length(asn_per_outp_t *po, size_t whole_length); - -+ssize_t aper_put_length(asn_per_outp_t *po, int range, size_t length); -+ - /* - * Put the normally small length "n" to the Unaligned PER stream. - * Returns 0 or -1. - */ - int uper_put_nslength(asn_per_outp_t *po, size_t length); - -+int aper_put_nslength(asn_per_outp_t *po, size_t length); -+ - /* - * Put the normally small non-negative whole number. - */ - int uper_put_nsnnwn(asn_per_outp_t *po, int n); - -+int aper_put_nsnnwn(asn_per_outp_t *po, int range, int number); -+ - #ifdef __cplusplus - } - #endif -Index: skeletons/constr_SET.h -=================================================================== ---- skeletons/constr_SET.h (revision 1516) -+++ skeletons/constr_SET.h (working copy) -@@ -53,7 +53,9 @@ - xer_type_decoder_f SET_decode_xer; - xer_type_encoder_f SET_encode_xer; - per_type_decoder_f SET_decode_uper; -+per_type_decoder_f SET_decode_aper; - per_type_encoder_f SET_encode_uper; -+per_type_encoder_f SET_encode_aper; - - /*********************** - * Some handy helpers. * -Index: skeletons/constr_SEQUENCE_OF.h -=================================================================== ---- skeletons/constr_SEQUENCE_OF.h (revision 1516) -+++ skeletons/constr_SEQUENCE_OF.h (working copy) -@@ -22,9 +22,11 @@ - #define SEQUENCE_OF_decode_ber SET_OF_decode_ber - #define SEQUENCE_OF_decode_xer SET_OF_decode_xer - #define SEQUENCE_OF_decode_uper SET_OF_decode_uper -+#define SEQUENCE_OF_decode_aper SET_OF_decode_aper - der_type_encoder_f SEQUENCE_OF_encode_der; - xer_type_encoder_f SEQUENCE_OF_encode_xer; - per_type_encoder_f SEQUENCE_OF_encode_uper; -+per_type_encoder_f SEQUENCE_OF_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/ENUMERATED.c -=================================================================== ---- skeletons/ENUMERATED.c (revision 1516) -+++ skeletons/ENUMERATED.c (working copy) -@@ -26,6 +26,8 @@ - INTEGER_encode_xer, - ENUMERATED_decode_uper, /* Unaligned PER decoder */ - ENUMERATED_encode_uper, /* Unaligned PER encoder */ -+ ENUMERATED_decode_aper, /* Aligned PER decoder */ -+ ENUMERATED_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ENUMERATED_tags, - sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), -@@ -57,6 +59,27 @@ - return rval; - } - -+asn_dec_rval_t -+ENUMERATED_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_dec_rval_t rval; -+ ENUMERATED_t *st = (ENUMERATED_t *)*sptr; -+ long value; -+ void *vptr = &value; -+ -+ if(!st) { -+ st = (ENUMERATED_t *)(*sptr = CALLOC(1, sizeof(*st))); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ -+ rval = NativeEnumerated_decode_aper(opt_codec_ctx, td, constraints, -+ (void **)&vptr, pd); -+ if(rval.code == RC_OK) -+ if(asn_long2INTEGER(st, value)) -+ rval.code = RC_FAIL; -+ return rval; -+} -+ - asn_enc_rval_t - ENUMERATED_encode_uper(asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -@@ -69,3 +92,14 @@ - return NativeEnumerated_encode_uper(td, constraints, &value, po); - } - -+asn_enc_rval_t -+ENUMERATED_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ ENUMERATED_t *st = (ENUMERATED_t *)sptr; -+ long value; -+ -+ if(asn_INTEGER2long(st, &value)) -+ _ASN_ENCODE_FAILED; -+ -+ return NativeEnumerated_encode_aper(td, constraints, &value, po); -+} -Index: skeletons/ENUMERATED.h -=================================================================== ---- skeletons/ENUMERATED.h (revision 1516) -+++ skeletons/ENUMERATED.h (working copy) -@@ -17,6 +17,8 @@ - - per_type_decoder_f ENUMERATED_decode_uper; - per_type_encoder_f ENUMERATED_encode_uper; -+per_type_decoder_f ENUMERATED_decode_aper; -+per_type_encoder_f ENUMERATED_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/NativeEnumerated.c -=================================================================== ---- skeletons/NativeEnumerated.c (revision 1516) -+++ skeletons/NativeEnumerated.c (working copy) -@@ -30,6 +30,8 @@ - NativeEnumerated_encode_xer, - NativeEnumerated_decode_uper, - NativeEnumerated_encode_uper, -+ NativeEnumerated_decode_aper, -+ NativeEnumerated_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeEnumerated_tags, - sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), -@@ -42,17 +44,17 @@ - - asn_enc_rval_t - NativeEnumerated_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, -- int ilevel, enum xer_encoder_flags_e flags, -- asn_app_consume_bytes_f *cb, void *app_key) { -+ int ilevel, enum xer_encoder_flags_e flags, -+ asn_app_consume_bytes_f *cb, void *app_key) { - asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; -- asn_enc_rval_t er; -- const long *native = (const long *)sptr; -+ asn_enc_rval_t er; -+ const long *native = (const long *)sptr; - const asn_INTEGER_enum_map_t *el; - -- (void)ilevel; -- (void)flags; -+ (void)ilevel; -+ (void)flags; - -- if(!native) _ASN_ENCODE_FAILED; -+ if(!native) _ASN_ENCODE_FAILED; - - el = INTEGER_map_value2enum(specs, *native); - if(el) { -@@ -125,6 +127,66 @@ - return rval; - } - -+asn_dec_rval_t -+NativeEnumerated_decode_aper(asn_codec_ctx_t *opt_codec_ctx, -+ asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, -+ void **sptr, asn_per_data_t *pd) { -+ asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; -+ asn_dec_rval_t rval = { RC_OK, 0 }; -+ long *native = (long *)*sptr; -+ asn_per_constraint_t *ct; -+ long value; -+ int freeme = 0; -+ -+ (void)opt_codec_ctx; -+ -+ if(constraints) ct = &constraints->value; -+ else if(td->per_constraints) ct = &td->per_constraints->value; -+ else _ASN_DECODE_FAILED; /* Mandatory! */ -+ if(!specs) _ASN_DECODE_FAILED; -+ -+ if(!native) { -+ native = (long *)(*sptr = CALLOC(1, sizeof(*native))); -+ freeme = 1; -+ if(!native) _ASN_DECODE_FAILED; -+ } -+ -+ ASN_DEBUG("Decoding %s as NativeEnumerated", td->name); -+ -+ if(ct->flags & APC_EXTENSIBLE) { -+ int inext = per_get_few_bits(pd, 1); -+ if(inext < 0) _ASN_DECODE_STARVED; -+ if(inext) ct = 0; -+ } -+ -+ if(ct && ct->range_bits >= 0) { -+ value = per_get_few_bits(pd, ct->range_bits); -+ if(value < 0) _ASN_DECODE_STARVED; -+ if(value >= (specs->extension -+ ? specs->extension - 1 : specs->map_count)) -+ _ASN_DECODE_FAILED; -+ } else { -+ if(!specs->extension) -+ _ASN_DECODE_FAILED; -+ /* -+ * X.691, #10.6: normally small non-negative whole number; -+ */ -+ value = uper_get_nsnnwn(pd); -+ if(value < 0) _ASN_DECODE_STARVED; -+ value += specs->extension - 1; -+ if(value >= specs->map_count) -+ _ASN_DECODE_FAILED; -+ } -+ -+ *native = specs->value2enum[value].nat_value; -+ ASN_DEBUG("Decoded %s = %ld", td->name, *native); -+ -+ if (freeme) -+ free(native); -+ -+ return rval; -+} -+ - static int - NativeEnumerated__compar_value2enum(const void *ap, const void *bp) { - const asn_INTEGER_enum_map_t *a = ap; -@@ -205,3 +267,71 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+NativeEnumerated_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_INTEGER_specifics_t *specs = (asn_INTEGER_specifics_t *)td->specifics; -+ asn_enc_rval_t er; -+ long native, value; -+ asn_per_constraint_t *ct; -+ int inext = 0; -+ asn_INTEGER_enum_map_t key; -+ asn_INTEGER_enum_map_t *kf; -+ -+ if(!sptr) _ASN_ENCODE_FAILED; -+ if(!specs) _ASN_ENCODE_FAILED; -+ -+ if(constraints) ct = &constraints->value; -+ else if(td->per_constraints) ct = &td->per_constraints->value; -+ else _ASN_ENCODE_FAILED; /* Mandatory! */ -+ -+ ASN_DEBUG("Encoding %s as NativeEnumerated", td->name); -+ -+ er.encoded = 0; -+ -+ native = *(long *)sptr; -+ if(native < 0) _ASN_ENCODE_FAILED; -+ -+ key.nat_value = native; -+ kf = bsearch(&key, specs->value2enum, specs->map_count, -+ sizeof(key), NativeEnumerated__compar_value2enum); -+ if(!kf) { -+ ASN_DEBUG("No element corresponds to %ld", native); -+ _ASN_ENCODE_FAILED; -+ } -+ value = kf - specs->value2enum; -+ -+ if(ct->range_bits >= 0) { -+ int cmpWith = specs->extension -+ ? specs->extension - 1 : specs->map_count; -+ if(value >= cmpWith) -+ inext = 1; -+ } -+ if(ct->flags & APC_EXTENSIBLE) { -+ if(per_put_few_bits(po, inext, 1)) -+ _ASN_ENCODE_FAILED; -+ if(inext) ct = 0; -+ } else if(inext) { -+ _ASN_ENCODE_FAILED; -+ } -+ -+ if(ct && ct->range_bits >= 0) { -+ if(per_put_few_bits(po, value, ct->range_bits)) -+ _ASN_ENCODE_FAILED; -+ _ASN_ENCODED_OK(er); -+ } -+ -+ if(!specs->extension) -+ _ASN_ENCODE_FAILED; -+ -+ /* -+ * X.691, #10.6: normally small non-negative whole number; -+ */ -+ ASN_DEBUG("value = %ld, ext = %d, inext = %d, res = %ld", -+ value, specs->extension, inext, -+ value - (inext ? (specs->extension - 1) : 0)); -+ if(uper_put_nsnnwn(po, value - (inext ? (specs->extension - 1) : 0))) -+ _ASN_ENCODE_FAILED; -+ -+ _ASN_ENCODED_OK(er); -+} -Index: skeletons/GeneralString.c -=================================================================== ---- skeletons/GeneralString.c (revision 1516) -+++ skeletons/GeneralString.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer, - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GeneralString_tags, - sizeof(asn_DEF_GeneralString_tags) -Index: skeletons/IA5String.c -=================================================================== ---- skeletons/IA5String.c (revision 1516) -+++ skeletons/IA5String.c (working copy) -@@ -29,6 +29,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_IA5String_tags, - sizeof(asn_DEF_IA5String_tags) -Index: skeletons/NativeEnumerated.h -=================================================================== ---- skeletons/NativeEnumerated.h (revision 1516) -+++ skeletons/NativeEnumerated.h (working copy) -@@ -24,6 +24,8 @@ - xer_type_encoder_f NativeEnumerated_encode_xer; - per_type_decoder_f NativeEnumerated_decode_uper; - per_type_encoder_f NativeEnumerated_encode_uper; -+per_type_decoder_f NativeEnumerated_decode_aper; -+per_type_encoder_f NativeEnumerated_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/OBJECT_IDENTIFIER.c -=================================================================== ---- skeletons/OBJECT_IDENTIFIER.c (revision 1516) -+++ skeletons/OBJECT_IDENTIFIER.c (working copy) -@@ -27,6 +27,8 @@ - OBJECT_IDENTIFIER_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_OBJECT_IDENTIFIER_tags, - sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) -Index: skeletons/per_opentype.c -=================================================================== ---- skeletons/per_opentype.c (revision 1516) -+++ skeletons/per_opentype.c (working copy) -@@ -53,6 +53,35 @@ - return 0; - } - -+int -+aper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ void *buf; -+ void *bptr; -+ ssize_t size; -+ size_t toGo; -+ -+ ASN_DEBUG("Open type put %s ...", td->name); -+ -+ size = aper_encode_to_new_buffer(td, constraints, sptr, &buf); -+ if(size <= 0) return -1; -+ -+ for(bptr = buf, toGo = size; toGo;) { -+ ssize_t maySave = aper_put_length(po, -1, toGo); -+ if(maySave < 0) break; -+ if(per_put_many_bits(po, bptr, maySave * 8)) break; -+ bptr = (char *)bptr + maySave; -+ toGo -= maySave; -+ } -+ -+ FREEMEM(buf); -+ if(toGo) return -1; -+ -+ ASN_DEBUG("Open type put %s of length %ld + overhead (1byte?)", -+ td->name, (long)size); -+ -+ return 0; -+} -+ - static asn_dec_rval_t - uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -Index: skeletons/VideotexString.c -=================================================================== ---- skeletons/VideotexString.c (revision 1516) -+++ skeletons/VideotexString.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer, - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_VideotexString_tags, - sizeof(asn_DEF_VideotexString_tags) -Index: skeletons/per_opentype.h -=================================================================== ---- skeletons/per_opentype.h (revision 1516) -+++ skeletons/per_opentype.h (working copy) -@@ -15,6 +15,8 @@ - - int uper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); - -+int aper_open_type_put(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po); -+ - #ifdef __cplusplus - } - #endif -Index: skeletons/BOOLEAN.c -=================================================================== ---- skeletons/BOOLEAN.c (revision 1516) -+++ skeletons/BOOLEAN.c (working copy) -@@ -24,6 +24,8 @@ - BOOLEAN_encode_xer, - BOOLEAN_decode_uper, /* Unaligned PER decoder */ - BOOLEAN_encode_uper, /* Unaligned PER encoder */ -+ BOOLEAN_decode_aper, /* Aligned PER decoder */ -+ BOOLEAN_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BOOLEAN_tags, - sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), -@@ -264,7 +266,36 @@ - return rv; - } - -+asn_dec_rval_t -+BOOLEAN_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_dec_rval_t rv; -+ BOOLEAN_t *st = (BOOLEAN_t *)*sptr; - -+ (void)opt_codec_ctx; -+ (void)constraints; -+ -+ if(!st) { -+ st = (BOOLEAN_t *)(*sptr = MALLOC(sizeof(*st))); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ -+ /* -+ * Extract a single bit -+ */ -+ switch(per_get_few_bits(pd, 1)) { -+ case 1: *st = 1; break; -+ case 0: *st = 0; break; -+ case -1: default: _ASN_DECODE_STARVED; -+ } -+ -+ ASN_DEBUG("%s decoded as %s", td->name, *st ? "TRUE" : "FALSE"); -+ -+ rv.code = RC_OK; -+ rv.consumed = 1; -+ return rv; -+} -+ - asn_enc_rval_t - BOOLEAN_encode_uper(asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -@@ -280,3 +311,18 @@ - - _ASN_ENCODED_OK(er); - } -+ -+asn_enc_rval_t -+BOOLEAN_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ const BOOLEAN_t *st = (const BOOLEAN_t *)sptr; -+ asn_enc_rval_t er; -+ -+ (void)constraints; -+ -+ if(!st) _ASN_ENCODE_FAILED; -+ -+ per_put_few_bits(po, *st ? 1 : 0, 1); -+ -+ _ASN_ENCODED_OK(er); -+} -Index: skeletons/ISO646String.c -=================================================================== ---- skeletons/ISO646String.c (revision 1516) -+++ skeletons/ISO646String.c (working copy) -@@ -29,6 +29,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ISO646String_tags, - sizeof(asn_DEF_ISO646String_tags) -Index: skeletons/constr_CHOICE.c -=================================================================== ---- skeletons/constr_CHOICE.c (revision 1516) -+++ skeletons/constr_CHOICE.c (working copy) -@@ -34,7 +34,7 @@ - #undef ADVANCE - #define ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- ptr = ((const void *)ptr) + num;\ -+ ptr = ((const char *)ptr) + num;\ - size -= num; \ - if(ctx->left >= 0) \ - ctx->left -= num; \ -@@ -133,7 +133,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Start to parse where left previously -@@ -211,7 +211,7 @@ - - skip = ber_skip_length(opt_codec_ctx, - BER_TLV_CONSTRUCTED(ptr), -- (const void *)ptr + tag_len, -+ (const char *)ptr + tag_len, - LEFT - tag_len); - - switch(skip) { -@@ -244,7 +244,7 @@ - */ - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); - } else { - /* - * A pointer to a pointer -@@ -390,7 +390,7 @@ - */ - elm = &td->elements[present-1]; - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(memb_ptr == 0) { - if(elm->optional) { - erval.encoded = 0; -@@ -400,7 +400,7 @@ - _ASN_ENCODE_FAILED; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - - /* -@@ -463,10 +463,10 @@ - - if(elm->flags & ATF_POINTER) { - memb_ptr = *(const void * const *) -- ((const void *)ptr + elm->memb_offset); -+ ((const char *)ptr + elm->memb_offset); - } else { - memb_ptr = (const void *) -- ((const void *)ptr + elm->memb_offset); -+ ((const char *)ptr + elm->memb_offset); - } - - return asn_TYPE_outmost_tag(elm->type, memb_ptr, -@@ -498,7 +498,7 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) - return 0; -@@ -508,7 +508,7 @@ - return -1; - } - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - if(elm->memb_constraints) { -@@ -535,7 +535,7 @@ - #undef XER_ADVANCE - #define XER_ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- buf_ptr = ((const void *)buf_ptr) + num;\ -+ buf_ptr = ((const char *)buf_ptr) + num;\ - size -= num; \ - consumed_myself += num; \ - } while(0) -@@ -574,7 +574,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - if(ctx->phase == 0 && !*xml_tag) - ctx->phase = 1; /* Skip the outer tag checking phase */ - -@@ -605,7 +605,7 @@ - - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st -+ memb_ptr2 = (void **)((char *)st - + elm->memb_offset); - } else { - memb_ptr = (char *)st + elm->memb_offset; -@@ -797,10 +797,10 @@ - unsigned int mlen = strlen(mname); - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) _ASN_ENCODE_FAILED; - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - - er.encoded = 0; -@@ -884,7 +884,7 @@ - elm = &td->elements[value]; - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); - } else { - memb_ptr = (char *)st + elm->memb_offset; - memb_ptr2 = &memb_ptr; -@@ -904,7 +904,88 @@ - elm->name, td->name, rv.code); - return rv; - } -- -+ -+asn_dec_rval_t -+CHOICE_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; -+ asn_dec_rval_t rv; -+ asn_per_constraint_t *ct; -+ asn_TYPE_member_t *elm; /* CHOICE's element */ -+ void *memb_ptr; -+ void **memb_ptr2; -+ void *st = *sptr; -+ int value; -+ -+ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) -+ _ASN_DECODE_FAILED; -+ -+ /* -+ * Create the target structure if it is not present already. -+ */ -+ if(!st) { -+ st = *sptr = CALLOC(1, specs->struct_size); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ -+ if(constraints) ct = &constraints->value; -+ else if(td->per_constraints) ct = &td->per_constraints->value; -+ else ct = 0; -+ -+ if(ct && ct->flags & APC_EXTENSIBLE) { -+ value = per_get_few_bits(pd, 1); -+ if(value < 0) _ASN_DECODE_STARVED; -+ if(value) ct = 0; /* Not restricted */ -+ } -+ -+ if(ct && ct->range_bits >= 0) { -+ value = per_get_few_bits(pd, ct->range_bits); -+ if(value < 0) _ASN_DECODE_STARVED; -+ ASN_DEBUG("CHOICE %s got index %d in range %d", -+ td->name, value, ct->range_bits); -+ if(value > ct->upper_bound) -+ _ASN_DECODE_FAILED; -+ } else { -+ if(specs->ext_start == -1) -+ _ASN_DECODE_FAILED; -+ value = uper_get_nsnnwn(pd); -+ if(value < 0) _ASN_DECODE_STARVED; -+ value += specs->ext_start; -+ if(value >= td->elements_count) -+ _ASN_DECODE_FAILED; -+ } -+ -+ /* Adjust if canonical order is different from natural order */ -+ if(specs->canonical_order) -+ value = specs->canonical_order[value]; -+ -+ /* Set presence to be able to free it later */ -+ _set_present_idx(st, specs->pres_offset, specs->pres_size, value + 1); -+ -+ elm = &td->elements[value]; -+ if(elm->flags & ATF_POINTER) { -+ /* Member is a pointer to another structure */ -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); -+ } else { -+ memb_ptr = (char *)st + elm->memb_offset; -+ memb_ptr2 = &memb_ptr; -+ } -+ ASN_DEBUG("Discovered CHOICE %s encodes %s", td->name, elm->name); -+ -+ if(ct && ct->range_bits >= 0) { -+ rv = elm->type->aper_decoder(opt_codec_ctx, elm->type, -+ elm->per_constraints, memb_ptr2, pd); -+ } else { -+ rv = uper_open_type_get(opt_codec_ctx, elm->type, -+ elm->per_constraints, memb_ptr2, pd); -+ } -+ -+ if(rv.code != RC_OK) -+ ASN_DEBUG("Failed to decode %s in %s (CHOICE) %d", -+ elm->name, td->name, rv.code); -+ return rv; -+} -+ - asn_enc_rval_t - CHOICE_encode_uper(asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -@@ -917,7 +998,7 @@ - - if(!sptr) _ASN_ENCODE_FAILED; - -- ASN_DEBUG("Encoding %s as CHOICE", td->name); -+ ASN_DEBUG("Encoding %s as CHOICE using UPER", td->name); - - if(constraints) ct = &constraints->value; - else if(td->per_constraints) ct = &td->per_constraints->value; -@@ -962,7 +1043,7 @@ - elm = &td->elements[present]; - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) _ASN_ENCODE_FAILED; - } else { - memb_ptr = (char *)sptr + elm->memb_offset; -@@ -987,8 +1068,88 @@ - _ASN_ENCODED_OK(rval); - } - } -- - -+asn_enc_rval_t -+CHOICE_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics; -+ asn_TYPE_member_t *elm; /* CHOICE's element */ -+ asn_per_constraint_t *ct; -+ void *memb_ptr; -+ int present; -+ -+ if(!sptr) _ASN_ENCODE_FAILED; -+ -+ ASN_DEBUG("Encoding %s as CHOICE using ALIGNED PER", td->name); -+ -+ if(constraints) ct = &constraints->value; -+ else if(td->per_constraints) ct = &td->per_constraints->value; -+ else ct = 0; -+ -+ present = _fetch_present_idx(sptr, -+ specs->pres_offset, specs->pres_size); -+ -+ /* -+ * If the structure was not initialized properly, it cannot be encoded: -+ * can't deduce what to encode in the choice type. -+ */ -+ if(present <= 0 || present > td->elements_count) -+ _ASN_ENCODE_FAILED; -+ else -+ present--; -+ -+ /* Adjust if canonical order is different from natural order */ -+ if(specs->canonical_order) -+ present = specs->canonical_order[present]; -+ -+ ASN_DEBUG("Encoding %s CHOICE element %d", td->name, present); -+ -+ if(ct && ct->range_bits >= 0) { -+ if(present < ct->lower_bound -+ || present > ct->upper_bound) { -+ if(ct->flags & APC_EXTENSIBLE) { -+ if(per_put_few_bits(po, 1, 1)) -+ _ASN_ENCODE_FAILED; -+ } else { -+ _ASN_ENCODE_FAILED; -+ } -+ ct = 0; -+ } -+ } -+ if(ct && ct->flags & APC_EXTENSIBLE) { -+ if(per_put_few_bits(po, 0, 1)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ elm = &td->elements[present]; -+ if(elm->flags & ATF_POINTER) { -+ /* Member is a pointer to another structure */ -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); -+ if(!memb_ptr) _ASN_ENCODE_FAILED; -+ } else { -+ memb_ptr = (char *)sptr + elm->memb_offset; -+ } -+ -+ if(ct && ct->range_bits >= 0) { -+ if(per_put_few_bits(po, present, ct->range_bits)) -+ _ASN_ENCODE_FAILED; -+ -+ return elm->type->aper_encoder(elm->type, elm->per_constraints, -+ memb_ptr, po); -+ } else { -+ asn_enc_rval_t rval; -+ if(specs->ext_start == -1) -+ _ASN_ENCODE_FAILED; -+ if(aper_put_nsnnwn(po, ct->range_bits, present - specs->ext_start)) -+ _ASN_ENCODE_FAILED; -+ if(aper_open_type_put(elm->type, elm->per_constraints, -+ memb_ptr, po)) -+ _ASN_ENCODE_FAILED; -+ rval.encoded = 0; -+ _ASN_ENCODED_OK(rval); -+ } -+} -+ - int - CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, - asn_app_consume_bytes_f *cb, void *app_key) { -@@ -1010,10 +1171,10 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) return (cb("<absent>", 8, app_key) < 0) ? -1 : 0; - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - /* Print member's name and stuff */ -@@ -1053,11 +1214,11 @@ - void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)ptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)ptr + elm->memb_offset); - if(memb_ptr) - ASN_STRUCT_FREE(*elm->type, memb_ptr); - } else { -- memb_ptr = (void *)((void *)ptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)ptr + elm->memb_offset); - ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); - } - } -@@ -1082,7 +1243,7 @@ - const void *present_ptr; - int present; - -- present_ptr = ((const void *)struct_ptr) + pres_offset; -+ present_ptr = ((const char *)struct_ptr) + pres_offset; - - switch(pres_size) { - case sizeof(int): present = *(const int *)present_ptr; break; -@@ -1100,7 +1261,7 @@ - static void - _set_present_idx(void *struct_ptr, int pres_offset, int pres_size, int present) { - void *present_ptr; -- present_ptr = ((void *)struct_ptr) + pres_offset; -+ present_ptr = ((char *)struct_ptr) + pres_offset; - - switch(pres_size) { - case sizeof(int): *(int *)present_ptr = present; break; -Index: skeletons/asn_internal.h -=================================================================== ---- skeletons/asn_internal.h (revision 1516) -+++ skeletons/asn_internal.h (working copy) -@@ -20,7 +20,7 @@ - #endif - - /* Environment version might be used to avoid running with the old library */ --#define ASN1C_ENVIRONMENT_VERSION 923 /* Compile-time version */ -+#define ASN1C_ENVIRONMENT_VERSION 924 /* Compile-time version */ - int get_asn1c_environment_version(void); /* Run-time version */ - - #define CALLOC(nmemb, size) calloc(nmemb, size) -@@ -48,18 +48,22 @@ - #define ASN_DEBUG_INDENT_ADD(i) do { asn_debug_indent += i; } while(0) - #endif /* ASN_THREAD_SAFE */ - #define ASN_DEBUG(fmt, args...) do { \ -- int adi = asn_debug_indent; \ -- while(adi--) fprintf(stderr, " "); \ -- fprintf(stderr, fmt, ##args); \ -- fprintf(stderr, " (%s:%d)\n", \ -- __FILE__, __LINE__); \ -- } while(0) -+ int adi = asn_debug_indent; \ -+ while(adi--) fprintf(stderr, " "); \ -+ fprintf(stderr, fmt, ##args); \ -+ fprintf(stderr, " (%s:%d)\n", \ -+ __FILE__, __LINE__); \ -+} while(0) - #else /* !__GNUC__ */ - void ASN_DEBUG_f(const char *fmt, ...); - #define ASN_DEBUG ASN_DEBUG_f - #endif /* __GNUC__ */ - #else /* EMIT_ASN_DEBUG != 1 */ -+# ifdef EMIT_ASN_DEBUG_EXTERN -+extern inline void ASN_DEBUG(const char *fmt, ...); -+# else - static inline void ASN_DEBUG(const char *fmt, ...) { (void)fmt; } -+# endif - #endif /* EMIT_ASN_DEBUG */ - #endif /* ASN_DEBUG */ - -Index: skeletons/BOOLEAN.h -=================================================================== ---- skeletons/BOOLEAN.h (revision 1516) -+++ skeletons/BOOLEAN.h (working copy) -@@ -28,6 +28,8 @@ - xer_type_encoder_f BOOLEAN_encode_xer; - per_type_decoder_f BOOLEAN_decode_uper; - per_type_encoder_f BOOLEAN_encode_uper; -+per_type_decoder_f BOOLEAN_decode_aper; -+per_type_encoder_f BOOLEAN_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/constr_CHOICE.h -=================================================================== ---- skeletons/constr_CHOICE.h (revision 1516) -+++ skeletons/constr_CHOICE.h (working copy) -@@ -48,6 +48,8 @@ - xer_type_encoder_f CHOICE_encode_xer; - per_type_decoder_f CHOICE_decode_uper; - per_type_encoder_f CHOICE_encode_uper; -+per_type_decoder_f CHOICE_decode_aper; -+per_type_encoder_f CHOICE_encode_aper; - asn_outmost_tag_f CHOICE_outmost_tag; - - #ifdef __cplusplus -Index: skeletons/INTEGER.c -=================================================================== ---- skeletons/INTEGER.c (revision 1516) -+++ skeletons/INTEGER.c (working copy) -@@ -27,9 +27,13 @@ - #ifdef ASN_DISABLE_PER_SUPPORT - 0, - 0, -+ 0, -+ 0, - #else - INTEGER_decode_uper, /* Unaligned PER decoder */ - INTEGER_encode_uper, /* Unaligned PER encoder */ -+ INTEGER_decode_aper, -+ INTEGER_encode_aper, - #endif /* ASN_DISABLE_PER_SUPPORT */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_INTEGER_tags, -@@ -612,7 +616,7 @@ - value = per_get_few_bits(pd, ct->range_bits); - if(value < 0) _ASN_DECODE_STARVED; - } -- ASN_DEBUG("Got value %ld + low %ld", -+ ASN_DEBUG("Got value %ld + low %"PRIdMAX, - value, ct->lower_bound); - value += ct->lower_bound; - if((specs && specs->field_unsigned) -@@ -660,6 +664,158 @@ - return rval; - } - -+asn_dec_rval_t -+INTEGER_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; -+ asn_dec_rval_t rval = { RC_OK, 0 }; -+ INTEGER_t *st = (INTEGER_t *)*sptr; -+ asn_per_constraint_t *ct; -+ int repeat; -+ -+ (void)opt_codec_ctx; -+ -+ if(!st) { -+ st = (INTEGER_t *)(*sptr = CALLOC(1, sizeof(*st))); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ -+ if(!constraints) constraints = td->per_constraints; -+ ct = constraints ? &constraints->value : 0; -+ -+ if(ct && ct->flags & APC_EXTENSIBLE) { -+ int inext = per_get_few_bits(pd, 1); -+ if(inext < 0) _ASN_DECODE_STARVED; -+ if(inext) ct = 0; -+ } -+ -+ FREEMEM(st->buf); -+ st->buf = 0; -+ st->size = 0; -+ if(ct) { -+ if(ct->flags & APC_SEMI_CONSTRAINED) { -+ st->buf = (uint8_t *)CALLOC(1, 2); -+ if(!st->buf) _ASN_DECODE_FAILED; -+ st->size = 1; -+ } else if(ct->flags & APC_CONSTRAINED && ct->range_bits >= 0) { -+ size_t size = (ct->range_bits + 7) >> 3; -+ st->buf = (uint8_t *)MALLOC(1 + size + 1); -+ if(!st->buf) _ASN_DECODE_FAILED; -+ st->size = size; -+ } -+ } -+ -+ /* X.691, #12.2.2 */ -+ if(ct && ct->flags != APC_UNCONSTRAINED) { -+ /* #10.5.6 */ -+ ASN_DEBUG("Integer with range %d bits", ct->range_bits); -+ if(ct->range_bits >= 0) { -+ if (ct->range_bits > 16) { -+ int max_range_bytes = (ct->range_bits >> 3) + -+ (((ct->range_bits % 8) > 0) ? 1 : 0); -+ int length = 0, i; -+ int64_t value = 0; -+ -+ for (i = 1; ; i++) { -+ int upper = 1 << i; -+ if (upper >= max_range_bytes) -+ break; -+ } -+ ASN_DEBUG("Can encode %d (%d bytes) in %d bits", ct->range_bits, -+ max_range_bytes, i); -+ -+ if ((length = per_get_few_bits(pd, i)) < 0) -+ _ASN_DECODE_FAILED; -+ -+ /* X.691 #12.2.6 length determinant + lb (1) */ -+ length += 1; -+ ASN_DEBUG("Got length %d", length); -+ -+ if (aper_get_align(pd) != 0) -+ _ASN_DECODE_STARVED; -+ -+ while (length--) { -+ int buf = per_get_few_bits(pd, 8); -+ if (buf < 0) -+ _ASN_DECODE_STARVED; -+ value += (((int64_t)buf) << (8 * length)); -+ } -+ -+ value += ct->lower_bound; -+ if((specs && specs->field_unsigned) -+ ? asn_uint642INTEGER(st, value) -+ : asn_int642INTEGER(st, value)) -+ _ASN_DECODE_FAILED; -+ ASN_DEBUG("Got value %lld + low %lld", -+ value, ct->lower_bound); -+ } else { -+ long value = 0; -+ if (ct->range_bits < 8) { -+ value = per_get_few_bits(pd, ct->range_bits); -+ if(value < 0) _ASN_DECODE_STARVED; -+ } else if (ct->range_bits == 8) { -+ if (aper_get_align(pd) < 0) -+ _ASN_DECODE_FAILED; -+ value = per_get_few_bits(pd, ct->range_bits); -+ if(value < 0) _ASN_DECODE_STARVED; -+ } else { -+ /* Align */ -+ if (aper_get_align(pd) < 0) -+ _ASN_DECODE_FAILED; -+ value = per_get_few_bits(pd, 16); -+ if(value < 0) _ASN_DECODE_STARVED; -+ } -+ value += ct->lower_bound; -+ if((specs && specs->field_unsigned) -+ ? asn_ulong2INTEGER(st, value) -+ : asn_long2INTEGER(st, value)) -+ _ASN_DECODE_FAILED; -+ ASN_DEBUG("Got value %ld + low %lld", -+ value, ct->lower_bound); -+ } -+ return rval; -+ } else { -+ _ASN_DECODE_FAILED; -+ } -+ } else { -+ ASN_DEBUG("Decoding unconstrained integer %s", td->name); -+ } -+ -+ /* X.691, #12.2.3, #12.2.4 */ -+ do { -+ ssize_t len; -+ void *p; -+ int ret; -+ -+ /* Get the PER length */ -+ len = aper_get_length(pd, -1, -1, &repeat); -+ if(len < 0) _ASN_DECODE_STARVED; -+ -+ p = REALLOC(st->buf, st->size + len + 1); -+ if(!p) _ASN_DECODE_FAILED; -+ st->buf = (uint8_t *)p; -+ -+ ret = per_get_many_bits(pd, &st->buf[st->size], 0, 8 * len); -+ if(ret < 0) _ASN_DECODE_STARVED; -+ st->size += len; -+ } while(repeat); -+ st->buf[st->size] = 0; /* JIC */ -+ -+ /* #12.2.3 */ -+ if(ct && ct->lower_bound) { -+ /* -+ * TODO: replace by in-place arithmetics. -+ */ -+ long value; -+ if(asn_INTEGER2long(st, &value)) -+ _ASN_DECODE_FAILED; -+ if(asn_long2INTEGER(st, value + ct->lower_bound)) -+ _ASN_DECODE_FAILED; -+ } -+ -+ return rval; -+} -+ - asn_enc_rval_t - INTEGER_encode_uper(asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -@@ -693,7 +849,7 @@ - || uval > (unsigned long)ct->upper_bound) - inext = 1; - } -- ASN_DEBUG("Value %lu (%02x/%d) lb %lu ub %lu %s", -+ ASN_DEBUG("Value %lu (%02x/%d) lb %"PRIuMAX" ub %"PRIuMAX" %s", - uval, st->buf[0], st->size, - ct->lower_bound, ct->upper_bound, - inext ? "ext" : "fix"); -@@ -710,7 +866,7 @@ - || value > ct->upper_bound) - inext = 1; - } -- ASN_DEBUG("Value %ld (%02x/%d) lb %ld ub %ld %s", -+ ASN_DEBUG("Value %ld (%02x/%d) lb %"PRIdMAX" ub %"PRIdMAX" %s", - value, st->buf[0], st->size, - ct->lower_bound, ct->upper_bound, - inext ? "ext" : "fix"); -@@ -745,7 +901,7 @@ - } - - if(ct && ct->lower_bound) { -- ASN_DEBUG("Adjust lower bound to %ld", ct->lower_bound); -+ ASN_DEBUG("Adjust lower bound to %"PRIdMAX"\n", ct->lower_bound); - /* TODO: adjust lower bound */ - _ASN_ENCODE_FAILED; - } -@@ -762,6 +918,153 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+INTEGER_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; -+ asn_enc_rval_t er; -+ INTEGER_t *st = (INTEGER_t *)sptr; -+ const uint8_t *buf; -+ const uint8_t *end; -+ asn_per_constraint_t *ct; -+ int64_t value = 0; -+ -+ if(!st || st->size == 0) _ASN_ENCODE_FAILED; -+ -+ if(!constraints) constraints = td->per_constraints; -+ ct = constraints ? &constraints->value : 0; -+ -+ er.encoded = 0; -+ -+ if(ct) { -+ int inext = 0; -+ if(specs && specs->field_unsigned) { -+ uint64_t uval; -+ if(asn_INTEGER2uint64(st, &uval)) -+ _ASN_ENCODE_FAILED; -+ /* Check proper range */ -+ if(ct->flags & APC_SEMI_CONSTRAINED) { -+ if(uval < ct->lower_bound) -+ inext = 1; -+ } else if(ct->range_bits >= 0) { -+ if(uval < ct->lower_bound -+ || uval > ct->upper_bound) -+ inext = 1; -+ } -+ ASN_DEBUG("Value %llu (%02x/%d) lb %llu ub %llu %s", -+ uval, st->buf[0], st->size, -+ ct->lower_bound, ct->upper_bound, -+ inext ? "ext" : "fix"); -+ value = uval; -+ } else { -+ if(asn_INTEGER2int64(st, &value)) _ASN_ENCODE_FAILED; -+ /* Check proper range */ -+ if(ct->flags & APC_SEMI_CONSTRAINED) { -+ if(value < ct->lower_bound) -+ inext = 1; -+ } else if(ct->range_bits >= 0) { -+ if(value < ct->lower_bound -+ || value > ct->upper_bound) -+ inext = 1; -+ } -+ ASN_DEBUG("Value %lld (%02x/%d) lb %lld ub %lld %s", -+ value, st->buf[0], st->size, -+ ct->lower_bound, ct->upper_bound, -+ inext ? "ext" : "fix"); -+ } -+ if(ct->flags & APC_EXTENSIBLE) { -+ if(per_put_few_bits(po, inext, 1)) -+ _ASN_ENCODE_FAILED; -+ if(inext) ct = 0; -+ } else if(inext) { -+ _ASN_ENCODE_FAILED; -+ } -+ } -+ -+ /* X.691, #12.2.2 */ -+ if(ct && ct->range_bits >= 0) { -+ /* #10.5.6 */ -+ ASN_DEBUG("Encoding integer with range %d bits", -+ ct->range_bits); -+ -+ value -= ct->lower_bound; -+ -+ /* #12 <= 8 -> alignment ? */ -+ if (ct->range_bits < 8) { -+ /* Bit field case -> no alignment*/ -+ if(per_put_few_bits(po, 0x00 | value, ct->range_bits)) -+ _ASN_ENCODE_FAILED; -+ } else if (ct->range_bits == 8) { -+ if(aper_put_align(po) < 0) -+ _ASN_ENCODE_FAILED; -+ if(per_put_few_bits(po, 0x00 | value, ct->range_bits)) -+ _ASN_ENCODE_FAILED; -+ } else if (ct->range_bits <= 16) { -+ // Consume the bytes to align on octet -+ if(aper_put_align(po) < 0) -+ _ASN_ENCODE_FAILED; -+ if(per_put_few_bits(po, 0x0000 | value, -+ 16)) -+ _ASN_ENCODE_FAILED; -+ } else { -+ /* TODO: extend to >64 bits */ -+ int64_t v = value; -+ int i, j; -+ int max_range_bytes = (ct->range_bits >> 3) + -+ (((ct->range_bits % 8) > 0) ? 1 : 0); -+ -+ for (i = 1; ; i++) { -+ int upper = 1 << i; -+ if (upper >= max_range_bytes) -+ break; -+ } -+ -+ for(j = sizeof(int64_t) - 1; j != 0; j--) { -+ uint8_t val; -+ val = v >> (j * 8); -+ if (val != 0) { -+ break; -+ } -+ } -+ -+ ASN_DEBUG("Putting n - lb (%"PRIdMAX") with range %d bytes (real size - lb (1)) %d in %d bits", -+ v, max_range_bytes, j, i); -+ -+ /* Putting length in the minimum number of bits ex: 5 = 3bits */ -+ if (per_put_few_bits(po, j, i)) -+ _ASN_ENCODE_FAILED; -+ -+ // Consume the bits to align on octet -+ if (aper_put_align(po) < 0) -+ _ASN_ENCODE_FAILED; -+ -+ /* Put the value */ -+ for (i = 0; i <= j; i++) { -+ if(per_put_few_bits(po, (v >> (8 * (j - i))) & 0xff, 8)) -+ _ASN_ENCODE_FAILED; -+ } -+ } -+ _ASN_ENCODED_OK(er); -+ } -+ -+ if(ct && ct->lower_bound) { -+ ASN_DEBUG("Adjust lower bound to %"PRIdMAX, ct->lower_bound); -+ /* TODO: adjust lower bound */ -+ _ASN_ENCODE_FAILED; -+ } -+ -+ for(buf = st->buf, end = st->buf + st->size; buf < end;) { -+ ssize_t mayEncode = aper_put_length(po, -1, end - buf); -+ if(mayEncode < 0) -+ _ASN_ENCODE_FAILED; -+ if(per_put_many_bits(po, buf, 8 * mayEncode)) -+ _ASN_ENCODE_FAILED; -+ buf += mayEncode; -+ } -+ -+ _ASN_ENCODED_OK(er); -+} -+ - #endif /* ASN_DISABLE_PER_SUPPORT */ - - int -@@ -825,6 +1128,66 @@ - } - - int -+asn_INTEGER2int64(const INTEGER_t *iptr, int64_t *lptr) { -+ uint8_t *b, *end; -+ size_t size; -+ int64_t l; -+ -+ /* Sanity checking */ -+ if(!iptr || !iptr->buf || !lptr) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ /* Cache the begin/end of the buffer */ -+ b = iptr->buf; /* Start of the INTEGER buffer */ -+ size = iptr->size; -+ end = b + size; /* Where to stop */ -+ -+ if(size > sizeof(int64_t)) { -+ uint8_t *end1 = end - 1; -+ /* -+ * Slightly more advanced processing, -+ * able to >sizeof(int64_t) bytes, -+ * when the actual value is small -+ * (0x0000000000abcdef would yield a fine 0x00abcdef) -+ */ -+ /* Skip out the insignificant leading bytes */ -+ for(; b < end1; b++) { -+ switch(*b) { -+ case 0x00: if((b[1] & 0x80) == 0) continue; break; -+ case 0xff: if((b[1] & 0x80) != 0) continue; break; -+ } -+ break; -+ } -+ -+ size = end - b; -+ if(size > sizeof(int64_t)) { -+ /* Still cannot fit the int64_t */ -+ errno = ERANGE; -+ return -1; -+ } -+ } -+ -+ /* Shortcut processing of a corner case */ -+ if(end == b) { -+ *lptr = 0; -+ return 0; -+ } -+ -+ /* Perform the sign initialization */ -+ /* Actually l = -(*b >> 7); gains nothing, yet unreadable! */ -+ if((*b >> 7)) l = -1; else l = 0; -+ -+ /* Conversion engine */ -+ for(; b < end; b++) -+ l = (l << 8) | *b; -+ -+ *lptr = l; -+ return 0; -+} -+ -+int - asn_INTEGER2ulong(const INTEGER_t *iptr, unsigned long *lptr) { - uint8_t *b, *end; - unsigned long l; -@@ -857,6 +1220,38 @@ - } - - int -+asn_INTEGER2uint64(const INTEGER_t *iptr, uint64_t *lptr) { -+ uint8_t *b, *end; -+ uint64_t l; -+ size_t size; -+ -+ if(!iptr || !iptr->buf || !lptr) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ b = iptr->buf; -+ size = iptr->size; -+ end = b + size; -+ -+ /* If all extra leading bytes are zeroes, ignore them */ -+ for(; size > sizeof(uint64_t); b++, size--) { -+ if(*b) { -+ /* Value won't fit unsigned long */ -+ errno = ERANGE; -+ return -1; -+ } -+ } -+ -+ /* Conversion engine */ -+ for(l = 0; b < end; b++) -+ l = (l << 8) | *b; -+ -+ *lptr = l; -+ return 0; -+} -+ -+int - asn_ulong2INTEGER(INTEGER_t *st, unsigned long value) { - uint8_t *buf; - uint8_t *end; -@@ -871,7 +1266,7 @@ - - end = buf + (sizeof(value) + 1); - buf[0] = 0; -- for(b = buf + 1, shr = (sizeof(long)-1)*8; b < end; shr -= 8, b++) -+ for(b = buf + 1, shr = (sizeof(unsigned long)-1)*8; b < end; shr -= 8, b++) - *b = (uint8_t)(value >> shr); - - if(st->buf) FREEMEM(st->buf); -@@ -882,6 +1277,31 @@ - } - - int -+asn_uint642INTEGER(INTEGER_t *st, uint64_t value) { -+ uint8_t *buf; -+ uint8_t *end; -+ uint8_t *b; -+ int shr; -+ -+ if(value <= INT64_MAX) -+ return asn_int642INTEGER(st, value); -+ -+ buf = (uint8_t *)MALLOC(1 + sizeof(value)); -+ if(!buf) return -1; -+ -+ end = buf + (sizeof(value) + 1); -+ buf[0] = 0; -+ for(b = buf + 1, shr = (sizeof(value)-1)*8; b < end; shr -= 8, b++) -+ *b = (uint8_t)(value >> shr); -+ -+ if(st->buf) FREEMEM(st->buf); -+ st->buf = buf; -+ st->size = 1 + sizeof(value); -+ -+ return 0; -+} -+ -+int - asn_long2INTEGER(INTEGER_t *st, long value) { - uint8_t *buf, *bp; - uint8_t *p; -@@ -1024,3 +1444,60 @@ - return ASN_STRTOL_OK; - } - -+ -+int -+asn_int642INTEGER(INTEGER_t *st, int64_t value) { -+ uint8_t *buf, *bp; -+ uint8_t *p; -+ uint8_t *pstart; -+ uint8_t *pend1; -+ int littleEndian = 1; /* Run-time detection */ -+ int add; -+ -+ if(!st) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ buf = (uint8_t *)MALLOC(sizeof(value)); -+ if(!buf) return -1; -+ -+ if(*(char *)&littleEndian) { -+ pstart = (uint8_t *)&value + sizeof(value) - 1; -+ pend1 = (uint8_t *)&value; -+ add = -1; -+ } else { -+ pstart = (uint8_t *)&value; -+ pend1 = pstart + sizeof(value) - 1; -+ add = 1; -+ } -+ -+ /* -+ * If the contents octet consists of more than one octet, -+ * then bits of the first octet and bit 8 of the second octet: -+ * a) shall not all be ones; and -+ * b) shall not all be zero. -+ */ -+ for(p = pstart; p != pend1; p += add) { -+ switch(*p) { -+ case 0x00: if((*(p+add) & 0x80) == 0) -+ continue; -+ break; -+ case 0xff: if((*(p+add) & 0x80)) -+ continue; -+ break; -+ } -+ break; -+ } -+ /* Copy the integer body */ -+ for(pstart = p, bp = buf, pend1 += add; p != pend1; p += add) -+ *bp++ = *p; -+ -+ if(st->buf) FREEMEM(st->buf); -+ st->buf = buf; -+ st->size = bp - buf; -+ -+ return 0; -+} -+ -+ -Index: skeletons/constr_SEQUENCE.c -=================================================================== ---- skeletons/constr_SEQUENCE.c (revision 1516) -+++ skeletons/constr_SEQUENCE.c (working copy) -@@ -34,7 +34,7 @@ - #undef ADVANCE - #define ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- ptr = ((const void *)ptr) + num;\ -+ ptr = ((const char *)ptr) + num;\ - size -= num; \ - if(ctx->left >= 0) \ - ctx->left -= num; \ -@@ -144,7 +144,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - /* - * Start to parse where left previously -@@ -366,7 +366,7 @@ - ber_tlv_tag_string(tlv_tag), edx); - skip = ber_skip_length(opt_codec_ctx, - BER_TLV_CONSTRUCTED(ptr), -- (const void *)ptr + tag_len, -+ (const char *)ptr + tag_len, - LEFT - tag_len); - ASN_DEBUG("Skip length %d in %s", - (int)skip, td->name); -@@ -397,13 +397,13 @@ - */ - if(elements[edx].flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st + elements[edx].memb_offset); -+ memb_ptr2 = (void **)((char *)st + elements[edx].memb_offset); - } else { - /* - * A pointer to a pointer - * holding the start of the structure - */ -- memb_ptr = (void *)st + elements[edx].memb_offset; -+ memb_ptr = (char *)st + elements[edx].memb_offset; - memb_ptr2 = &memb_ptr; - } - /* -@@ -489,7 +489,7 @@ - - ll = ber_skip_length(opt_codec_ctx, - BER_TLV_CONSTRUCTED(ptr), -- (const void *)ptr + tl, LEFT - tl); -+ (const char *)ptr + tl, LEFT - tl); - switch(ll) { - case 0: if(!SIZE_VIOLATION) RETURN(RC_WMORE); - /* Fall through */ -@@ -528,14 +528,14 @@ - asn_TYPE_member_t *elm = &td->elements[edx]; - void *memb_ptr; - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) continue; - /* Mandatory element is missing */ - _ASN_ENCODE_FAILED; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - erval = elm->type->der_encoder(elm->type, memb_ptr, - elm->tag_mode, elm->tag, -@@ -567,10 +567,10 @@ - void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) continue; - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - tmperval = elm->type->der_encoder(elm->type, memb_ptr, - elm->tag_mode, elm->tag, -@@ -595,7 +595,7 @@ - #undef XER_ADVANCE - #define XER_ADVANCE(num_bytes) do { \ - size_t num = num_bytes; \ -- buf_ptr = ((const void *)buf_ptr) + num;\ -+ buf_ptr = ((const char *)buf_ptr) + num;\ - size -= num; \ - consumed_myself += num; \ - } while(0) -@@ -637,7 +637,7 @@ - /* - * Restore parsing context. - */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - - /* -@@ -667,9 +667,10 @@ - - if(elm->flags & ATF_POINTER) { - /* Member is a pointer to another structure */ -- memb_ptr2 = (void **)((void *)st + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)st -+ + elm->memb_offset); - } else { -- memb_ptr = (void *)st + elm->memb_offset; -+ memb_ptr = (char *)st + elm->memb_offset; - memb_ptr2 = &memb_ptr; - } - -@@ -739,7 +740,7 @@ - if(edx >= td->elements_count - || - /* Explicit OPTIONAL specs reaches the end */ -- (edx + elements[edx].optional -+ (edx + elements[edx].optional - == td->elements_count) - || - /* All extensions are optional */ -@@ -869,7 +870,7 @@ - unsigned int mlen = strlen(mname); - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) - continue; -@@ -877,7 +878,7 @@ - _ASN_ENCODE_FAILED; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - } - - if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel); -@@ -917,14 +918,14 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) continue; - /* Print <absent> line */ - /* Fall through */ - } - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - /* Indentation */ -@@ -960,11 +961,11 @@ - asn_TYPE_member_t *elm = &td->elements[edx]; - void *memb_ptr; - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(void **)((void *)sptr + elm->memb_offset); -+ memb_ptr = *(void **)((char *)sptr + elm->memb_offset); - if(memb_ptr) - ASN_STRUCT_FREE(*elm->type, memb_ptr); - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - ASN_STRUCT_FREE_CONTENTS_ONLY(*elm->type, memb_ptr); - } - } -@@ -994,7 +995,7 @@ - const void *memb_ptr; - - if(elm->flags & ATF_POINTER) { -- memb_ptr = *(const void * const *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = *(const void * const *)((const char *)sptr + elm->memb_offset); - if(!memb_ptr) { - if(elm->optional) - continue; -@@ -1004,7 +1005,7 @@ - return -1; - } - } else { -- memb_ptr = (const void *)((const void *)sptr + elm->memb_offset); -+ memb_ptr = (const void *)((const char *)sptr + elm->memb_offset); - } - - if(elm->memb_constraints) { -@@ -1088,9 +1089,9 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)st + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); - } else { -- memb_ptr = (void *)st + elm->memb_offset; -+ memb_ptr = (char *)st + elm->memb_offset; - memb_ptr2 = &memb_ptr; - } - -@@ -1154,11 +1155,224 @@ - memset(&epmd, 0, sizeof(epmd)); - epmd.buffer = epres; - epmd.nbits = bmlength; -+ ASN_DEBUG("Read in extensions bitmap for %s of %d bits (%x..)", -+ td->name, bmlength, *epres); -+ -+ /* Go over extensions and read them in */ -+ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ int present; -+ -+ if(!IN_EXTENSION_GROUP(specs, edx)) { -+ ASN_DEBUG("%d is not extension", edx); -+ continue; -+ } -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); -+ } else { -+ memb_ptr = (void *)((char *)st + elm->memb_offset); -+ memb_ptr2 = &memb_ptr; -+ } -+ -+ present = per_get_few_bits(&epmd, 1); -+ if(present <= 0) { -+ if(present < 0) break; /* No more extensions */ -+ continue; -+ } -+ -+ ASN_DEBUG("Decoding member %s in %s %p", elm->name, td->name, *memb_ptr2); -+ rv = uper_open_type_get(opt_codec_ctx, elm->type, -+ elm->per_constraints, memb_ptr2, pd); -+ if(rv.code != RC_OK) { -+ FREEMEM(epres); -+ return rv; -+ } -+ } -+ -+ /* Skip over overflow extensions which aren't present -+ * in this system's version of the protocol */ -+ for(;;) { -+ ASN_DEBUG("Getting overflow extensions"); -+ switch(per_get_few_bits(&epmd, 1)) { -+ case -1: break; -+ case 0: continue; -+ default: -+ if(uper_open_type_skip(opt_codec_ctx, pd)) { -+ FREEMEM(epres); -+ _ASN_DECODE_STARVED; -+ } -+ } -+ break; -+ } -+ -+ FREEMEM(epres); -+ } -+ -+ /* Fill DEFAULT members in extensions */ -+ for(edx = specs->roms_count; edx < specs->roms_count -+ + specs->aoms_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ void **memb_ptr2; /* Pointer to member pointer */ -+ -+ if(!elm->default_value) continue; -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)st -+ + elm->memb_offset); -+ if(*memb_ptr2) continue; -+ } else { -+ continue; /* Extensions are all optionals */ -+ } -+ -+ /* Set default value */ -+ if(elm->default_value(1, memb_ptr2)) { -+ _ASN_DECODE_FAILED; -+ } -+ } -+ -+ rv.consumed = 0; -+ rv.code = RC_OK; -+ return rv; -+} -+ -+asn_dec_rval_t -+SEQUENCE_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ asn_SEQUENCE_specifics_t *specs = (asn_SEQUENCE_specifics_t *)td->specifics; -+ void *st = *sptr; /* Target structure. */ -+ int extpresent; /* Extension additions are present */ -+ uint8_t *opres; /* Presence of optional root members */ -+ asn_per_data_t opmd; -+ asn_dec_rval_t rv; -+ int edx; -+ -+ (void)constraints; -+ -+ if(_ASN_STACK_OVERFLOW_CHECK(opt_codec_ctx)) -+ _ASN_DECODE_FAILED; -+ -+ if(!st) { -+ st = *sptr = CALLOC(1, specs->struct_size); -+ if(!st) _ASN_DECODE_FAILED; -+ } -+ -+ ASN_DEBUG("Decoding %s as SEQUENCE (APER)", td->name); -+ -+ /* Handle extensions */ -+ if(specs->ext_before >= 0) { -+ extpresent = per_get_few_bits(pd, 1); -+ if(extpresent < 0) _ASN_DECODE_STARVED; -+ } else { -+ extpresent = 0; -+ } -+ -+ /* Prepare a place and read-in the presence bitmap */ -+ memset(&opmd, 0, sizeof(opmd)); -+ if(specs->roms_count) { -+ opres = (uint8_t *)MALLOC(((specs->roms_count + 7) >> 3) + 1); -+ if(!opres) _ASN_DECODE_FAILED; -+ /* Get the presence map */ -+ if(per_get_many_bits(pd, opres, 0, specs->roms_count)) { -+ FREEMEM(opres); -+ _ASN_DECODE_STARVED; -+ } -+ opmd.buffer = opres; -+ opmd.nbits = specs->roms_count; -+ ASN_DEBUG("Read in presence bitmap for %s of %d bits (%x..)", -+ td->name, specs->roms_count, *opres); -+ } else { -+ opres = 0; -+ } -+ -+ /* -+ * Get the sequence ROOT elements. -+ */ -+ for(edx = 0; edx < td->elements_count; edx++) { -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ -+ if(IN_EXTENSION_GROUP(specs, edx)) -+ continue; -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); -+ } else { -+ memb_ptr = (char *)st + elm->memb_offset; -+ memb_ptr2 = &memb_ptr; -+ } -+ -+ /* Deal with optionality */ -+ if(elm->optional) { -+ int present = per_get_few_bits(&opmd, 1); -+ ASN_DEBUG("Member %s->%s is optional, p=%d (%d->%d)", -+ td->name, elm->name, present, -+ (int)opmd.nboff, (int)opmd.nbits); -+ if(present == 0) { -+ /* This element is not present */ -+ if(elm->default_value) { -+ /* Fill-in DEFAULT */ -+ if(elm->default_value(1, memb_ptr2)) { -+ FREEMEM(opres); -+ _ASN_DECODE_FAILED; -+ } -+ ASN_DEBUG("Filled-in default"); -+ } -+ /* The member is just not present */ -+ continue; -+ } -+ /* Fall through */ -+ } -+ -+ /* Fetch the member from the stream */ -+ ASN_DEBUG("Decoding member %s in %s", elm->name, td->name); -+ rv = elm->type->aper_decoder(opt_codec_ctx, elm->type, -+ elm->per_constraints, memb_ptr2, pd); -+ if(rv.code != RC_OK) { -+ ASN_DEBUG("Failed decode %s in %s", -+ elm->name, td->name); -+ FREEMEM(opres); -+ return rv; -+ } -+ } -+ -+ /* Optionality map is not needed anymore */ -+ FREEMEM(opres); -+ -+ /* -+ * Deal with extensions. -+ */ -+ if(extpresent) { -+ ssize_t bmlength; -+ uint8_t *epres; /* Presence of extension members */ -+ asn_per_data_t epmd; -+ -+ bmlength = uper_get_nslength(pd); -+ if(bmlength < 0) _ASN_DECODE_STARVED; -+ -+ ASN_DEBUG("Extensions %d present in %s", bmlength, td->name); -+ -+ epres = (uint8_t *)MALLOC((bmlength + 15) >> 3); -+ if(!epres) _ASN_DECODE_STARVED; -+ -+ /* Get the extensions map */ -+ if(per_get_many_bits(pd, epres, 0, bmlength)) -+ _ASN_DECODE_STARVED; -+ -+ memset(&epmd, 0, sizeof(epmd)); -+ epmd.buffer = epres; -+ epmd.nbits = bmlength; - ASN_DEBUG("Read in extensions bitmap for %s of %ld bits (%x..)", - td->name, (long)bmlength, *epres); - -- /* Go over extensions and read them in */ -- for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { -+ /* Go over extensions and read them in */ -+ for(edx = specs->ext_after + 1; edx < td->elements_count; edx++) { - asn_TYPE_member_t *elm = &td->elements[edx]; - void *memb_ptr; /* Pointer to the member */ - void **memb_ptr2; /* Pointer to that pointer */ -@@ -1171,9 +1385,9 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)st + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)st + elm->memb_offset); - } else { -- memb_ptr = (void *)((void *)st + elm->memb_offset); -+ memb_ptr = (void *)((char *)st + elm->memb_offset); - memb_ptr2 = &memb_ptr; - } - -@@ -1190,7 +1404,7 @@ - FREEMEM(epres); - return rv; - } -- } -+ } - - /* Skip over overflow extensions which aren't present - * in this system's version of the protocol */ -@@ -1221,7 +1435,7 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)st -+ memb_ptr2 = (void **)((char *)st - + elm->memb_offset); - if(*memb_ptr2) continue; - } else { -@@ -1265,10 +1479,10 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)sptr + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); - present = (*memb_ptr2 != 0); - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - memb_ptr2 = &memb_ptr; - present = 1; - } -@@ -1334,10 +1548,10 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)sptr + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); - present = (*memb_ptr2 != 0); - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - memb_ptr2 = &memb_ptr; - present = 1; - } -@@ -1373,7 +1587,7 @@ - - /* Fetch the pointer to this member */ - if(elm->flags & ATF_POINTER) { -- memb_ptr2 = (void **)((void *)sptr + elm->memb_offset); -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); - if(!*memb_ptr2) { - ASN_DEBUG("Element %s %d not present", - elm->name, edx); -@@ -1383,7 +1597,7 @@ - _ASN_ENCODE_FAILED; - } - } else { -- memb_ptr = (void *)((void *)sptr + elm->memb_offset); -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); - memb_ptr2 = &memb_ptr; - } - -@@ -1420,3 +1634,130 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+SEQUENCE_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_SEQUENCE_specifics_t *specs -+ = (asn_SEQUENCE_specifics_t *)td->specifics; -+ asn_enc_rval_t er; -+ int n_extensions; -+ int edx; -+ int i; -+ -+ (void)constraints; -+ -+ if(!sptr) -+ _ASN_ENCODE_FAILED; -+ -+ er.encoded = 0; -+ -+ ASN_DEBUG("Encoding %s as SEQUENCE (APER)", td->name); -+ -+ /* -+ * X.691#18.1 Whether structure is extensible -+ * and whether to encode extensions -+ */ -+ if(specs->ext_before >= 0) { -+ n_extensions = SEQUENCE_handle_extensions(td, sptr, 0, 0); -+ per_put_few_bits(po, n_extensions ? 1 : 0, 1); -+ } else { -+ n_extensions = 0; /* There are no extensions to encode */ -+ } -+ -+ /* Encode a presence bitmap */ -+ for(i = 0; i < specs->roms_count; i++) { -+ asn_TYPE_member_t *elm; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ int present; -+ -+ edx = specs->oms[i]; -+ elm = &td->elements[edx]; -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); -+ present = (*memb_ptr2 != 0); -+ } else { -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); -+ memb_ptr2 = &memb_ptr; -+ present = 1; -+ } -+ -+ /* Eliminate default values */ -+ if(present && elm->default_value -+ && elm->default_value(0, memb_ptr2) == 1) -+ present = 0; -+ -+ ASN_DEBUG("Element %s %s %s->%s is %s", -+ elm->flags & ATF_POINTER ? "ptr" : "inline", -+ elm->default_value ? "def" : "wtv", -+ td->name, elm->name, present ? "present" : "absent"); -+ if(per_put_few_bits(po, present, 1)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ /* -+ * Encode the sequence ROOT elements. -+ */ -+ ASN_DEBUG("ext_after = %d, ec = %d, eb = %d", specs->ext_after, td->elements_count, specs->ext_before); -+ for(edx = 0; edx < ((specs->ext_after < 0) -+ ? td->elements_count : specs->ext_before - 1); edx++) { -+ -+ asn_TYPE_member_t *elm = &td->elements[edx]; -+ void *memb_ptr; /* Pointer to the member */ -+ void **memb_ptr2; /* Pointer to that pointer */ -+ -+ if(IN_EXTENSION_GROUP(specs, edx)) -+ continue; -+ -+ ASN_DEBUG("About to encode %s", elm->type->name); -+ -+ /* Fetch the pointer to this member */ -+ if(elm->flags & ATF_POINTER) { -+ memb_ptr2 = (void **)((char *)sptr + elm->memb_offset); -+ if(!*memb_ptr2) { -+ ASN_DEBUG("Element %s %d not present", -+ elm->name, edx); -+ if(elm->optional) -+ continue; -+ /* Mandatory element is missing */ -+ _ASN_ENCODE_FAILED; -+ } -+ } else { -+ memb_ptr = (void *)((char *)sptr + elm->memb_offset); -+ memb_ptr2 = &memb_ptr; -+ } -+ -+ /* Eliminate default values */ -+ if(elm->default_value && elm->default_value(0, memb_ptr2) == 1) -+ continue; -+ -+ ASN_DEBUG("Encoding %s->%s", td->name, elm->name); -+ er = elm->type->aper_encoder(elm->type, elm->per_constraints, -+ *memb_ptr2, po); -+ if(er.encoded == -1) -+ return er; -+ } -+ -+ /* No extensions to encode */ -+ if(!n_extensions) _ASN_ENCODED_OK(er); -+ -+ ASN_DEBUG("Length of %d bit-map", n_extensions); -+ /* #18.8. Write down the presence bit-map length. */ -+ if(aper_put_nslength(po, n_extensions)) -+ _ASN_ENCODE_FAILED; -+ -+ ASN_DEBUG("Bit-map of %d elements", n_extensions); -+ /* #18.7. Encoding the extensions presence bit-map. */ -+ /* TODO: act upon NOTE in #18.7 for canonical PER */ -+ if(SEQUENCE_handle_extensions(td, sptr, po, 0) != n_extensions) -+ _ASN_ENCODE_FAILED; -+ -+ ASN_DEBUG("Writing %d extensions", n_extensions); -+ /* #18.9. Encode extensions as open type fields. */ -+ if(SEQUENCE_handle_extensions(td, sptr, 0, po) != n_extensions) -+ _ASN_ENCODE_FAILED; -+ -+ _ASN_ENCODED_OK(er); -+} -Index: skeletons/INTEGER.h -=================================================================== ---- skeletons/INTEGER.h (revision 1516) -+++ skeletons/INTEGER.h (working copy) -@@ -41,6 +41,8 @@ - xer_type_encoder_f INTEGER_encode_xer; - per_type_decoder_f INTEGER_decode_uper; - per_type_encoder_f INTEGER_encode_uper; -+per_type_decoder_f INTEGER_decode_aper; -+per_type_encoder_f INTEGER_encode_aper; - - /*********************************** - * Some handy conversion routines. * -@@ -52,8 +54,12 @@ - * -1/ERANGE: Value encoded is out of range for long representation - * -1/ENOMEM: Memory allocation failed (in asn_long2INTEGER()). - */ -+int asn_INTEGER2int64(const INTEGER_t *i, int64_t *l); -+int asn_INTEGER2uint64(const INTEGER_t *i, uint64_t *l); - int asn_INTEGER2long(const INTEGER_t *i, long *l); - int asn_INTEGER2ulong(const INTEGER_t *i, unsigned long *l); -+int asn_int642INTEGER(INTEGER_t *i, int64_t l); -+int asn_uint642INTEGER(INTEGER_t *i, uint64_t l); - int asn_long2INTEGER(INTEGER_t *i, long l); - int asn_ulong2INTEGER(INTEGER_t *i, unsigned long l); - -Index: skeletons/OCTET_STRING.c -=================================================================== ---- skeletons/OCTET_STRING.c (revision 1516) -+++ skeletons/OCTET_STRING.c (working copy) -@@ -36,6 +36,8 @@ - OCTET_STRING_encode_xer, - OCTET_STRING_decode_uper, /* Unaligned PER decoder */ - OCTET_STRING_encode_uper, /* Unaligned PER encoder */ -+ OCTET_STRING_decode_aper, /* Aligned PER decoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_OCTET_STRING_tags, - sizeof(asn_DEF_OCTET_STRING_tags) -@@ -86,7 +88,7 @@ - void *ptr; \ - /* Be nice and round to the memory allocator */ \ - do { _ns = _ns ? _ns << 1 : 16; } \ -- while(_ns <= _es); \ -+ while(_ns <= _es); \ - /* int is really a typeof(st->size): */ \ - if((int)_ns < 0) RETURN(RC_FAIL); \ - ptr = REALLOC(st->buf, _ns); \ -@@ -195,7 +197,7 @@ - } - - /* Restore parsing context */ -- ctx = (asn_struct_ctx_t *)((void *)st + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)((char *)st + specs->ctx_offset); - - switch(ctx->phase) { - case 0: -@@ -416,7 +418,7 @@ - ASN_DEBUG("Phase 2: Need %ld bytes, size=%ld, alrg=%ld, wn=%d", - (long)sel->left, (long)size, (long)sel->got, - sel->want_nulls); -- { -+ { - ber_tlv_len_t len; - - assert(sel->left >= 0); -@@ -446,7 +448,7 @@ - - PREV_PHASE(ctx); - goto phase1; -- } -+ } - break; - case 3: - phase3: -@@ -1143,7 +1145,7 @@ - } - - /* Restore parsing context */ -- ctx = (asn_struct_ctx_t *)(((void *)*sptr) + specs->ctx_offset); -+ ctx = (asn_struct_ctx_t *)(((char *)*sptr) + specs->ctx_offset); - - return xer_decode_general(opt_codec_ctx, ctx, *sptr, xml_tag, - buf_ptr, size, opt_unexpected_tag_decoder, body_receiver); -@@ -1392,7 +1394,7 @@ - if(!st) RETURN(RC_FAIL); - } - -- ASN_DEBUG("PER Decoding %s size %ld .. %ld bits %d", -+ ASN_DEBUG("PER Decoding %s size %"PRIdMAX" .. %"PRIdMAX" bits %d", - csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", - csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); - -@@ -1423,17 +1425,17 @@ - if(csiz->effective_bits == 0) { - int ret; - if(bpc) { -- ASN_DEBUG("Encoding OCTET STRING size %ld", -+ ASN_DEBUG("Encoding OCTET STRING size %"PRIdMAX, - csiz->upper_bound); - ret = OCTET_STRING_per_get_characters(pd, st->buf, - csiz->upper_bound, bpc, unit_bits, - cval->lower_bound, cval->upper_bound, pc); - if(ret > 0) RETURN(RC_FAIL); - } else { -- ASN_DEBUG("Encoding BIT STRING size %ld", -+ ASN_DEBUG("Encoding BIT STRING size %"PRIdMAX, - csiz->upper_bound); - ret = per_get_many_bits(pd, st->buf, 0, -- unit_bits * csiz->upper_bound); -+ unit_bits * csiz->upper_bound); - } - if(ret < 0) RETURN(RC_WMORE); - consumed_myself += unit_bits * csiz->upper_bound; -@@ -1492,9 +1494,197 @@ - return rval; - } - -+asn_dec_rval_t -+OCTET_STRING_decode_aper(asn_codec_ctx_t *opt_codec_ctx, -+ asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, -+ void **sptr, asn_per_data_t *pd) { -+ -+ asn_OCTET_STRING_specifics_t *specs = td->specifics -+ ? (asn_OCTET_STRING_specifics_t *)td->specifics -+ : &asn_DEF_OCTET_STRING_specs; -+ asn_per_constraints_t *pc = constraints ? constraints -+ : td->per_constraints; -+ asn_per_constraint_t *cval; -+ asn_per_constraint_t *csiz; -+ asn_dec_rval_t rval = { RC_OK, 0 }; -+ BIT_STRING_t *st = (BIT_STRING_t *)*sptr; -+ ssize_t consumed_myself = 0; -+ int repeat; -+ enum { -+ OS__BPC_BIT = 0, -+ OS__BPC_CHAR = 1, -+ OS__BPC_U16 = 2, -+ OS__BPC_U32 = 4 -+ } bpc; /* Bytes per character */ -+ unsigned int unit_bits; -+ unsigned int canonical_unit_bits; -+ -+ (void)opt_codec_ctx; -+ -+ if(pc) { -+ cval = &pc->value; -+ csiz = &pc->size; -+ } else { -+ cval = &asn_DEF_OCTET_STRING_constraints.value; -+ csiz = &asn_DEF_OCTET_STRING_constraints.size; -+ } -+ -+ switch(specs->subvariant) { -+ default: -+// case ASN_OSUBV_ANY: -+// ASN_DEBUG("Unrecognized subvariant %d", specs->subvariant); -+// RETURN(RC_FAIL); -+ case ASN_OSUBV_BIT: -+ canonical_unit_bits = unit_bits = 1; -+ bpc = OS__BPC_BIT; -+ break; -+ case ASN_OSUBV_ANY: -+ case ASN_OSUBV_STR: -+ canonical_unit_bits = unit_bits = 8; -+// if(cval->flags & APC_CONSTRAINED) -+// unit_bits = cval->range_bits; -+ bpc = OS__BPC_CHAR; -+ break; -+ case ASN_OSUBV_U16: -+ canonical_unit_bits = unit_bits = 16; -+ if(cval->flags & APC_CONSTRAINED) -+ unit_bits = cval->range_bits; -+ bpc = OS__BPC_U16; -+ break; -+ case ASN_OSUBV_U32: -+ canonical_unit_bits = unit_bits = 32; -+ if(cval->flags & APC_CONSTRAINED) -+ unit_bits = cval->range_bits; -+ bpc = OS__BPC_U32; -+ break; -+ } -+ -+ /* -+ * Allocate the string. -+ */ -+ if(!st) { -+ st = (BIT_STRING_t *)(*sptr = CALLOC(1, specs->struct_size)); -+ if(!st) RETURN(RC_FAIL); -+ } -+ -+ ASN_DEBUG("PER Decoding %s size %"PRIdMAX" .. %"PRIdMAX" bits %d", -+ csiz->flags & APC_EXTENSIBLE ? "extensible" : "non-extensible", -+ csiz->lower_bound, csiz->upper_bound, csiz->effective_bits); -+ -+ if(csiz->flags & APC_EXTENSIBLE) { -+ int inext = per_get_few_bits(pd, 1); -+ if(inext < 0) RETURN(RC_WMORE); -+ if(inext) { -+ csiz = &asn_DEF_OCTET_STRING_constraints.size; -+ cval = &asn_DEF_OCTET_STRING_constraints.value; -+ unit_bits = canonical_unit_bits; -+ } -+ } -+ -+ if(csiz->effective_bits >= 0) { -+ FREEMEM(st->buf); -+ if(bpc) { -+ st->size = csiz->upper_bound * bpc; -+ } else { -+ st->size = (csiz->upper_bound + 7) >> 3; -+ } -+ st->buf = (uint8_t *)MALLOC(st->size + 1); -+ if(!st->buf) { st->size = 0; RETURN(RC_FAIL); } -+ } -+ -+ /* X.691, #16.5: zero-length encoding */ -+ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ -+ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ -+ if(csiz->effective_bits == 0) { -+ int ret; -+ if (st->size > 2) { /* X.691 #16 NOTE 1 */ -+ if (aper_get_align(pd) < 0) -+ RETURN(RC_FAIL); -+ } -+ if(bpc) { -+ ASN_DEBUG("Decoding OCTET STRING size %"PRIdMAX, -+ csiz->upper_bound); -+ ret = OCTET_STRING_per_get_characters(pd, st->buf, -+ csiz->upper_bound, bpc, unit_bits, -+ cval->lower_bound, cval->upper_bound, pc); -+ if(ret > 0) RETURN(RC_FAIL); -+ } else { -+ ASN_DEBUG("Decoding BIT STRING size %"PRIdMAX, -+ csiz->upper_bound); -+ ret = per_get_many_bits(pd, st->buf, 0, -+ unit_bits * csiz->upper_bound); -+ } -+ if(ret < 0) RETURN(RC_WMORE); -+ consumed_myself += unit_bits * csiz->upper_bound; -+ st->buf[st->size] = 0; -+ if(bpc == 0) { -+ int ubs = (csiz->upper_bound & 0x7); -+ st->bits_unused = ubs ? 8 - ubs : 0; -+ } -+ RETURN(RC_OK); -+ } -+ -+ st->size = 0; -+ do { -+ ssize_t raw_len; -+ ssize_t len_bytes; -+ ssize_t len_bits; -+ void *p; -+ int ret; -+ -+ /* Get the PER length */ -+ if (csiz->upper_bound - csiz->lower_bound == 0) -+ // Indefinite length case -+ raw_len = aper_get_length(pd, -1, csiz->effective_bits, &repeat); -+ else -+ raw_len = aper_get_length(pd, csiz->upper_bound - csiz->lower_bound + 1, csiz->effective_bits, &repeat); -+ repeat = 0; -+ if(raw_len < 0) RETURN(RC_WMORE); -+ raw_len += csiz->lower_bound; -+ -+ ASN_DEBUG("Got PER length eb %ld, len %ld, %s (%s)", -+ (long)csiz->effective_bits, (long)raw_len, -+ repeat ? "repeat" : "once", td->name); -+ -+ if (raw_len > 2) { /* X.691 #16 NOTE 1 */ -+ if (aper_get_align(pd) < 0) -+ RETURN(RC_FAIL); -+ } -+ -+ if(bpc) { -+ len_bytes = raw_len * bpc; -+ len_bits = len_bytes * unit_bits; -+ } else { -+ len_bits = raw_len; -+ len_bytes = (len_bits + 7) >> 3; -+ if(len_bits & 0x7) -+ st->bits_unused = 8 - (len_bits & 0x7); -+ /* len_bits be multiple of 16K if repeat is set */ -+ } -+ p = REALLOC(st->buf, st->size + len_bytes + 1); -+ if(!p) RETURN(RC_FAIL); -+ st->buf = (uint8_t *)p; -+ -+ if(bpc) { -+ ret = OCTET_STRING_per_get_characters(pd, -+ &st->buf[st->size], raw_len, bpc, unit_bits, -+ cval->lower_bound, cval->upper_bound, pc); -+ if(ret > 0) RETURN(RC_FAIL); -+ } else { -+ ret = per_get_many_bits(pd, &st->buf[st->size], -+ 0, len_bits); -+ } -+ if(ret < 0) RETURN(RC_WMORE); -+ st->size += len_bytes; -+ } while(repeat); -+ st->buf[st->size] = 0; /* nul-terminate */ -+ -+ return rval; -+} -+ - asn_enc_rval_t - OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td, -- asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { - - asn_OCTET_STRING_specifics_t *specs = td->specifics - ? (asn_OCTET_STRING_specifics_t *)td->specifics -@@ -1566,7 +1756,7 @@ - } - - ASN_DEBUG("Encoding %s into %d units of %d bits" -- " (%ld..%ld, effective %d)%s", -+ " (%"PRIdMAX"..%"PRIdMAX", effective %d)%s", - td->name, sizeinunits, unit_bits, - csiz->lower_bound, csiz->upper_bound, - csiz->effective_bits, ct_extensible ? " EXT" : ""); -@@ -1598,7 +1788,7 @@ - /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ - /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ - if(csiz->effective_bits >= 0) { -- ASN_DEBUG("Encoding %d bytes (%ld), length in %d bits", -+ ASN_DEBUG("Encoding %d bytes (%"PRIdMAX"), length in %d bits", - st->size, sizeinunits - csiz->lower_bound, - csiz->effective_bits); - ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, -@@ -1652,6 +1842,173 @@ - _ASN_ENCODED_OK(er); - } - -+asn_enc_rval_t -+OCTET_STRING_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ -+ asn_OCTET_STRING_specifics_t *specs = td->specifics -+ ? (asn_OCTET_STRING_specifics_t *)td->specifics -+ : &asn_DEF_OCTET_STRING_specs; -+ asn_per_constraints_t *pc = constraints ? constraints -+ : td->per_constraints; -+ asn_per_constraint_t *cval; -+ asn_per_constraint_t *csiz; -+ const BIT_STRING_t *st = (const BIT_STRING_t *)sptr; -+ asn_enc_rval_t er = { 0, 0, 0 }; -+ int inext = 0; /* Lies not within extension root */ -+ unsigned int unit_bits; -+ unsigned int canonical_unit_bits; -+ unsigned int sizeinunits; -+ const uint8_t *buf; -+ int ret; -+ enum { -+ OS__BPC_BIT = 0, -+ OS__BPC_CHAR = 1, -+ OS__BPC_U16 = 2, -+ OS__BPC_U32 = 4 -+ } bpc; /* Bytes per character */ -+ int ct_extensible; -+ -+ if(!st || (!st->buf && st->size)) -+ _ASN_ENCODE_FAILED; -+ -+ if(pc) { -+ cval = &pc->value; -+ csiz = &pc->size; -+ } else { -+ cval = &asn_DEF_OCTET_STRING_constraints.value; -+ csiz = &asn_DEF_OCTET_STRING_constraints.size; -+ } -+ ct_extensible = csiz->flags & APC_EXTENSIBLE; -+ -+ switch(specs->subvariant) { -+ default: -+// case ASN_OSUBV_ANY: -+// _ASN_ENCODE_FAILED; -+ case ASN_OSUBV_BIT: -+ canonical_unit_bits = unit_bits = 1; -+ bpc = OS__BPC_BIT; -+ sizeinunits = st->size * 8 - (st->bits_unused & 0x07); -+ ASN_DEBUG("BIT STRING of %d bits", -+ sizeinunits); -+ break; -+ case ASN_OSUBV_ANY: -+ case ASN_OSUBV_STR: -+ canonical_unit_bits = unit_bits = 8; -+// if(cval->flags & APC_CONSTRAINED) -+// unit_bits = 8; -+ bpc = OS__BPC_CHAR; -+ sizeinunits = st->size; -+ break; -+ case ASN_OSUBV_U16: -+ canonical_unit_bits = unit_bits = 16; -+ if(cval->flags & APC_CONSTRAINED) -+ unit_bits = cval->range_bits; -+ bpc = OS__BPC_U16; -+ sizeinunits = st->size / 2; -+ break; -+ case ASN_OSUBV_U32: -+ canonical_unit_bits = unit_bits = 32; -+ if(cval->flags & APC_CONSTRAINED) -+ unit_bits = cval->range_bits; -+ bpc = OS__BPC_U32; -+ sizeinunits = st->size / 4; -+ break; -+ } -+ -+ ASN_DEBUG("Encoding %s into %d units of %d bits" -+ " (%"PRIdMAX"..%"PRIdMAX", effective %d)%s", -+ td->name, sizeinunits, unit_bits, -+ csiz->lower_bound, csiz->upper_bound, -+ csiz->effective_bits, ct_extensible ? " EXT" : ""); -+ -+ /* Figure out wheter size lies within PER visible constraint */ -+ -+ if(csiz->effective_bits >= 0) { -+ if((int)sizeinunits < csiz->lower_bound -+ || (int)sizeinunits > csiz->upper_bound) { -+ if(ct_extensible) { -+ cval = &asn_DEF_OCTET_STRING_constraints.value; -+ csiz = &asn_DEF_OCTET_STRING_constraints.size; -+ unit_bits = canonical_unit_bits; -+ inext = 1; -+ } else -+ _ASN_ENCODE_FAILED; -+ } -+ } else { -+ inext = 0; -+ } -+ -+ -+ if(ct_extensible) { -+ /* Declare whether length is [not] within extension root */ -+ if(per_put_few_bits(po, inext, 1)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+ /* X.691, #16.5: zero-length encoding */ -+ /* X.691, #16.6: short fixed length encoding (up to 2 octets) */ -+ /* X.691, #16.7: long fixed length encoding (up to 64K octets) */ -+ if(csiz->effective_bits >= 0) { -+ ASN_DEBUG("Encoding %d bytes (%"PRIdMAX"), length in %d bits", -+ st->size, sizeinunits - csiz->lower_bound, -+ csiz->effective_bits); -+ ret = per_put_few_bits(po, sizeinunits - csiz->lower_bound, -+ csiz->effective_bits); -+ if(ret) _ASN_ENCODE_FAILED; -+ if (st->size > 2) { /* X.691 #16 NOTE 1 */ -+ if (aper_put_align(po) < 0) -+ _ASN_ENCODE_FAILED; -+ } -+ if(bpc) { -+ ret = OCTET_STRING_per_put_characters(po, st->buf, -+ sizeinunits, bpc, unit_bits, -+ cval->lower_bound, cval->upper_bound, pc); -+ } else { -+ ret = per_put_many_bits(po, st->buf, -+ sizeinunits * unit_bits); -+ } -+ if(ret) _ASN_ENCODE_FAILED; -+ _ASN_ENCODED_OK(er); -+ } -+ -+ ASN_DEBUG("Encoding %d bytes", st->size); -+ -+ if(sizeinunits == 0) { -+ if(aper_put_length(po, -1, 0)) -+ _ASN_ENCODE_FAILED; -+ _ASN_ENCODED_OK(er); -+ } -+ -+ buf = st->buf; -+ while(sizeinunits) { -+ ssize_t maySave = aper_put_length(po, -1, sizeinunits); -+ -+ if(maySave < 0) _ASN_ENCODE_FAILED; -+ -+ ASN_DEBUG("Encoding %ld of %ld", -+ (long)maySave, (long)sizeinunits); -+ -+ if(bpc) { -+ ret = OCTET_STRING_per_put_characters(po, buf, -+ maySave, bpc, unit_bits, -+ cval->lower_bound, cval->upper_bound, pc); -+ } else { -+ ret = per_put_many_bits(po, buf, maySave * unit_bits); -+ } -+ if(ret) _ASN_ENCODE_FAILED; -+ -+ if(bpc) -+ buf += maySave * bpc; -+ else -+ buf += maySave >> 3; -+ sizeinunits -= maySave; -+ assert(!(maySave & 0x07) || !sizeinunits); -+ } -+ -+ _ASN_ENCODED_OK(er); -+} -+ - int - OCTET_STRING_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, - asn_app_consume_bytes_f *cb, void *app_key) { -@@ -1716,7 +2073,7 @@ - ? (asn_OCTET_STRING_specifics_t *)td->specifics - : &asn_DEF_OCTET_STRING_specs; - asn_struct_ctx_t *ctx = (asn_struct_ctx_t *) -- ((void *)st + specs->ctx_offset); -+ ((char *)st + specs->ctx_offset); - struct _stack *stck; - - if(!td || !st) -Index: skeletons/BIT_STRING.c -=================================================================== ---- skeletons/BIT_STRING.c (revision 1516) -+++ skeletons/BIT_STRING.c (working copy) -@@ -29,6 +29,8 @@ - BIT_STRING_encode_xer, - OCTET_STRING_decode_uper, /* Unaligned PER decoder */ - OCTET_STRING_encode_uper, /* Unaligned PER encoder */ -+ OCTET_STRING_decode_aper, /* Aligned PER decoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BIT_STRING_tags, - sizeof(asn_DEF_BIT_STRING_tags) -Index: skeletons/NativeInteger.c -=================================================================== ---- skeletons/NativeInteger.c (revision 1516) -+++ skeletons/NativeInteger.c (working copy) -@@ -31,6 +31,8 @@ - NativeInteger_encode_xer, - NativeInteger_decode_uper, /* Unaligned PER decoder */ - NativeInteger_encode_uper, /* Unaligned PER encoder */ -+ NativeInteger_decode_aper, /* Aligned PER decoder */ -+ NativeInteger_encode_aper, /* Aligned PER encoder */ - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeInteger_tags, - sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), -@@ -267,6 +269,46 @@ - return rval; - } - -+asn_dec_rval_t -+NativeInteger_decode_aper(asn_codec_ctx_t *opt_codec_ctx, -+ asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd) { -+ -+ asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; -+ asn_dec_rval_t rval; -+ long *native = (long *)*sptr; -+ INTEGER_t tmpint; -+ void *tmpintptr = &tmpint; -+ int dynamic = 0; -+ -+ (void)opt_codec_ctx; -+ ASN_DEBUG("Decoding NativeInteger %s (APER)", td->name); -+ -+ if(!native) { -+ native = (long *)(*sptr = CALLOC(1, sizeof(*native))); -+ dynamic = 1; -+ if(!native) _ASN_DECODE_FAILED; -+ } -+ -+ memset(&tmpint, 0, sizeof tmpint); -+ rval = INTEGER_decode_aper(opt_codec_ctx, td, constraints, -+ &tmpintptr, pd); -+ if(rval.code == RC_OK) { -+ if((specs&&specs->field_unsigned) -+ ? asn_INTEGER2ulong(&tmpint, (unsigned long *)native) -+ : asn_INTEGER2long(&tmpint, native)) -+ rval.code = RC_FAIL; -+ else -+ ASN_DEBUG("NativeInteger %s got value %ld", -+ td->name, *native); -+ } -+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); -+ //if (dynamic) -+ // free(native); -+ -+ return rval; -+} -+ - asn_enc_rval_t - NativeInteger_encode_uper(asn_TYPE_descriptor_t *td, - asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -@@ -291,6 +333,44 @@ - return er; - } - -+asn_enc_rval_t -+NativeInteger_encode_aper( -+ asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ -+ asn_INTEGER_specifics_t *specs=(asn_INTEGER_specifics_t *)td->specifics; -+ asn_enc_rval_t er; -+ INTEGER_t tmpint; -+ -+ if(!sptr) _ASN_ENCODE_FAILED; -+ memset(&tmpint, 0, sizeof(tmpint)); -+ -+ if(specs&&specs->field_unsigned) { -+ unsigned long native; -+ native = *(unsigned long *)sptr; -+ -+ ASN_DEBUG("Encoding NativeInteger %s %lu (APER) (unsigned)", td->name, native); -+ -+ if(asn_ulong2INTEGER(&tmpint, native)) -+ _ASN_ENCODE_FAILED; -+ } else { -+ long native; -+ native = *(long *)sptr; -+ -+ ASN_DEBUG("Encoding NativeInteger %s %ld (APER) (unsigned)", td->name, native); -+ if(asn_long2INTEGER(&tmpint, native)) -+ _ASN_ENCODE_FAILED; -+ } -+ -+// if((specs&&specs->field_unsigned) -+// ? asn_ulong2INTEGER(&tmpint, native) -+// : asn_long2INTEGER(&tmpint, native)) -+// _ASN_ENCODE_FAILED; -+ er = INTEGER_encode_aper(td, constraints, &tmpint, po); -+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_INTEGER, &tmpint); -+ return er; -+} -+ - /* - * INTEGER specific human-readable output. - */ -Index: skeletons/constr_SEQUENCE.h -=================================================================== ---- skeletons/constr_SEQUENCE.h (revision 1516) -+++ skeletons/constr_SEQUENCE.h (working copy) -@@ -52,6 +52,8 @@ - xer_type_encoder_f SEQUENCE_encode_xer; - per_type_decoder_f SEQUENCE_decode_uper; - per_type_encoder_f SEQUENCE_encode_uper; -+per_type_decoder_f SEQUENCE_decode_aper; -+per_type_encoder_f SEQUENCE_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/NativeInteger.h -=================================================================== ---- skeletons/NativeInteger.h (revision 1516) -+++ skeletons/NativeInteger.h (working copy) -@@ -29,6 +29,8 @@ - xer_type_encoder_f NativeInteger_encode_xer; - per_type_decoder_f NativeInteger_decode_uper; - per_type_encoder_f NativeInteger_encode_uper; -+per_type_decoder_f NativeInteger_decode_aper; -+per_type_encoder_f NativeInteger_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/OCTET_STRING.h -=================================================================== ---- skeletons/OCTET_STRING.h (revision 1516) -+++ skeletons/OCTET_STRING.h (working copy) -@@ -32,6 +32,8 @@ - xer_type_encoder_f OCTET_STRING_encode_xer_utf8; - per_type_decoder_f OCTET_STRING_decode_uper; - per_type_encoder_f OCTET_STRING_encode_uper; -+per_type_decoder_f OCTET_STRING_decode_aper; -+per_type_encoder_f OCTET_STRING_encode_aper; - - /****************************** - * Handy conversion routines. * -Index: skeletons/UTCTime.c -=================================================================== ---- skeletons/UTCTime.c (revision 1516) -+++ skeletons/UTCTime.c (working copy) -@@ -40,6 +40,8 @@ - UTCTime_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UTCTime_tags, - sizeof(asn_DEF_UTCTime_tags) -Index: skeletons/REAL.c -=================================================================== ---- skeletons/REAL.c (revision 1516) -+++ skeletons/REAL.c (working copy) -@@ -45,6 +45,8 @@ - REAL_encode_xer, - REAL_decode_uper, - REAL_encode_uper, -+ REAL_decode_aper, -+ REAL_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_REAL_tags, - sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]), -@@ -361,6 +363,21 @@ - return OCTET_STRING_encode_uper(td, 0, sptr, po); - } - -+asn_dec_rval_t -+REAL_decode_aper(asn_codec_ctx_t *opt_codec_ctx, -+ asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, -+ void **sptr, asn_per_data_t *pd) { -+ (void)constraints; /* No PER visible constraints */ -+ return OCTET_STRING_decode_aper(opt_codec_ctx, td, 0, sptr, pd); -+} -+ -+asn_enc_rval_t -+REAL_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ (void)constraints; /* No PER visible constraints */ -+ return OCTET_STRING_encode_aper(td, 0, sptr, po); -+} -+ - int - asn_REAL2double(const REAL_t *st, double *dbl_value) { - unsigned int octv; -Index: skeletons/VisibleString.c -=================================================================== ---- skeletons/VisibleString.c (revision 1516) -+++ skeletons/VisibleString.c (working copy) -@@ -29,6 +29,8 @@ - OCTET_STRING_encode_xer_utf8, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_VisibleString_tags, - sizeof(asn_DEF_VisibleString_tags) -Index: skeletons/ANY.c -=================================================================== ---- skeletons/ANY.c (revision 1516) -+++ skeletons/ANY.c (working copy) -@@ -21,7 +21,10 @@ - OCTET_STRING_encode_der, - OCTET_STRING_decode_xer_hex, - ANY_encode_xer, -- 0, 0, -+ OCTET_STRING_decode_uper, -+ OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - 0, 0, 0, 0, - 0, /* No PER visible constraints */ -@@ -87,6 +90,37 @@ - return 0; - } - -+int -+ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr) { -+ uint8_t *buffer = NULL; -+ ssize_t erval; -+ -+ if(!st || !td) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ if(!sptr) { -+ if(st->buf) FREEMEM(st->buf); -+ st->size = 0; -+ return 0; -+ } -+ -+ erval = aper_encode_to_new_buffer(td, td->per_constraints, sptr, (void**)&buffer); -+ -+ if(erval == -1) { -+ if(buffer) FREEMEM(buffer); -+ return -1; -+ } -+ assert((size_t)erval > 0); -+ -+ if(st->buf) FREEMEM(st->buf); -+ st->buf = buffer; -+ st->size = erval; -+ -+ return 0; -+} -+ - ANY_t * - ANY_new_fromType(asn_TYPE_descriptor_t *td, void *sptr) { - ANY_t tmp; -@@ -111,6 +145,30 @@ - } - } - -+ANY_t * -+ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr) { -+ ANY_t tmp; -+ ANY_t *st; -+ -+ if(!td || !sptr) { -+ errno = EINVAL; -+ return 0; -+ } -+ -+ memset(&tmp, 0, sizeof(tmp)); -+ -+ if(ANY_fromType_aper(&tmp, td, sptr)) return 0; -+ -+ st = (ANY_t *)CALLOC(1, sizeof(ANY_t)); -+ if(st) { -+ *st = tmp; -+ return st; -+ } else { -+ FREEMEM(tmp.buf); -+ return 0; -+ } -+} -+ - int - ANY_to_type(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { - asn_dec_rval_t rval; -@@ -138,6 +196,33 @@ - } - } - -+int -+ANY_to_type_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void **struct_ptr) { -+ asn_dec_rval_t rval; -+ void *newst = 0; -+ -+ if(!st || !td || !struct_ptr) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ if(st->buf == 0) { -+ /* Nothing to convert, make it empty. */ -+ *struct_ptr = (void *)0; -+ return 0; -+ } -+ -+ rval = aper_decode(0, td, (void **)&newst, st->buf, st->size, 0, 0); -+ if(rval.code == RC_OK) { -+ *struct_ptr = newst; -+ return 0; -+ } else { -+ /* Remove possibly partially decoded data. */ -+ ASN_STRUCT_FREE(*td, newst); -+ return -1; -+ } -+} -+ - static int ANY__consume_bytes(const void *buffer, size_t size, void *key) { - struct _callback_arg *arg = (struct _callback_arg *)key; - -Index: skeletons/REAL.h -=================================================================== ---- skeletons/REAL.h (revision 1516) -+++ skeletons/REAL.h (working copy) -@@ -21,6 +21,8 @@ - xer_type_encoder_f REAL_encode_xer; - per_type_decoder_f REAL_decode_uper; - per_type_encoder_f REAL_encode_uper; -+per_type_decoder_f REAL_decode_aper; -+per_type_encoder_f REAL_encode_aper; - - /*********************************** - * Some handy conversion routines. * -Index: skeletons/NativeReal.c -=================================================================== ---- skeletons/NativeReal.c (revision 1516) -+++ skeletons/NativeReal.c (working copy) -@@ -32,6 +32,8 @@ - NativeReal_encode_xer, - NativeReal_decode_uper, - NativeReal_encode_uper, -+ NativeReal_decode_aper, -+ NativeReal_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeReal_tags, - sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]), -@@ -123,11 +125,11 @@ - tmp.size = length; - memcpy(tmp.buf, buf_ptr, length); - tmp.buf[tmp.size] = '\0'; -- if(asn_REAL2double(&tmp, &d)) { -- rval.code = RC_FAIL; -- rval.consumed = 0; -- return rval; -- } -+ if(asn_REAL2double(&tmp, &d)) { -+ rval.code = RC_FAIL; -+ rval.consumed = 0; -+ return rval; -+ } - } else { - /* This should probably never happen: impractically long value */ - tmp.buf = CALLOC(1, length + 1); -@@ -228,6 +230,43 @@ - return rval; - } - -+asn_dec_rval_t -+NativeReal_decode_aper(asn_codec_ctx_t *opt_codec_ctx, -+ asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, -+ void **dbl_ptr, asn_per_data_t *pd) { -+ double *Dbl = (double *)*dbl_ptr; -+ asn_dec_rval_t rval; -+ REAL_t tmp; -+ void *ptmp = &tmp; -+ int ret; -+ -+ (void)constraints; -+ -+ /* -+ * If the structure is not there, allocate it. -+ */ -+ if(Dbl == NULL) { -+ *dbl_ptr = CALLOC(1, sizeof(*Dbl)); -+ Dbl = (double *)*dbl_ptr; -+ if(Dbl == NULL) -+ _ASN_DECODE_FAILED; -+ } -+ -+ memset(&tmp, 0, sizeof(tmp)); -+ rval = OCTET_STRING_decode_aper(opt_codec_ctx, td, NULL, -+ &ptmp, pd); -+ if(rval.code != RC_OK) { -+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); -+ return rval; -+ } -+ -+ ret = asn_REAL2double(&tmp, Dbl); -+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); -+ if(ret) _ASN_DECODE_FAILED; -+ -+ return rval; -+} -+ - /* - * Encode the NativeReal using the OCTET STRING PER encoder. - */ -@@ -257,6 +296,32 @@ - return erval; - } - -+asn_enc_rval_t -+NativeReal_encode_aper(asn_TYPE_descriptor_t *td, -+ asn_per_constraints_t *constraints, void *sptr, asn_per_outp_t *po) { -+ double Dbl = *(const double *)sptr; -+ asn_enc_rval_t erval; -+ REAL_t tmp; -+ -+ (void)constraints; -+ -+ /* Prepare a temporary clean structure */ -+ memset(&tmp, 0, sizeof(tmp)); -+ -+ if(asn_double2REAL(&tmp, Dbl)) -+ _ASN_ENCODE_FAILED; -+ -+ /* Encode a DER REAL */ -+ erval = OCTET_STRING_encode_aper(td, NULL, &tmp, po); -+ if(erval.encoded == -1) -+ erval.structure_ptr = sptr; -+ -+ /* Free possibly allocated members of the temporary structure */ -+ ASN_STRUCT_FREE_CONTENTS_ONLY(asn_DEF_REAL, &tmp); -+ -+ return erval; -+} -+ - /* - * Decode the chunk of XML text encoding REAL. - */ -Index: skeletons/asn_system.h -=================================================================== ---- skeletons/asn_system.h (revision 1516) -+++ skeletons/asn_system.h (working copy) -@@ -21,6 +21,11 @@ - #include <stdarg.h> /* For va_start */ - #include <stddef.h> /* for offsetof and ptrdiff_t */ - -+#if HAVE_STDINT_H -+# include <stdint.h> -+# include <inttypes.h> -+#endif -+ - #ifdef _WIN32 - - #include <malloc.h> -Index: skeletons/ANY.h -=================================================================== ---- skeletons/ANY.h (revision 1516) -+++ skeletons/ANY.h (working copy) -@@ -32,10 +32,13 @@ - - /* Convert another ASN.1 type into the ANY. This implies DER encoding. */ - int ANY_fromType(ANY_t *, asn_TYPE_descriptor_t *td, void *struct_ptr); -+int ANY_fromType_aper(ANY_t *st, asn_TYPE_descriptor_t *td, void *sptr); - ANY_t *ANY_new_fromType(asn_TYPE_descriptor_t *td, void *struct_ptr); -+ANY_t *ANY_new_fromType_aper(asn_TYPE_descriptor_t *td, void *sptr); - - /* Convert the contents of the ANY type into the specified type. */ - int ANY_to_type(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); -+int ANY_to_type_aper(ANY_t *, asn_TYPE_descriptor_t *td, void **struct_ptr); - - #define ANY_fromBuf(s, buf, size) OCTET_STRING_fromBuf((s), (buf), (size)) - #define ANY_new_fromBuf(buf, size) OCTET_STRING_new_fromBuf( \ -Index: skeletons/NativeReal.h -=================================================================== ---- skeletons/NativeReal.h (revision 1516) -+++ skeletons/NativeReal.h (working copy) -@@ -27,6 +27,8 @@ - xer_type_encoder_f NativeReal_encode_xer; - per_type_decoder_f NativeReal_decode_uper; - per_type_encoder_f NativeReal_encode_uper; -+per_type_decoder_f NativeReal_decode_aper; -+per_type_encoder_f NativeReal_encode_aper; - - #ifdef __cplusplus - } -Index: skeletons/UniversalString.c -=================================================================== ---- skeletons/UniversalString.c (revision 1516) -+++ skeletons/UniversalString.c (working copy) -@@ -35,6 +35,8 @@ - UniversalString_encode_xer, /* Convert into UTF-8 */ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UniversalString_tags, - sizeof(asn_DEF_UniversalString_tags) -Index: skeletons/GraphicString.c -=================================================================== ---- skeletons/GraphicString.c (revision 1516) -+++ skeletons/GraphicString.c (working copy) -@@ -24,6 +24,8 @@ - OCTET_STRING_encode_xer, /* Can't expect it to be ASCII/UTF8 */ - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GraphicString_tags, - sizeof(asn_DEF_GraphicString_tags) -Index: skeletons/GeneralizedTime.c -=================================================================== ---- skeletons/GeneralizedTime.c (revision 1516) -+++ skeletons/GeneralizedTime.c (working copy) -@@ -167,6 +167,8 @@ - GeneralizedTime_encode_xer, - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, -+ OCTET_STRING_decode_aper, -+ OCTET_STRING_encode_aper, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GeneralizedTime_tags, - sizeof(asn_DEF_GeneralizedTime_tags) -Index: libasn1compiler/asn1c_out.h -=================================================================== ---- libasn1compiler/asn1c_out.h (revision 1516) -+++ libasn1compiler/asn1c_out.h (working copy) -@@ -117,16 +117,24 @@ - * Format LONG_MIN according to C90 rules. - */ - #define OINT(iv) do { \ -- if(iv == (-2147483647L - 1)) \ -+ if(iv > 4294967295U) \ -+ OUT("%" PRIdASN"ULL", iv); \ -+ else if(iv > 2147483647L) \ -+ OUT("%" PRIdASN"U", iv); \ -+ else if(iv == (-2147483647L - 1)) \ - OUT("(-2147483647L - 1)"); \ -- else \ -+ else \ - OUT("%" PRIdASN, iv); \ - } while(0) - - #define OINTS(iv) do { \ -- if(iv == (-2147483647L - 1)) \ -+ if(iv > 4294967295U) \ -+ OUT("%" PRIdASN"ULL", iv); \ -+ else if(iv > 2147483647L) \ -+ OUT("%" PRIdASN"U", iv); \ -+ else if(iv == (-2147483647L - 1)) \ - OUT("(-2147483647L - 1)"); \ -- else \ -+ else \ - OUT("% " PRIdASN, iv); \ - } while(0) - -Index: libasn1compiler/asn1compiler.h -=================================================================== ---- libasn1compiler/asn1compiler.h (revision 1516) -+++ libasn1compiler/asn1compiler.h (working copy) -@@ -77,7 +77,14 @@ - * -fline-refs - * Include ASN.1 module's line numbers in comments. - */ -- A1C_LINE_REFS = 0x20000 -+ A1C_LINE_REFS = 0x20000, -+ /* -+ * -fhave_native64 -+ * Assume target platform has native 64bits support and generate types using -+ * int64_t or uint64_t whereas possible -+ */ -+ A1C_HAVE_NATIVE_64 = 0x40000 -+ - }; - - /* -Index: libasn1compiler/asn1c_C.c -=================================================================== ---- libasn1compiler/asn1c_C.c (revision 1516) -+++ libasn1compiler/asn1c_C.c (working copy) -@@ -1242,6 +1242,8 @@ - OUT("td->xer_encoder = asn_DEF_%s.xer_encoder;\n", type_name); - OUT("td->uper_decoder = asn_DEF_%s.uper_decoder;\n", type_name); - OUT("td->uper_encoder = asn_DEF_%s.uper_encoder;\n", type_name); -+ OUT("td->aper_decoder = asn_DEF_%s.aper_decoder;\n", type_name); -+ OUT("td->aper_encoder = asn_DEF_%s.aper_encoder;\n", type_name); - if(!terminal && !tags_count) { - OUT("/* The next four lines are here because of -fknown-extern-type */\n"); - OUT("td->tags = asn_DEF_%s.tags;\n", type_name); -@@ -1394,6 +1396,38 @@ - ); - OUT("}\n"); - OUT("\n"); -+ -+ p = MKID(expr); -+ if(HIDE_INNER_DEFS) OUT("static "); -+ OUT("asn_enc_rval_t\n"); -+ OUT("%s", p); -+ if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index); -+ OUT("_encode_aper(asn_TYPE_descriptor_t *td,\n"); -+ INDENTED( -+ OUT("\tasn_per_constraints_t *constraints,\n"); -+ OUT("\tvoid *structure, asn_per_outp_t *per_out) {\n"); -+ OUT("%s_%d_inherit_TYPE_descriptor(td);\n", -+ p, expr->_type_unique_index); -+ OUT("return td->aper_encoder(td, constraints, structure, per_out);\n"); -+ ); -+ OUT("}\n"); -+ OUT("\n"); -+ -+ p = MKID(expr); -+ -+ if(HIDE_INNER_DEFS) OUT("static "); -+ OUT("asn_dec_rval_t\n"); -+ OUT("%s", p); -+ if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index); -+ OUT("_decode_aper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,\n"); -+ INDENTED( -+ OUT("\tasn_per_constraints_t *constraints, void **structure, asn_per_data_t *per_data) {\n"); -+ OUT("%s_%d_inherit_TYPE_descriptor(td);\n", -+ p, expr->_type_unique_index); -+ OUT("return td->aper_decoder(opt_codec_ctx, td, constraints, structure, per_data);\n"); -+ ); -+ OUT("}\n"); -+ OUT("\n"); - } - - REDIR(OT_FUNC_DECLS); -@@ -1415,6 +1449,8 @@ - if(arg->flags & A1C_GEN_PER) { - OUT("per_type_decoder_f %s_decode_uper;\n", p); - OUT("per_type_encoder_f %s_encode_uper;\n", p); -+ OUT("per_type_decoder_f %s_decode_aper;\n", p); -+ OUT("per_type_encoder_f %s_encode_aper;\n", p); - } - } - -@@ -1670,12 +1706,11 @@ - OUT("%d, ", tag2el[i].el_no); - OUT("%d, ", tag2el[i].toff_first); - OUT("%d ", tag2el[i].toff_last); -- OUT("}%s /* %s", -+ OUT("}%s /* %s at %d */\n", - (i + 1 < tag2el_count) ? "," : "", -- tag2el[i].from_expr->Identifier); -- if(arg->flags & A1C_LINE_REFS) -- OUT("at %d", tag2el[i].from_expr->_lineno); -- OUT(" */\n"); -+ tag2el[i].from_expr->Identifier, -+ tag2el[i].from_expr->_lineno -+ ); - } - OUT("};\n"); - -@@ -2111,19 +2146,22 @@ - try_inline_default(arg_t *arg, asn1p_expr_t *expr, int out) { - int save_target = arg->target->target; - asn1p_expr_type_e etype = expr_get_type(arg, expr); -- int fits_long = 0; -+// int fits_long = 0; -+ enum asn1c_fitslong_e fits = FL_NOTFIT; - - switch(etype) { - case ASN_BASIC_BOOLEAN: -- fits_long = 1; -+// fits_long = 1; -+ fits = FL_FITS_SIGNED; - case ASN_BASIC_INTEGER: - case ASN_BASIC_ENUMERATED: - if(expr->marker.default_value == NULL - || expr->marker.default_value->type != ATV_INTEGER) - break; -- if(!fits_long) -- fits_long = asn1c_type_fits_long(arg, expr)!=FL_NOTFIT; -- if(fits_long && !expr->marker.default_value->value.v_integer) -+ if(fits == FL_NOTFIT) -+// fits_long = asn1c_type_fits_long(arg, expr)!=FL_NOTFIT; -+ fits = asn1c_type_fits_long(arg, expr); -+ if(fits != FL_NOTFIT && !expr->marker.default_value->value.v_integer) - expr->marker.flags &= ~EM_INDIRECT; - if(!out) { - OUT("asn_DFL_%d_set_%" PRIdASN -@@ -2150,7 +2188,7 @@ - INDENT(+1); - OUT("/* Install default value %" PRIdASN " */\n", - expr->marker.default_value->value.v_integer); -- if(fits_long) { -+ if(fits != FL_NOTFIT) { - OUT("*st = "); - OINT(expr->marker.default_value->value.v_integer); - OUT(";\n"); -@@ -2165,7 +2203,7 @@ - INDENT(+1); - OUT("/* Test default value %" PRIdASN " */\n", - expr->marker.default_value->value.v_integer); -- if(fits_long) { -+ if(fits != FL_NOTFIT) { - OUT("return (*st == %" PRIdASN ");\n", - expr->marker.default_value->value.v_integer); - } else { -@@ -2455,9 +2493,13 @@ - if(arg->flags & A1C_GEN_PER) { - FUNCREF(decode_uper); - FUNCREF(encode_uper); -+ FUNCREF(decode_aper); -+ FUNCREF(encode_aper); - } else { -- OUT("0, 0,\t/* No PER support, " -+ OUT("0, 0,\t/* No UPER support, " - "use \"-gen-PER\" to enable */\n"); -+ OUT("0, 0,\t/* No APER support, " -+ "use \"-gen-PER\" to enable */\n"); - } - - if(!terminal || terminal->expr_type == ASN_CONSTR_CHOICE) { -Index: libasn1compiler/asn1c_constraint.c -=================================================================== ---- libasn1compiler/asn1c_constraint.c (revision 1516) -+++ libasn1compiler/asn1c_constraint.c (working copy) -@@ -35,6 +35,7 @@ - int alphabet_table_compiled; - int produce_st = 0; - int ulong_optimize = 0; -+ enum asn1c_fitslong_e fits = FL_NOTFIT; - - ct = expr->combined_constraints; - if(ct == NULL) -@@ -74,7 +75,8 @@ - switch(etype) { - case ASN_BASIC_INTEGER: - case ASN_BASIC_ENUMERATED: -- if(asn1c_type_fits_long(arg, arg->expr) == FL_NOTFIT) -+ fits = asn1c_type_fits_long(arg, arg->expr); -+ if(fits == FL_NOTFIT) - produce_st = 1; - break; - case ASN_BASIC_REAL: -@@ -103,13 +105,19 @@ - switch(etype) { - case ASN_BASIC_INTEGER: - case ASN_BASIC_ENUMERATED: -- if(native_long_sign(r_value) >= 0) { -- ulong_optimize = ulong_optimization(etype, r_size, r_value); -- if(!ulong_optimize) { -- OUT("unsigned long value;\n"); -+ if(fits == FL_FITS_INT64) { -+ OUT("int64_t value;\n"); -+ } else if(fits == FL_FITS_UINT64) { -+ OUT("uint64_t value;\n"); -+ } else { -+ if(native_long_sign(r_value) >= 0) { -+ ulong_optimize = ulong_optimization(etype, r_size, r_value); -+ if(!ulong_optimize) { -+ OUT("unsigned long value;\n"); -+ } -+ } else { -+ OUT("long value;\n"); - } -- } else { -- OUT("long value;\n"); - } - break; - case ASN_BASIC_REAL: -@@ -603,13 +611,19 @@ - - static int - emit_value_determination_code(arg_t *arg, asn1p_expr_type_e etype, asn1cnst_range_t *r_value) { -+ enum asn1c_fitslong_e fits = FL_NOTFIT; - - switch(etype) { - case ASN_BASIC_INTEGER: - case ASN_BASIC_ENUMERATED: -- if(asn1c_type_fits_long(arg, arg->expr) == FL_FITS_UNSIGN) { -+ fits = asn1c_type_fits_long(arg, arg->expr); -+ if(fits == FL_FITS_INT64) { -+ OUT("value = *(const int64_t *)sptr;\n"); -+ } else if(fits == FL_FITS_UINT64) { -+ OUT("value = *(const uint64_t *)sptr;\n"); -+ } else if(fits == FL_FITS_UNSIGN) { - OUT("value = *(const unsigned long *)sptr;\n"); -- } else if(asn1c_type_fits_long(arg, arg->expr) != FL_NOTFIT) { -+ } else if(fits != FL_NOTFIT) { - OUT("value = *(const long *)sptr;\n"); - } else { - /* -Index: libasn1compiler/asn1c_misc.c -=================================================================== ---- libasn1compiler/asn1c_misc.c (revision 1516) -+++ libasn1compiler/asn1c_misc.c (working copy) -@@ -158,6 +158,7 @@ - asn1p_expr_t *terminal; - int stdname = 0; - char *typename; -+ enum asn1c_fitslong_e fits; - - /* Rewind to the topmost parent expression */ - if((top_parent = expr->parent_expr)) -@@ -213,15 +214,20 @@ - case ASN_BASIC_INTEGER: - case ASN_BASIC_ENUMERATED: - case ASN_BASIC_REAL: -+ fits = asn1c_type_fits_long(arg, expr); - if((expr->expr_type == ASN_BASIC_REAL - && !(arg->flags & A1C_USE_WIDE_TYPES)) -- || asn1c_type_fits_long(arg, expr)) { -+ || (fits != FL_NOTFIT)) { - switch(_format) { - case TNF_CTYPE: - case TNF_RSAFE: - if(expr->expr_type == ASN_BASIC_REAL) - return "double"; -- else if(asn1c_type_fits_long(arg, expr) == FL_FITS_UNSIGN) -+ else if (fits == FL_FITS_INT64) -+ return "int64_t"; -+ else if (fits == FL_FITS_UINT64) -+ return "uint64_t"; -+ else if(fits == FL_FITS_UNSIGN) - return "unsigned long"; - else - return "long"; -@@ -377,11 +383,33 @@ - /* Special case for unsigned */ - if(left.type == ARE_VALUE - && left.value >= 0 -- && right.type == ARE_VALUE -+ && right.type == ARE_VALUE - && right.value > 2147483647 - && right.value <= 4294967295UL) - return FL_FITS_UNSIGN; -- -+ /* Special for native 64 bits integer option */ -+ if (arg->flags & A1C_HAVE_NATIVE_64) { -+// printf("left.value %lld right.value %lld\n", left.value, right.value); -+ if(left.type == ARE_VALUE -+ && left.value >= 0 -+ && right.type == ARE_VALUE -+ && right.value > 9223372036854775807LL -+ && right.value <= 18446744073709551615ULL) -+ return FL_FITS_UINT64; -+ if(left.type == ARE_VALUE -+ && left.value < -2147483648 -+ && left.value >= -9223372036854775808LL -+ && right.type == ARE_VALUE -+ && right.value > 2147483647 -+ && right.value <= 9223372036854775807LL) -+ return FL_FITS_INT64; -+ if(left.type == ARE_VALUE -+ && left.value >= 0 -+ && right.type == ARE_VALUE -+ && right.value > 4294967295UL -+ && right.value <= 9223372036854775807LL) -+ return FL_FITS_INT64; -+ } - - /* If some fixed value is outside of target range, not fit */ - if(left.type == ARE_VALUE -Index: libasn1compiler/asn1c_misc.h -=================================================================== ---- libasn1compiler/asn1c_misc.h (revision 1516) -+++ libasn1compiler/asn1c_misc.h (working copy) -@@ -36,6 +36,8 @@ - */ - enum asn1c_fitslong_e { - FL_NOTFIT, -+ FL_FITS_INT64, -+ FL_FITS_UINT64, - FL_FITS_SIGNED, - FL_FITS_UNSIGN, - FL_PRESUMED, diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 b/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 deleted file mode 100644 index 80835b1b86621a62fde0dda589135082c142ed93..0000000000000000000000000000000000000000 --- a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_2.p0 +++ /dev/null @@ -1,22 +0,0 @@ ---- skeletons/OCTET_STRING.c.orig 2015-04-28 10:40:04.036970492 +0200 -+++ skeletons/OCTET_STRING.c 2015-04-28 10:40:09.619970869 +0200 -@@ -159,7 +159,7 @@ - } - - static struct _stack * --_new_stack() { -+_new_stack(void) { - return (struct _stack *)CALLOC(1, sizeof(struct _stack)); - } - ---- skeletons/converter-sample.c.orig 2015-04-28 10:40:32.164972391 +0200 -+++ skeletons/converter-sample.c 2015-04-28 10:40:37.140972727 +0200 -@@ -353,7 +353,7 @@ - } DynamicBuffer; - - static void --buffer_dump() { -+buffer_dump(void) { - uint8_t *p = DynamicBuffer.data + DynamicBuffer.offset; - uint8_t *e = p + DynamicBuffer.length - (DynamicBuffer.unbits ? 1 : 0); - if(!opt_debug) return; diff --git a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 b/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 deleted file mode 100644 index d5a936c1018b9d3bcc96d06d532c3cddbec911d4..0000000000000000000000000000000000000000 --- a/openair3/S1AP/MESSAGES/ASN1/asn1cpatch_3.p0 +++ /dev/null @@ -1,1264 +0,0 @@ ---- asn1c/unber.c 2015-12-08 14:39:33.282543533 +0100 -+++ asn1c/unber.c 2015-12-07 10:46:18.382647000 +0100 -@@ -779,4 +779,6 @@ - - asn_enc_rval_t OCTET_STRING_encode_aper(asn_TYPE_descriptor_t *td, asn_per_constraints_t *cts, void *sptr, asn_per_outp_t *po) { asn_enc_rval_t er = { 0, 0, 0 }; (void)td; (void)cts; (void)sptr; (void)po; return er; } - -+asn_comp_rval_t * OCTET_STRING_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) { (void)td1; (void)sptr1; (void)td2; (void)sptr2; return 0; } -+ - size_t xer_whitespace_span(const void *chunk_buf, size_t chunk_size) { (void)chunk_buf; (void)chunk_size; return 0; } ---- libasn1compiler/asn1c_C.c 2015-12-08 14:39:33.366543533 +0100 -+++ libasn1compiler/asn1c_C.c 2015-12-08 08:38:29.002565000 +0100 -@@ -1082,6 +1082,8 @@ - enum tvm_compat tv_mode; - enum etd_spec etd_spec; - char *p; -+ //char tmp_buf[512]; -+ //int i = 0; - - if(arg->embed) { - enum tnfmt tnfmt = TNF_CTYPE; -@@ -1243,7 +1245,8 @@ - OUT("td->uper_decoder = asn_DEF_%s.uper_decoder;\n", type_name); - OUT("td->uper_encoder = asn_DEF_%s.uper_encoder;\n", type_name); - OUT("td->aper_decoder = asn_DEF_%s.aper_decoder;\n", type_name); -- OUT("td->aper_encoder = asn_DEF_%s.aper_encoder;\n", type_name); -+ OUT("td->aper_encoder = asn_DEF_%s.aper_encoder;\n", type_name); -+ OUT("td->compare = asn_DEF_%s.compare;\n", type_name); - if(!terminal && !tags_count) { - OUT("/* The next four lines are here because of -fknown-extern-type */\n"); - OUT("td->tags = asn_DEF_%s.tags;\n", type_name); -@@ -1413,6 +1416,39 @@ - OUT("}\n"); - OUT("\n"); - -+ -+ //i = 0; -+ //while ((p[i] != '_') && (i < sizeof(tmp_buf))) { -+ // tmp_buf[i] = p[i]; -+ // i++; -+ //} -+ //tmp_buf[i] = '\0'; -+ // hack, only for s1ap -+ //if ((strcmp("S1ap", tmp_buf) == 0) || (strcmp("X2ap", tmp_buf) == 0)) -+ // OUT("#include \"%s-ProtocolIE-ID.h\"\n", tmp_buf); -+ -+ -+ p = MKID(expr); -+ if(HIDE_INNER_DEFS) OUT("static "); -+ OUT("asn_comp_rval_t * \n"); -+ OUT("%s", p); -+ if(HIDE_INNER_DEFS) OUT("_%d", expr->_type_unique_index); -+ OUT("_compare(asn_TYPE_descriptor_t *td1,\n"); -+ INDENTED( -+ OUT("\tconst void *structure1,\n"); -+ OUT("\tasn_TYPE_descriptor_t *td2,\n"); -+ OUT("\tconst void *structure2) {\n"); -+ OUT("asn_comp_rval_t * res = NULL;\n"); -+ OUT("%s_%d_inherit_TYPE_descriptor(td1);\n", -+ p, expr->_type_unique_index); -+ OUT("%s_%d_inherit_TYPE_descriptor(td2);\n", -+ p, expr->_type_unique_index); -+ OUT("res = td1->compare(td1, structure1, td2, structure2);\n"); -+ OUT("return res;\n"); -+ ); -+ OUT("}\n"); -+ OUT("\n"); -+ - p = MKID(expr); - - if(HIDE_INNER_DEFS) OUT("static "); -@@ -1450,7 +1486,8 @@ - OUT("per_type_decoder_f %s_decode_uper;\n", p); - OUT("per_type_encoder_f %s_encode_uper;\n", p); - OUT("per_type_decoder_f %s_decode_aper;\n", p); -- OUT("per_type_encoder_f %s_encode_aper;\n", p); -+ OUT("per_type_encoder_f %s_encode_aper;\n", p); -+ OUT("type_compare_f %s_compare;\n", p); - } - } - -@@ -2501,6 +2538,7 @@ - OUT("0, 0,\t/* No APER support, " - "use \"-gen-PER\" to enable */\n"); - } -+ FUNCREF(compare); - - if(!terminal || terminal->expr_type == ASN_CONSTR_CHOICE) { - //if(expr->expr_type == ASN_CONSTR_CHOICE) { ---- skeletons/ANY.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/ANY.c 2015-11-26 14:40:56.547616000 +0100 -@@ -24,7 +24,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - 0, 0, 0, 0, - 0, /* No PER visible constraints */ ---- skeletons/asn_application.h 2015-12-08 14:39:12.674543554 +0100 -+++ skeletons/asn_application.h 2015-12-07 14:36:32.950633000 +0100 -@@ -9,7 +9,8 @@ - #define _ASN_APPLICATION_H_ - - #include "asn_system.h" /* for platform-dependent types */ --#include "asn_codecs.h" /* for ASN.1 codecs specifics */ -+#include "asn_codecs.h" /* for ASN.1 codecs specifics */ -+#include "asn_compare.h" - - #ifdef __cplusplus - extern "C" { ---- skeletons/asn_compare.h 1970-01-01 01:00:00.000000000 +0100 -+++ skeletons/asn_compare.h 2015-12-08 10:34:58.090558000 +0100 -@@ -0,0 +1,78 @@ -+#ifndef _ASN_COMPARE_H_ -+#define _ASN_COMPARE_H_ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+struct asn_TYPE_descriptor_s; /* Forward declaration */ -+ -+ -+typedef enum COMPARE_ERR_CODE_e { -+ COMPARE_ERR_CODE_START = 0, -+ COMPARE_ERR_CODE_NONE = COMPARE_ERR_CODE_START, -+ COMPARE_ERR_CODE_NO_MATCH, -+ COMPARE_ERR_CODE_TYPE_MISMATCH, -+ COMPARE_ERR_CODE_TYPE_ARG_NULL, -+ COMPARE_ERR_CODE_VALUE_NULL, -+ COMPARE_ERR_CODE_VALUE_ARG_NULL, -+ COMPARE_ERR_CODE_CHOICE_NUM, -+ COMPARE_ERR_CODE_CHOICE_PRESENT, -+ COMPARE_ERR_CODE_CHOICE_MALFORMED, -+ COMPARE_ERR_CODE_SET_MALFORMED, -+ COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS, -+ COMPARE_ERR_CODE_END -+} COMPARE_ERR_CODE_t; -+ -+typedef struct asn_comp_rval_s { -+ enum COMPARE_ERR_CODE_e err_code; -+ char *name; // e_S1ap_ProtocolIE_ID not available for all ASN1 use (RRC vs S1AP, X2AP) -+ const void *structure1; -+ const void *structure2; -+ struct asn_comp_rval_s *next; -+} asn_comp_rval_t; -+ -+#define COMPARE_CHECK_ARGS(aRg_tYpE_dEf1, aRg_tYpE_dEf2, aRg_vAl1, aRg_vAl2, rEsUlT) \ -+ do {\ -+ if ((aRg_tYpE_dEf1) && (aRg_tYpE_dEf2)) {\ -+ if ((aRg_tYpE_dEf1->name) && (aRg_tYpE_dEf2->name)) {\ -+ if (strcmp(aRg_tYpE_dEf1->name, aRg_tYpE_dEf2->name)) {\ -+ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\ -+ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_MISMATCH;\ -+ rEsUlT->name = aRg_tYpE_dEf1->name;\ -+ return rEsUlT;\ -+ }\ -+ } else {\ -+ if ((aRg_tYpE_dEf1->xml_tag) && (aRg_tYpE_dEf2->xml_tag)) {\ -+ if (strcmp(aRg_tYpE_dEf1->xml_tag, aRg_tYpE_dEf2->xml_tag)) {\ -+ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\ -+ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_MISMATCH;\ -+ rEsUlT->name = aRg_tYpE_dEf1->xml_tag;\ -+ return rEsUlT;\ -+ }\ -+ }\ -+ }\ -+ } else {\ -+ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\ -+ rEsUlT->name = aRg_tYpE_dEf1->name;\ -+ rEsUlT->structure1 = aRg_vAl1;\ -+ rEsUlT->structure2 = aRg_vAl2;\ -+ rEsUlT->err_code = COMPARE_ERR_CODE_TYPE_ARG_NULL;\ -+ return rEsUlT;\ -+ }\ -+ if ((NULL == aRg_vAl1) || (NULL == aRg_vAl2)){\ -+ rEsUlT = (asn_comp_rval_t *)calloc(1, sizeof(asn_comp_rval_t));\ -+ rEsUlT->name = aRg_tYpE_dEf1->name;\ -+ rEsUlT->structure1 = aRg_vAl1;\ -+ rEsUlT->structure2 = aRg_vAl2;\ -+ rEsUlT->err_code = COMPARE_ERR_CODE_VALUE_ARG_NULL;\ -+ return rEsUlT;\ -+ }\ -+ } while (0); -+ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* _ASN_COMPARE_H_ */ ---- skeletons/BIT_STRING.c 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/BIT_STRING.c 2015-11-26 14:41:50.159616000 +0100 -@@ -30,7 +30,8 @@ - OCTET_STRING_decode_uper, /* Unaligned PER decoder */ - OCTET_STRING_encode_uper, /* Unaligned PER encoder */ - OCTET_STRING_decode_aper, /* Aligned PER decoder */ -- OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BIT_STRING_tags, - sizeof(asn_DEF_BIT_STRING_tags) ---- skeletons/BMPString.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/BMPString.c 2015-11-26 14:42:08.487616000 +0100 -@@ -36,7 +36,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, /* Aligned PER decoder */ -- OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BMPString_tags, - sizeof(asn_DEF_BMPString_tags) ---- skeletons/BOOLEAN.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/BOOLEAN.c 2015-12-08 10:37:11.866558000 +0100 -@@ -25,7 +25,8 @@ - BOOLEAN_decode_uper, /* Unaligned PER decoder */ - BOOLEAN_encode_uper, /* Unaligned PER encoder */ - BOOLEAN_decode_aper, /* Aligned PER decoder */ -- BOOLEAN_encode_aper, /* Aligned PER encoder */ -+ BOOLEAN_encode_aper, /* Aligned PER encoder */ -+ BOOLEAN_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_BOOLEAN_tags, - sizeof(asn_DEF_BOOLEAN_tags) / sizeof(asn_DEF_BOOLEAN_tags[0]), -@@ -326,3 +327,22 @@ - - _ASN_ENCODED_OK(er); - } -+ -+asn_comp_rval_t * -+BOOLEAN_compare(asn_TYPE_descriptor_t *td1, -+ const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const BOOLEAN_t *st1 = (const BOOLEAN_t *)sptr1; -+ const BOOLEAN_t *st2 = (const BOOLEAN_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (*st1 == *st2) return NULL; -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+} -+ ---- skeletons/BOOLEAN.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/BOOLEAN.h 2015-11-26 12:46:58.491623000 +0100 -@@ -30,6 +30,7 @@ - per_type_encoder_f BOOLEAN_encode_uper; - per_type_decoder_f BOOLEAN_decode_aper; - per_type_encoder_f BOOLEAN_encode_aper; -+type_compare_f BOOLEAN_compare; - - #ifdef __cplusplus - } ---- skeletons/compare.h 1970-01-01 01:00:00.000000000 +0100 -+++ skeletons/compare.h 2015-12-08 08:23:03.694566000 +0100 -@@ -0,0 +1,28 @@ -+/*- -+ * Eurecom 2015. -+ */ -+#ifndef _COMPARE_H_ -+#define _COMPARE_H_ -+ -+#include <asn_application.h> -+ -+#ifdef __cplusplus -+extern "C" { -+#endif -+ -+struct asn_TYPE_descriptor_s; /* Forward declaration */ -+ -+typedef asn_comp_rval_t * (type_compare_f)( -+ struct asn_TYPE_descriptor_s *type_descriptor1, -+ const void *struct_ptr1, -+ struct asn_TYPE_descriptor_s *type_descriptor2, -+ const void *struct_ptr2 -+); -+ -+ -+ -+#ifdef __cplusplus -+} -+#endif -+ -+#endif /* _COMPARE_H_ */ ---- skeletons/constr_CHOICE.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/constr_CHOICE.c 2015-12-08 10:39:16.670558000 +0100 -@@ -1272,3 +1272,75 @@ - assert(pres_size != sizeof(int)); - } - } -+ -+asn_comp_rval_t * -+CHOICE_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) -+{ -+ asn_CHOICE_specifics_t *specs1 = (asn_CHOICE_specifics_t *)td1->specifics; -+ asn_CHOICE_specifics_t *specs2 = (asn_CHOICE_specifics_t *)td2->specifics; -+ int present1; -+ int present2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ /* -+ * Figure out which CHOICE element is encoded. -+ */ -+ present1 = _fetch_present_idx(sptr1, specs1->pres_offset,specs1->pres_size); -+ // same specs -+ present2 = _fetch_present_idx(sptr2, specs2->pres_offset,specs2->pres_size); -+ -+ if (td1->elements_count != td2->elements_count) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_CHOICE_NUM; -+ return res; -+ } -+ if (present1 != present2) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_CHOICE_PRESENT; -+ return res; -+ } -+ if(present1 > 0 && present1 <= td1->elements_count) { -+ asn_TYPE_member_t *elm1 = &td1->elements[present1-1]; -+ asn_TYPE_member_t *elm2 = &td2->elements[present2-1]; -+ const void *memb_ptr1; -+ const void *memb_ptr2; -+ -+ if((elm1->flags & ATF_POINTER) && (elm1->flags & ATF_POINTER)){ -+ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset); -+ if((!memb_ptr1) || (!memb_ptr2)) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_VALUE_NULL; -+ return res; -+ } -+ } else if (!(elm1->flags & ATF_POINTER) && !(elm1->flags & ATF_POINTER)){ -+ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset); -+ } else { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_CHOICE_MALFORMED; -+ return res; -+ } -+ return elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2); -+ } -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_CHOICE_MALFORMED; -+ return res; -+} ---- skeletons/constr_CHOICE.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/constr_CHOICE.h 2015-11-26 14:43:57.647616000 +0100 -@@ -39,7 +39,7 @@ - /* - * A set specialized functions dealing with the CHOICE type. - */ --asn_struct_free_f CHOICE_free; -+asn_struct_free_f CHOICE_free; - asn_struct_print_f CHOICE_print; - asn_constr_check_f CHOICE_constraint; - ber_type_decoder_f CHOICE_decode_ber; -@@ -50,7 +50,8 @@ - per_type_encoder_f CHOICE_encode_uper; - per_type_decoder_f CHOICE_decode_aper; - per_type_encoder_f CHOICE_encode_aper; --asn_outmost_tag_f CHOICE_outmost_tag; -+type_compare_f CHOICE_compare; -+asn_outmost_tag_f CHOICE_outmost_tag; - - #ifdef __cplusplus - } ---- skeletons/constr_SEQUENCE.c 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/constr_SEQUENCE.c 2015-12-08 10:39:52.442558000 +0100 -@@ -1761,3 +1761,65 @@ - - _ASN_ENCODED_OK(er); - } -+ -+asn_comp_rval_t * SEQUENCE_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ int edx; -+ asn_comp_rval_t *res = NULL; -+ asn_comp_rval_t *res2 = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (td1->elements_count != td2->elements_count) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS; -+ return res; -+ } -+ -+ for(edx = 0; edx < td1->elements_count; edx++) { -+ asn_TYPE_member_t *elm1 = &td1->elements[edx]; -+ asn_TYPE_member_t *elm2 = &td1->elements[edx]; -+ const void *memb_ptr1; -+ const void *memb_ptr2; -+ -+ if(elm1->flags & ATF_POINTER) { -+ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset); -+ if((!memb_ptr1) && (!memb_ptr2)) { -+ if(elm1->optional) continue; -+ } -+ if ((!memb_ptr1) || (!memb_ptr2)) { -+ res2 = calloc(1, sizeof(asn_comp_rval_t)); -+ res2->name = elm1->name; -+ res2->structure1 = memb_ptr1; -+ res2->structure2 = memb_ptr2; -+ res->err_code = COMPARE_ERR_CODE_VALUE_NULL; -+ if (NULL == res) { -+ res = res2; -+ } else { -+ res2->next = res; -+ res = res2; -+ } -+ res2 = NULL; -+ } -+ } else { -+ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset); -+ } -+ -+ /* Compare the member itself */ -+ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2); -+ if(res2) { -+ if (NULL == res) { -+ res = res2; -+ } else { -+ res2->next = res; -+ res = res2; -+ } -+ res2 = NULL; -+ } -+ } -+ return res; -+} ---- skeletons/constr_SEQUENCE.h 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/constr_SEQUENCE.h 2015-11-26 14:48:14.123616000 +0100 -@@ -54,6 +54,7 @@ - per_type_encoder_f SEQUENCE_encode_uper; - per_type_decoder_f SEQUENCE_decode_aper; - per_type_encoder_f SEQUENCE_encode_aper; -+type_compare_f SEQUENCE_compare; - - #ifdef __cplusplus - } ---- skeletons/constr_SEQUENCE_OF.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/constr_SEQUENCE_OF.h 2015-11-26 15:05:25.399615000 +0100 -@@ -22,7 +22,8 @@ - #define SEQUENCE_OF_decode_ber SET_OF_decode_ber - #define SEQUENCE_OF_decode_xer SET_OF_decode_xer - #define SEQUENCE_OF_decode_uper SET_OF_decode_uper --#define SEQUENCE_OF_decode_aper SET_OF_decode_aper -+#define SEQUENCE_OF_decode_aper SET_OF_decode_aper -+#define SEQUENCE_OF_compare SET_OF_compare - der_type_encoder_f SEQUENCE_OF_encode_der; - xer_type_encoder_f SEQUENCE_OF_encode_xer; - per_type_encoder_f SEQUENCE_OF_encode_uper; ---- skeletons/constr_SET.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/constr_SET.c 2015-12-08 10:40:35.066558000 +0100 -@@ -1108,7 +1108,7 @@ - } - } - --int -+long - SET_constraint(asn_TYPE_descriptor_t *td, const void *sptr, - asn_app_constraint_failed_f *ctfailcb, void *app_key) { - int edx; -@@ -1159,3 +1159,58 @@ - - return 0; - } -+ -+asn_comp_rval_t * -+SET_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) -+{ -+ int edx; -+ asn_comp_rval_t *res = NULL; -+ asn_comp_rval_t *res2 = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (td1->elements_count != td2->elements_count) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS; -+ return res; -+ } -+ -+ for(edx = 0; edx < td1->elements_count; edx++) { -+ asn_TYPE_member_t *elm1 = &td1->elements[edx]; -+ asn_TYPE_member_t *elm2 = &td2->elements[edx]; -+ const void *memb_ptr1; -+ const void *memb_ptr2; -+ -+ if(elm1->flags & ATF_POINTER) { -+ memb_ptr1 = *(const void * const *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = *(const void * const *)((const char *)sptr2 + elm2->memb_offset); -+ if(!memb_ptr1) { -+ if(elm1->optional) -+ continue; -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_SET_MALFORMED; -+ return res; -+ } -+ } else { -+ memb_ptr1 = (const void *)((const char *)sptr1 + elm1->memb_offset); -+ memb_ptr2 = (const void *)((const char *)sptr2 + elm2->memb_offset); -+ } -+ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2); -+ if(res2) { -+ if (NULL == res) { -+ res = res2; -+ } else { -+ res2->next = res; -+ res = res2; -+ } -+ res2 = NULL; -+ } -+ } -+ return res; -+} ---- skeletons/constr_SET.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/constr_SET.h 2015-11-26 14:49:09.243616000 +0100 -@@ -56,6 +56,7 @@ - per_type_decoder_f SET_decode_aper; - per_type_encoder_f SET_encode_uper; - per_type_encoder_f SET_encode_aper; -+type_compare_f SET_compare; - - /*********************** - * Some handy helpers. * ---- skeletons/constr_SET_OF.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/constr_SET_OF.c 2015-12-08 10:45:54.466557000 +0100 -@@ -1039,3 +1039,54 @@ - rv.consumed = 0; - return rv; - } -+ -+asn_comp_rval_t * -+SET_OF_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) -+{ -+ asn_TYPE_member_t *elm1 = td1->elements; -+ asn_TYPE_member_t *elm2 = td2->elements; -+ const asn_anonymous_set_ *list1 = _A_CSET_FROM_VOID(sptr1); -+ const asn_anonymous_set_ *list2 = _A_CSET_FROM_VOID(sptr2); -+ int i; -+ asn_comp_rval_t *res = NULL; -+ asn_comp_rval_t *res2 = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (td1->elements_count != td2->elements_count) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS; -+ return res; -+ } -+ -+ -+ if (list1->count != list2->count ) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_COLLECTION_NUM_ELEMENTS; -+ return res; -+ } -+ -+ for(i = 0; i < list1->count; i++) { -+ const void *memb_ptr1 = list1->array[i]; -+ const void *memb_ptr2 = list2->array[i]; -+ if ((!memb_ptr1) & (!memb_ptr2)) continue; -+ -+ res2 = elm1->type->compare(elm1->type, memb_ptr1, elm2->type, memb_ptr2); -+ if(res2) { -+ if (NULL == res) { -+ res = res2; -+ } else { -+ res2->next = res; -+ res = res2; -+ } -+ res2 = NULL; -+ } -+ } -+ return res; -+} ---- skeletons/constr_SET_OF.h 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/constr_SET_OF.h 2015-11-26 14:48:45.067616000 +0100 -@@ -36,6 +36,7 @@ - per_type_encoder_f SET_OF_encode_uper; - per_type_decoder_f SET_OF_decode_aper; - per_type_encoder_f SET_OF_encode_aper; -+type_compare_f SET_OF_compare; - - #ifdef __cplusplus - } ---- skeletons/constr_TYPE.h 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/constr_TYPE.h 2015-11-26 15:28:05.495613000 +0100 -@@ -41,7 +41,8 @@ - #include <xer_encoder.h> /* Encoder into XER (XML, text) */ - #include <per_decoder.h> /* Packet Encoding Rules decoder */ - #include <per_encoder.h> /* Packet Encoding Rules encoder */ --#include <constraints.h> /* Subtype constraints support */ -+#include <constraints.h> /* Subtype constraints support */ -+#include <compare.h> /* Comparison */ - - /* - * Free the structure according to its specification. -@@ -101,6 +102,7 @@ - per_type_encoder_f *uper_encoder; /* Unaligned PER encoder */ - per_type_decoder_f *aper_decoder; /* Aligned PER decoder */ - per_type_encoder_f *aper_encoder; /* Aligned PER encoder */ -+ type_compare_f *compare; /* Comparison between 2 instances */ - - /*********************************************************************** - * Internally useful members. Not to be used by applications directly. * ---- skeletons/ENUMERATED.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/ENUMERATED.c 2015-12-08 10:40:55.986558000 +0100 -@@ -27,7 +27,8 @@ - ENUMERATED_decode_uper, /* Unaligned PER decoder */ - ENUMERATED_encode_uper, /* Unaligned PER encoder */ - ENUMERATED_decode_aper, /* Aligned PER decoder */ -- ENUMERATED_encode_aper, /* Aligned PER encoder */ -+ ENUMERATED_encode_aper, /* Aligned PER encoder */ -+ ENUMERATED_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ENUMERATED_tags, - sizeof(asn_DEF_ENUMERATED_tags) / sizeof(asn_DEF_ENUMERATED_tags[0]), -@@ -103,3 +104,22 @@ - - return NativeEnumerated_encode_aper(td, constraints, &value, po); - } -+ -+asn_comp_rval_t * -+ENUMERATED_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const ENUMERATED_t *st1 = (const ENUMERATED_t *)sptr1; -+ const ENUMERATED_t *st2 = (const ENUMERATED_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (*st1 == *st2) return NULL; -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+} -+ ---- skeletons/ENUMERATED.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/ENUMERATED.h 2015-11-26 12:46:35.523623000 +0100 -@@ -19,6 +19,7 @@ - per_type_encoder_f ENUMERATED_encode_uper; - per_type_decoder_f ENUMERATED_decode_aper; - per_type_encoder_f ENUMERATED_encode_aper; -+type_compare_f ENUMERATED_compare; - - #ifdef __cplusplus - } ---- skeletons/file-dependencies 2015-12-08 14:39:12.678543554 +0100 -+++ skeletons/file-dependencies 2015-12-07 15:34:40.454629000 +0100 -@@ -39,12 +39,13 @@ - constr_SEQUENCE.h constr_SEQUENCE.c - constr_SEQUENCE_OF.h constr_SEQUENCE_OF.c asn_SEQUENCE_OF.h constr_SET_OF.h - constr_SET.h constr_SET.c --constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h -+constr_SET_OF.h constr_SET_OF.c asn_SET_OF.h compare.h - - COMMON-FILES: # THIS IS A SPECIAL SECTION --asn_application.h # Applications should include this file -+asn_application.h # Applications should include this file - asn_system.h # Platform-dependent types --asn_codecs.h # Return types of encoders and decoders -+asn_codecs.h # Return types of encoders and decoders -+asn_compare.h # Return type of compare - asn_internal.h # Internal stuff - OCTET_STRING.h OCTET_STRING.c # This one is used too widely - BIT_STRING.h BIT_STRING.c # This one is necessary for the above one ---- skeletons/GeneralizedTime.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/GeneralizedTime.c 2015-11-26 15:09:03.899615000 +0100 -@@ -168,7 +168,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GeneralizedTime_tags, - sizeof(asn_DEF_GeneralizedTime_tags) ---- skeletons/GeneralString.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/GeneralString.c 2015-11-26 14:50:11.843616000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GeneralString_tags, - sizeof(asn_DEF_GeneralString_tags) ---- skeletons/GraphicString.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/GraphicString.c 2015-11-26 15:33:33.255613000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_GraphicString_tags, - sizeof(asn_DEF_GraphicString_tags) ---- skeletons/IA5String.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/IA5String.c 2015-11-26 14:50:44.219616000 +0100 -@@ -31,6 +31,7 @@ - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, - OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_IA5String_tags, - sizeof(asn_DEF_IA5String_tags) ---- skeletons/INTEGER.c 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/INTEGER.c 2015-12-08 10:41:08.526558000 +0100 -@@ -35,6 +35,7 @@ - INTEGER_decode_aper, - INTEGER_encode_aper, - #endif /* ASN_DISABLE_PER_SUPPORT */ -+ INTEGER_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_INTEGER_tags, - sizeof(asn_DEF_INTEGER_tags) / sizeof(asn_DEF_INTEGER_tags[0]), -@@ -1501,3 +1502,30 @@ - } - - -+asn_comp_rval_t * -+INTEGER_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const INTEGER_t *st1 = (const INTEGER_t *)sptr1; -+ const INTEGER_t *st2 = (const INTEGER_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (st1->size != st2->size) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ if (0 != memcmp(st1->buf, st2->buf, st1->size)) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ return NULL; -+} ---- skeletons/INTEGER.h 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/INTEGER.h 2015-11-26 12:50:41.551623000 +0100 -@@ -43,6 +43,7 @@ - per_type_encoder_f INTEGER_encode_uper; - per_type_decoder_f INTEGER_decode_aper; - per_type_encoder_f INTEGER_encode_aper; -+type_compare_f INTEGER_compare; - - /*********************************** - * Some handy conversion routines. * ---- skeletons/ISO646String.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/ISO646String.c 2015-11-26 12:55:48.327623000 +0100 -@@ -30,7 +30,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ISO646String_tags, - sizeof(asn_DEF_ISO646String_tags) ---- skeletons/Makefile.am 2015-12-08 14:39:12.666543554 +0100 -+++ skeletons/Makefile.am 2015-12-07 15:54:00.150628000 +0100 -@@ -46,11 +46,11 @@ - asn_SET_OF.c asn_SET_OF.h \ - asn_application.h asn_codecs.h \ - asn_codecs_prim.c asn_codecs_prim.h \ -- asn_internal.h asn_system.h \ -+ asn_internal.h asn_system.h asn_compare.h \ - ber_decoder.c ber_decoder.h \ - ber_tlv_length.c ber_tlv_length.h \ -- ber_tlv_tag.c ber_tlv_tag.h \ -- constr_CHOICE.c constr_CHOICE.h \ -+ ber_tlv_tag.c ber_tlv_tag.h compare.h \ -+ comparison.h constr_CHOICE.c constr_CHOICE.h \ - constr_SEQUENCE.c constr_SEQUENCE.h \ - constr_SEQUENCE_OF.c constr_SEQUENCE_OF.h \ - constr_SET.c constr_SET.h \ ---- skeletons/NativeEnumerated.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/NativeEnumerated.c 2015-12-08 10:41:17.662558000 +0100 -@@ -31,7 +31,8 @@ - NativeEnumerated_decode_uper, - NativeEnumerated_encode_uper, - NativeEnumerated_decode_aper, -- NativeEnumerated_encode_aper, -+ NativeEnumerated_encode_aper, -+ NativeEnumerated_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeEnumerated_tags, - sizeof(asn_DEF_NativeEnumerated_tags) / sizeof(asn_DEF_NativeEnumerated_tags[0]), -@@ -335,3 +336,22 @@ - - _ASN_ENCODED_OK(er); - } -+ -+asn_comp_rval_t * -+NativeEnumerated_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const asn_INTEGER_enum_map_t *a = sptr1; -+ const asn_INTEGER_enum_map_t *b = sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if(a->nat_value == b->nat_value) -+ return NULL; -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+} ---- skeletons/NativeEnumerated.h 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/NativeEnumerated.h 2015-11-26 14:51:43.315616000 +0100 -@@ -26,6 +26,7 @@ - per_type_encoder_f NativeEnumerated_encode_uper; - per_type_decoder_f NativeEnumerated_decode_aper; - per_type_encoder_f NativeEnumerated_encode_aper; -+type_compare_f NativeEnumerated_compare; - - #ifdef __cplusplus - } ---- skeletons/NativeInteger.c 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/NativeInteger.c 2015-12-08 10:41:24.550558000 +0100 -@@ -32,7 +32,8 @@ - NativeInteger_decode_uper, /* Unaligned PER decoder */ - NativeInteger_encode_uper, /* Unaligned PER encoder */ - NativeInteger_decode_aper, /* Aligned PER decoder */ -- NativeInteger_encode_aper, /* Aligned PER encoder */ -+ NativeInteger_encode_aper, /* Aligned PER encoder */ -+ NativeInteger_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeInteger_tags, - sizeof(asn_DEF_NativeInteger_tags) / sizeof(asn_DEF_NativeInteger_tags[0]), -@@ -410,3 +411,21 @@ - } - } - -+ -+asn_comp_rval_t * -+NativeInteger_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const long *native1 = (const long *)sptr1; -+ const long *native2 = (const long *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (*native1 == *native2) return NULL; -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+} ---- skeletons/NativeInteger.h 2015-12-08 14:39:33.346543533 +0100 -+++ skeletons/NativeInteger.h 2015-11-26 14:52:13.931616000 +0100 -@@ -31,6 +31,7 @@ - per_type_encoder_f NativeInteger_encode_uper; - per_type_decoder_f NativeInteger_decode_aper; - per_type_encoder_f NativeInteger_encode_aper; -+type_compare_f NativeInteger_compare; - - #ifdef __cplusplus - } ---- skeletons/NativeReal.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/NativeReal.c 2015-12-08 10:41:32.666558000 +0100 -@@ -33,7 +33,8 @@ - NativeReal_decode_uper, - NativeReal_encode_uper, - NativeReal_decode_aper, -- NativeReal_encode_aper, -+ NativeReal_encode_aper, -+ NativeReal_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NativeReal_tags, - sizeof(asn_DEF_NativeReal_tags) / sizeof(asn_DEF_NativeReal_tags[0]), -@@ -405,3 +406,30 @@ - } - } - -+asn_comp_rval_t * -+NativeReal_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const REAL_t *st1 = (const REAL_t *)sptr1; -+ const REAL_t *st2 = (const REAL_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (st1->size != st2->size) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ if (0 != memcmp(st1->buf, st2->buf, st1->size)) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ return NULL; -+} ---- skeletons/NativeReal.h 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/NativeReal.h 2015-11-26 14:31:12.631617000 +0100 -@@ -29,6 +29,7 @@ - per_type_encoder_f NativeReal_encode_uper; - per_type_decoder_f NativeReal_decode_aper; - per_type_encoder_f NativeReal_encode_aper; -+type_compare_f NativeReal_compare; - - #ifdef __cplusplus - } ---- skeletons/NULL.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/NULL.c 2015-12-07 10:49:05.178647000 +0100 -@@ -26,7 +26,8 @@ - NULL_decode_uper, /* Unaligned PER decoder */ - NULL_encode_uper, /* Unaligned PER encoder */ - NULL_decode_aper, /* Aligned PER decoder */ -- NULL_encode_aper, /* Aligned PER encoder */ -+ NULL_encode_aper, /* Aligned PER encoder */ -+ NULL_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NULL_tags, - sizeof(asn_DEF_NULL_tags) / sizeof(asn_DEF_NULL_tags[0]), -@@ -192,3 +193,10 @@ - er.encoded = 0; - _ASN_ENCODED_OK(er); - } -+ -+asn_comp_rval_t * -+NULL_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ -+ return NULL; -+} ---- skeletons/NULL.h 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/NULL.h 2015-11-26 14:53:03.875616000 +0100 -@@ -27,6 +27,7 @@ - per_type_encoder_f NULL_encode_uper; - per_type_decoder_f NULL_decode_aper; - per_type_encoder_f NULL_encode_aper; -+type_compare_f NULL_compare; - - #ifdef __cplusplus - } ---- skeletons/NumericString.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/NumericString.c 2015-11-26 14:40:39.407616000 +0100 -@@ -50,7 +50,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_NumericString_tags, - sizeof(asn_DEF_NumericString_tags) ---- skeletons/ObjectDescriptor.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/ObjectDescriptor.c 2015-11-26 14:55:46.227615000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_ObjectDescriptor_tags, - sizeof(asn_DEF_ObjectDescriptor_tags) ---- skeletons/OBJECT_IDENTIFIER.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/OBJECT_IDENTIFIER.c 2015-11-26 14:55:13.311615000 +0100 -@@ -28,7 +28,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_OBJECT_IDENTIFIER_tags, - sizeof(asn_DEF_OBJECT_IDENTIFIER_tags) ---- skeletons/OCTET_STRING.c 2015-12-08 14:39:44.554543521 +0100 -+++ skeletons/OCTET_STRING.c 2015-12-08 10:41:42.838558000 +0100 -@@ -37,7 +37,8 @@ - OCTET_STRING_decode_uper, /* Unaligned PER decoder */ - OCTET_STRING_encode_uper, /* Unaligned PER encoder */ - OCTET_STRING_decode_aper, /* Aligned PER decoder */ -- OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_encode_aper, /* Aligned PER encoder */ -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_OCTET_STRING_tags, - sizeof(asn_DEF_OCTET_STRING_tags) -@@ -2160,3 +2161,30 @@ - return st; - } - -+asn_comp_rval_t * -+OCTET_STRING_compare(asn_TYPE_descriptor_t *td1, -+ const void *sptr1, asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const OCTET_STRING_t *st1 = (const OCTET_STRING_t *)sptr1; -+ const OCTET_STRING_t *st2 = (const OCTET_STRING_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (st1->size != st2->size) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ if (0 != memcmp(st1->buf, st2->buf, st1->size)) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ return NULL; -+} ---- skeletons/OCTET_STRING.h 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/OCTET_STRING.h 2015-11-26 12:56:15.259623000 +0100 -@@ -34,6 +34,7 @@ - per_type_encoder_f OCTET_STRING_encode_uper; - per_type_decoder_f OCTET_STRING_decode_aper; - per_type_encoder_f OCTET_STRING_encode_aper; -+type_compare_f OCTET_STRING_compare; - - /****************************** - * Handy conversion routines. * ---- skeletons/PrintableString.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/PrintableString.c 2015-11-26 14:56:09.787615000 +0100 -@@ -60,7 +60,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_PrintableString_tags, - sizeof(asn_DEF_PrintableString_tags) ---- skeletons/REAL.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/REAL.c 2015-12-08 10:41:55.178558000 +0100 -@@ -46,7 +46,8 @@ - REAL_decode_uper, - REAL_encode_uper, - REAL_decode_aper, -- REAL_encode_aper, -+ REAL_encode_aper, -+ REAL_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_REAL_tags, - sizeof(asn_DEF_REAL_tags) / sizeof(asn_DEF_REAL_tags[0]), -@@ -741,3 +742,32 @@ - - return 0; - } -+ -+ -+asn_comp_rval_t * -+REAL_compare(asn_TYPE_descriptor_t *td1, const void *sptr1, -+ asn_TYPE_descriptor_t *td2, const void *sptr2) { -+ const REAL_t *st1 = (const REAL_t *)sptr1; -+ const REAL_t *st2 = (const REAL_t *)sptr2; -+ asn_comp_rval_t *res = NULL; -+ -+ COMPARE_CHECK_ARGS(td1, td2, sptr1, sptr2, res) -+ -+ if (st1->size != st2->size) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ if (0 != memcmp(st1->buf, st2->buf, st1->size)) { -+ res = calloc(1, sizeof(asn_comp_rval_t)); -+ res->name = td1->name; -+ res->structure1 = sptr1; -+ res->structure2 = sptr2; -+ res->err_code = COMPARE_ERR_CODE_NO_MATCH; -+ return res; -+ } -+ return NULL; -+} ---- skeletons/REAL.h 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/REAL.h 2015-11-26 13:00:46.183623000 +0100 -@@ -23,6 +23,7 @@ - per_type_encoder_f REAL_encode_uper; - per_type_decoder_f REAL_decode_aper; - per_type_encoder_f REAL_encode_aper; -+type_compare_f REAL_compare; - - /*********************************** - * Some handy conversion routines. * ---- skeletons/RELATIVE-OID.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/RELATIVE-OID.c 2015-11-26 14:56:31.703615000 +0100 -@@ -29,7 +29,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_RELATIVE_OID_tags, - sizeof(asn_DEF_RELATIVE_OID_tags) ---- skeletons/T61String.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/T61String.c 2015-11-26 14:57:07.235615000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_T61String_tags, - sizeof(asn_DEF_T61String_tags) ---- skeletons/TeletexString.c 2015-12-08 14:39:33.338543533 +0100 -+++ skeletons/TeletexString.c 2015-11-26 14:57:17.643615000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_TeletexString_tags, - sizeof(asn_DEF_TeletexString_tags) ---- skeletons/UniversalString.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/UniversalString.c 2015-11-26 14:57:29.015615000 +0100 -@@ -36,7 +36,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UniversalString_tags, - sizeof(asn_DEF_UniversalString_tags) ---- skeletons/UTCTime.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/UTCTime.c 2015-11-26 14:57:44.127615000 +0100 -@@ -41,7 +41,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UTCTime_tags, - sizeof(asn_DEF_UTCTime_tags) ---- skeletons/UTF8String.c 2015-12-08 14:39:33.314543533 +0100 -+++ skeletons/UTF8String.c 2015-11-26 14:06:54.563618000 +0100 -@@ -27,6 +27,7 @@ - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, - OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_UTF8String_tags, - sizeof(asn_DEF_UTF8String_tags) ---- skeletons/VideotexString.c 2015-12-08 14:39:33.342543533 +0100 -+++ skeletons/VideotexString.c 2015-11-26 14:07:06.139618000 +0100 -@@ -25,7 +25,8 @@ - OCTET_STRING_decode_uper, /* Implemented in terms of OCTET STRING */ - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_VideotexString_tags, - sizeof(asn_DEF_VideotexString_tags) ---- skeletons/VisibleString.c 2015-12-08 14:39:33.350543533 +0100 -+++ skeletons/VisibleString.c 2015-11-26 14:07:15.283618000 +0100 -@@ -30,7 +30,8 @@ - OCTET_STRING_decode_uper, - OCTET_STRING_encode_uper, - OCTET_STRING_decode_aper, -- OCTET_STRING_encode_aper, -+ OCTET_STRING_encode_aper, -+ OCTET_STRING_compare, - 0, /* Use generic outmost tag fetcher */ - asn_DEF_VisibleString_tags, - sizeof(asn_DEF_VisibleString_tags) diff --git a/openair3/S1AP/s1ap_eNB_nas_procedures.c b/openair3/S1AP/s1ap_eNB_nas_procedures.c index dbe0fef09116f7f61408fc8eab433c44efb15ddf..43f5ad49e53f40edd3d5dd72836ed0df9bfc27ff 100644 --- a/openair3/S1AP/s1ap_eNB_nas_procedures.c +++ b/openair3/S1AP/s1ap_eNB_nas_procedures.c @@ -668,6 +668,8 @@ int s1ap_eNB_ue_capabilities(instance_t instance, return -1; } + free(ue_cap_info_ind_p->ue_radio_cap.buffer); + MSC_LOG_TX_MESSAGE( MSC_S1AP_ENB, MSC_S1AP_MME, diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp index b8e9b21866b4a65c5a54788f23e1a202ee75a4dd..f2cc289ed784d548d1595d5c0e533b87db93561b 100644 --- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp +++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp @@ -45,7 +45,7 @@ #include <complex> #include <fstream> #include <cmath> - +#include <time.h> #include "common_lib.h" #ifdef __SSE4_1__ # include <smmintrin.h> @@ -172,7 +172,13 @@ static void trx_usrp_end(openair0_device *device) */ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, void **buff, int nsamps, int cc, int flags) { - int ret; + static long long int loop=0; + static long time_min=0, time_max=0, time_avg=0; + struct timespec tp_start, tp_end; + long time_diff; + clock_gettime(CLOCK_MONOTONIC_RAW, &tp_start); + + int ret=0, ret_i=0; usrp_state_t *s = (usrp_state_t*)device->priv; s->tx_md.time_spec = uhd::time_spec_t::from_ticks(timestamp, s->sample_rate); @@ -196,7 +202,21 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, if (ret != nsamps) { printf("[xmit] tx samples %d != %d\n",ret,nsamps); } - + + clock_gettime(CLOCK_MONOTONIC_RAW, &tp_end); + time_diff = (tp_end.tv_sec - tp_start.tv_sec) *1E09 + (tp_end.tv_nsec - tp_start.tv_nsec); + if (time_min==0 ||loop==1 || time_min > time_diff) + time_min=time_diff; + if (time_max==0 ||loop==1 || time_max < time_diff) + time_max=time_diff; + if (time_avg ==0 ||loop==1) + time_avg= time_diff; + else + time_avg=(time_diff+time_avg) /2.0; + + if ( loop%10000 ==0) + printf("\n usrp_write: min(ns)=%d, max(ns)=%d, avg(ns)=%d", (int)time_min, (int)time_max,(int)time_avg); + loop++; return ret; } @@ -213,6 +233,11 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp, */ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp, void **buff, int nsamps, int cc) { + static long long int loop=0; + static long time_min=0, time_max=0, time_avg=0; + struct timespec tp_start, tp_end; + long time_diff; + clock_gettime(CLOCK_MONOTONIC_RAW, &tp_start); usrp_state_t *s = (usrp_state_t*)device->priv; int samples_received=0,i,j; int nsamps2; // aligned to upper 32 or 16 byte boundary @@ -293,7 +318,20 @@ static int trx_usrp_read(openair0_device *device, openair0_timestamp *ptimestamp s->rx_timestamp = s->rx_md.time_spec.to_ticks(s->sample_rate); *ptimestamp = s->rx_timestamp; - return samples_received; + clock_gettime(CLOCK_MONOTONIC_RAW, &tp_end); + time_diff = (tp_end.tv_sec - tp_start.tv_sec) *1E09 + (tp_end.tv_nsec - tp_start.tv_nsec); + if (time_min==0 ||loop==1 || time_min > time_diff) + time_min=time_diff; + if (time_max==0 || loop==1|| time_max < time_diff) + time_max=time_diff; + if (time_avg ==0 ||loop==1) + time_avg= time_diff; + else + time_avg=(time_diff+time_avg) /2.0; + if ( loop % 10000==0) + printf("\n usrp_read: min(ns)=%d, max(ns)=%d, avg(ns)=%d", (int)time_min, (int)time_max,(int)time_avg); + loop++; + return samples_received; } /*! \brief Get current timestamp of USRP @@ -500,6 +538,7 @@ extern "C" { // Initialize USRP device + device->openair0_cfg = openair0_cfg; std::string args = "type=b200"; @@ -523,6 +562,8 @@ extern "C" { // workaround for an api problem, master clock has to be set with the constructor not via set_master_clock_rate args += boost::str(boost::format(",master_clock_rate=%f") % usrp_master_clock); + args += ",num_send_frames=256,num_recv_frames=256, send_frame_size=4096, recv_frame_size=4096"; + uhd::device_addrs_t device_adds = uhd::device::find(args); if(device_adds.size() == 0) @@ -554,25 +595,25 @@ extern "C" { switch ((int)openair0_cfg[0].sample_rate) { case 30720000: // from usrp_time_offset - openair0_cfg[0].samples_per_packet = 2048; + //openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 15; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; break; case 15360000: - openair0_cfg[0].samples_per_packet = 2048; + //openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 45; openair0_cfg[0].tx_bw = 10e6; openair0_cfg[0].rx_bw = 10e6; break; case 7680000: - openair0_cfg[0].samples_per_packet = 1024; + //openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 50; openair0_cfg[0].tx_bw = 5e6; openair0_cfg[0].rx_bw = 5e6; break; case 1920000: - openair0_cfg[0].samples_per_packet = 256; + //openair0_cfg[0].samples_per_packet = 2048; openair0_cfg[0].tx_sample_advance = 50; openair0_cfg[0].tx_bw = 1.25e6; openair0_cfg[0].rx_bw = 1.25e6; @@ -585,7 +626,7 @@ extern "C" { } else { printf("Found USRP B200"); - args += ",num_recv_frames=256" ; + args += ",num_send_frames=256,num_recv_frames=256, send_frame_size=4096, recv_frame_size=4096" ; s->usrp = uhd::usrp::multi_usrp::make(args); // s->usrp->set_rx_subdev_spec(rx_subdev); @@ -611,30 +652,35 @@ extern "C" { switch ((int)openair0_cfg[0].sample_rate) { case 30720000: s->usrp->set_master_clock_rate(30.72e6); + //openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 115; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; break; case 23040000: s->usrp->set_master_clock_rate(23.04e6); //to be checked + //openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 113; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; break; case 15360000: s->usrp->set_master_clock_rate(30.72e06); + //openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 103; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; break; case 7680000: s->usrp->set_master_clock_rate(30.72e6); + //openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 80; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; break; case 1920000: s->usrp->set_master_clock_rate(30.72e6); + //openair0_cfg[0].samples_per_packet = 1024; openair0_cfg[0].tx_sample_advance = 40; openair0_cfg[0].tx_bw = 20e6; openair0_cfg[0].rx_bw = 20e6; @@ -758,7 +804,8 @@ extern "C" { device->trx_stop_func = trx_usrp_stop; device->trx_set_freq_func = trx_usrp_set_freq; device->trx_set_gains_func = trx_usrp_set_gains; - + device->openair0_cfg = openair0_cfg; + s->sample_rate = openair0_cfg[0].sample_rate; // TODO: // init tx_forward_nsamps based usrp_time_offset ex diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c index cddef6ccc8525070b58193c9cf78ec8de9274b9d..a7a0314bdc3c3fc52412d01a1f87fea9e2fbb783 100644 --- a/targets/RT/USER/lte-enb.c +++ b/targets/RT/USER/lte-enb.c @@ -188,7 +188,7 @@ static inline void thread_top_init(char *thread_name, if (sched_setattr(0, &attr, flags) < 0 ) { perror("[SCHED] eNB tx thread: sched_setattr failed\n"); - return &eNB_thread_rxtx_status; + exit_fun("Error setting deadline scheduler"); } LOG_I( HW, "[SCHED] eNB %s deadline thread (TID %ld) started on CPU %d\n", gettid(), thread_name,sched_getcpu() ); diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c index f3e51890f16f29eb79b9260ef206e6f915237b22..b9d6907c8e212fb9acf0ccf0fc4db47cf997b168 100644 --- a/targets/RT/USER/lte-softmodem.c +++ b/targets/RT/USER/lte-softmodem.c @@ -382,7 +382,8 @@ void help (void) { printf(" --ue-txgain set UE TX gain\n"); printf(" --ue-scan_carrier set UE to scan around carrier\n"); printf(" --loop-memory get softmodem (UE) to loop through memory instead of acquiring from HW\n"); - printf(" --mmapped-dma sets flag for improved EXMIMO UE performance\n"); + printf(" --mmapped-dma sets flag for improved EXMIMO UE performance\n"); + printf(" --single-thread runs lte-softmodem in only one thread\n"); printf(" -C Set the downlink frequency for all component carriers\n"); printf(" -d Enable soft scope and L1 and L2 stats (Xforms)\n"); printf(" -F Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n");