diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d0f7aaf76f..2a59202686 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 553309f237..a83bce5e8b 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 cf1e28dd05..245b235ebf 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 b25bc08427..eed2fffb77 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 11a0c172db..696b732fb4 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -1,18 +1,18 @@
-mozart tique stevens amerique
+mozart hutch starsky stevens amerique calisson nano
/mnt/sradio/TEST_RESULTS/
https://gitlab.eurecom.fr/oai/openairinterface5g.git
https://gitlab.eurecom.fr/oai/openair-cn.git
develop
develop
- 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
+ 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
sudo -S -E /opt/ltebox/tools/stop_ltebox
-$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
+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
36000
- 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
+ 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
3
- mozart tique stevens amerique
+ mozart hutch starsky stevens amerique calisson
compilation
Build oaisim.Rel8
@@ -381,6 +381,85 @@
1
+
+ compilation
+ Build RRU (NGFI) for USRP (Rel 10) w/ ETHERNET transport
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w USRP -t ETHERNET -c
+ $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
+
+
+
+
+
+ RRU.USRP.Rel10
+ 1
+
+
+
+ compilation
+ Build RRU (NGFI) for EXMIMO (Rel 10) w/ ETHERNET transport
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w EXMIMO -t ETHERNET -c
+ $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
+
+
+
+
+
+ RRU.EXMIMO.Rel10
+ 1
+
+
+
+ compilation
+ Build RRU (NGFI) for BLADERF (Rel 10) w/ ETHERNET transport
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w BLADERF -t ETHERNET -c
+ $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
+
+
+
+
+
+ RRU.BLADERF.Rel10
+ 1
+
+
+
+ compilation
+ Build RRU (NGFI) for LMSSDR (Rel 10) w/ ETHERNET transport
+
+ $OPENAIR_DIR/cmake_targets/build_oai
+ --eNB -w LMSSDR -t ETHERNET -c
+ $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
+ $OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
+
+
+
+
+
+ RRU.LMSSDR.Rel10
+ 1
+
+
execution
Run OAISIM Rel10 TDD, 1 eNB + 1 UE (5 MHz/10MHz/20MHz), (TM 1,2) and search for errors, segmentation fault or exit
@@ -929,7 +1008,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1004,7 +1083,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1078,7 +1157,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1153,7 +1232,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1226,7 +1305,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1299,7 +1378,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1375,7 +1454,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1450,7 +1529,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1523,7 +1602,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1597,7 +1676,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1671,7 +1750,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1745,7 +1824,7 @@
lte-softmodem
- calisson
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1819,7 +1898,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1894,7 +1973,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -1968,7 +2047,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -2043,7 +2122,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -2116,7 +2195,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -2189,7 +2268,7 @@
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -3314,7 +3393,6 @@ c
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
-c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash ; sudo -E ifconfig eth0 add 192.172.0.1
sleep 10;$OPENAIRCN_DIR/TEST/autotests/tools/run_epc
@@ -3358,7 +3436,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3430,7 +3508,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3502,7 +3580,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3574,7 +3652,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3645,7 +3723,7 @@ c
--eNB -w USRP -x -c
$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
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3717,7 +3795,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3788,7 +3866,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3860,7 +3938,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -3932,7 +4010,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -4004,7 +4082,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -4075,7 +4153,7 @@ c
--eNB -w USRP -x -c
$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
sudo -E -S /usr/local/bin/niusrprio_pcie start ; dmesg|tail
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -4147,7 +4225,7 @@ c
--eNB -w USRP -x -c
$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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -4220,7 +4298,7 @@ c
--eNB -w USRP -x -c
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
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpx310.conf
@@ -7015,7 +7093,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7090,7 +7168,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7164,7 +7242,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -E
@@ -7239,7 +7317,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7313,7 +7391,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7387,7 +7465,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf -E
@@ -7462,7 +7540,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7537,7 +7615,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7611,7 +7689,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7686,7 +7764,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
-O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7760,7 +7838,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7834,7 +7912,7 @@ c
lte-softmodem
- tique
+ hutch
stevens
amerique
390
@@ -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
$OPENAIR_DIR/cmake_targets/build_oai
--eNB -w USRP -x -c
$OPENAIR_DIR/cmake_targets/autotests/tools/free_mem.bash
- $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
- -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
+ $OPENAIR_DIR/cmake_targets/autotests/tools/run_gdb $OPENAIR_DIR/cmake_targets/lte_build_oai/build/lte-softmodem
+ -E -O $OPENAIR_DIR/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.usrpb210.conf
@@ -7909,7 +7987,3 @@ c
-
-
-
-
diff --git a/cmake_targets/autotests/tools/git-retry.sh b/cmake_targets/autotests/tools/git-retry.sh
new file mode 100755
index 0000000000..b897ba379d
--- /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 772ba11f58..c5c26e3752 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 0000000000..a12d6ce21d
--- /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 7ff2673b6b..967c92f557 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 514d7748ac..4ebe2be1b0 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 8f7255332a..9f325c7243 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 a52d9a3667..f5724e6ff8 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 ee289aae59..71f1d25f92 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 0000000000..886638f5ef
--- /dev/null
+++ b/common/utils/T/tracer/macpdu2wireshark.c
@@ -0,0 +1,260 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#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 this option is mandatory\n"
+" -in read events from this dump file\n"
+" -ip send packets to this IP address (default %s)\n"
+" -p 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 0000000000..039b9dc3c4
--- /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
+ * 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 e673a33371..64c5bc12b5 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 18dc516285..0000000000
--- 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 1414c4e1b3..cdb2ddc0ca 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;
+ /* 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)
- && (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);
- }
+ 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 fe8dc8b350..807ee46724 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 b3a5b8d39f..0000000000
--- 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 */
-+ 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 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("", 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 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 /* For va_start */
- #include /* for offsetof and ptrdiff_t */
-
-+#if HAVE_STDINT_H
-+# include
-+# include
-+#endif
-+
- #ifdef _WIN32
-
- #include
-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 80835b1b86..0000000000
--- 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 d5a936c101..0000000000
--- 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
-+
-+#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 /* Encoder into XER (XML, text) */
- #include /* Packet Encoding Rules decoder */
- #include /* Packet Encoding Rules encoder */
--#include /* Subtype constraints support */
-+#include /* Subtype constraints support */
-+#include /* 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 dbe0fef091..43f5ad49e5 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 b8e9b21866..f2cc289ed7 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -45,7 +45,7 @@
#include
#include
#include
-
+#include
#include "common_lib.h"
#ifdef __SSE4_1__
# include
@@ -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 cddef6ccc8..a7a0314bdc 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 f3e51890f1..b9d6907c8e 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");