diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 99c555dcf0..3169c6cc98 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -181,7 +181,6 @@ set(GIT_BRANCH "UNKNOWN")
set(GIT_COMMIT_HASH "UNKNOWN")
set(GIT_COMMIT_DATE "UNKNOWN")
-
find_package(Git)
if(GIT_FOUND)
message("git found: ${GIT_EXECUTABLE}")
@@ -875,7 +874,7 @@ set(UTIL_SRC
${OPENAIR2_DIR}/UTIL/OMG/job.c
${OPENAIR2_DIR}/UTIL/OMG/mobility_parser.c
${OPENAIR2_DIR}/UTIL/OMG/omg.c
- ${OPENAIR2_DIR}/UTIL/OMG/omg_hashtable.c
+ #${OPENAIR2_DIR}/UTIL/OMG/omg_hashtable.c
${OPENAIR2_DIR}/UTIL/OMG/rwalk.c
${OPENAIR2_DIR}/UTIL/OMG/rwp.c
${OPENAIR2_DIR}/UTIL/OMG/static.c
@@ -1532,11 +1531,25 @@ endif()
pkg_search_module(NETTLE nettle)
if(NOT ${NETTLE_FOUND})
- message("PACKAGE nettle not found: some targets will fail")
+ message( FATAL_ERROR "PACKAGE nettle not found: some targets will fail. Run build_oai -I again!")
else()
include_directories(${NETTLE_INCLUDE_DIRS})
endif()
+message ("NETTLE VERSION_INSTALLED = ${NETTLE_VERSION}")
+
+string(REGEX REPLACE "([0-9]+).*" "\\1" NETTLE_VERSION_MAJOR ${NETTLE_VERSION})
+string(REGEX REPLACE "[0-9]+\\.([0-9]+).*" "\\1" NETTLE_VERSION_MINOR ${NETTLE_VERSION})
+message ("NETTLE_VERSION_MAJOR = ${NETTLE_VERSION_MAJOR}")
+message ("NETTLE_VERSION_MINOR = ${NETTLE_VERSION_MINOR}")
+
+if ("${NETTLE_VERSION_MAJOR}" STREQUAL "" OR "${NETTLE_VERSION_MINOR}" STREQUAL "")
+ message( FATAL_ERROR "The nettle version not detected properly. Try to run build_oai -I again" )
+endif()
+
+add_definitions("-DNETTLE_VERSION_MAJOR=${NETTLE_VERSION_MAJOR}")
+add_definitions("-DNETTLE_VERSION_MINOR=${NETTLE_VERSION_MINOR}")
+
pkg_search_module(XPM xpm)
if(NOT ${XPM_FOUND})
message("PACKAGE xpm not found: some targets will fail")
diff --git a/cmake_targets/at_commands/CMakeLists.txt b/cmake_targets/at_commands/CMakeLists.txt
index 258e5b1823..ca9a305463 100755
--- a/cmake_targets/at_commands/CMakeLists.txt
+++ b/cmake_targets/at_commands/CMakeLists.txt
@@ -88,6 +88,24 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.2 -std=gnu99 -Wall -Wstrict-prototype
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -DMALLOC_CHECK_=3")
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -ggdb -DMALLOC_CHECK_=3 -O2")
+#This is to detect nettle version changes between Ubuntu 14.04/16.04
+set ( nettle_cmd "nettle-hash" )
+set ( nettle_arg "-V" )
+execute_process(COMMAND ${nettle_cmd} ${nettle_arg} RESULT_VARIABLE rv OUTPUT_VARIABLE ov ERROR_VARIABLE ev)
+
+string(REGEX MATCH "[+-]?[0-9]+([.][0-9]+)?" nv ${ov})
+
+message("NETTLE_VERSION = ${nv}")
+
+# we need to remove decimal as floating point arithematic does not work properly with C preprocessor
+STRING(REGEX REPLACE "[.]" "" nv ${nv})
+
+if ("${nv}" STREQUAL "")
+ message( FATAL_ERROR "The nettle version not detected properly. Try to run build_oai -I again" )
+endif()
+
+set (NETTLE_VERSION "${nv}")
+add_definitions("-DNETTLE_VERSION=${NETTLE_VERSION}")
include(FindPkgConfig)
diff --git a/cmake_targets/autotests/README.txt b/cmake_targets/autotests/README.txt
index f4e50a7e51..2a1b57c0b2 100644
--- a/cmake_targets/autotests/README.txt
+++ b/cmake_targets/autotests/README.txt
@@ -1,5 +1,4 @@
OAI Test PLAN
-#UNDER CONSTRUCTION. Not correct at the moment
Obj.# Case# Test# Description
diff --git a/cmake_targets/autotests/test_case_list.xml b/cmake_targets/autotests/test_case_list.xml
index 348d8c74ad..16f1bbdac5 100644
--- a/cmake_targets/autotests/test_case_list.xml
+++ b/cmake_targets/autotests/test_case_list.xml
@@ -7,7 +7,7 @@
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 starthss start_ltebox stop_ltebox configure_cots_sony_experia_m4_ue configure_cots_huaweiE398_ue configure_cots_bandrich_ue
+ oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim 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
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
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index d5d04fe09d..b77a9baa56 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -552,6 +552,7 @@ function main() {
compilations \
$lte_build_dir updatefw \
updatefw $dbin/updatefw
+ echo_info "Compiling oarf tools. The logfile for compilation is here: $dlog/oarf.txt"
make -C $OPENAIR_DIR/cmake_targets/$lte_build_dir/build oarf > $dlog/oarf.txt 2>&1
cp $OPENAIR_DIR/cmake_targets/$lte_build_dir/build/*.oct $dbin
if [ -s $dbin/oarf_config_exmimo.oct ] ; then
diff --git a/cmake_targets/tools/build_helper b/cmake_targets/tools/build_helper
index 415d4ab875..ac9739e589 100755
--- a/cmake_targets/tools/build_helper
+++ b/cmake_targets/tools/build_helper
@@ -163,57 +163,6 @@ compilations() {
# External packages installers
############################################
-install_nettle_from_source() {
- nettle_install_log=$OPENAIR_DIR/cmake_targets/log/nettle_install_log.txt
- echo_info "\nInstalling Nettle. The log file for nettle installation is here: $nettle_install_log "
- (
- cd /tmp
- echo "Downloading nettle archive"
- $SUDO rm -rf /tmp/nettle-2.5.tar.gz* /tmp/nettle-2.5
- wget http://ftp.nluug.nl/gnu/nettle/nettle-2.5.tar.gz
- if [ $? -ne 0 ]; then
- wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz
- fi
- if [ ! -f nettle-2.5.tar.gz ]; then
- echo_error "Could not download nettle source files"
- cd -
- return
- fi
- tar -xzf nettle-2.5.tar.gz
- cd nettle-2.5/
- ./configure --disable-openssl --enable-shared --prefix=/usr
- echo "Compiling nettle"
- make -j`nproc`
- make check
- $SUDO make install
- ) >& $nettle_install_log
-}
-
-install_gnutls_from_source(){
- gnutls_install_log=$OPENAIR_DIR/cmake_targets/log/gnutls_install_log.txt
- echo_info "\nInstalling Gnutls. The log file for Gnutls installation is here: $gnutls_install_log "
- (
- cd /tmp
- echo "Downloading gnutls archive"
- $SUDO rm -rf /tmp/gnutls-3.1.23.tar.xz* /tmp/gnutls-3.1.23
- wget http://mirrors.dotsrc.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz || \
- wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz
- if [ ! -f gnutls-3.1.23.tar.xz ]; then
- echo_error "Could not download gnutls source files"
- cd -
- return
- fi
- tar -xJf gnutls-3.1.23.tar.xz
- cd gnutls-3.1.23/
- ./configure --prefix=/usr
- echo "Compiling gnutls"
- make -j`nproc`
- $SUDO make install
- )>& $gnutls_install_log
-}
-
-
-
check_install_usrp_uhd_driver(){
#first we remove old installation
$SUDO apt-get remove -y uhd || true
@@ -377,22 +326,71 @@ 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
- install_gnutls_from_source
+ #Remove old gnutls/nettle installation that was done from sources
+ remove_nettle_from_source
+
+ $SUDO apt-get install -y nettle-dev nettle-bin
+ remove_gnutls_from_source
+ $SUDO apt-get install -y libgnutls-dev
+
install_asn1c_from_source
}
+### Remove Nettle installation which was done from sources
+remove_nettle_from_source() {
+ nettle_uninstall_log=$OPENAIR_DIR/cmake_targets/log/nettle_uninstall_log.txt
+ echo_info "\nUn-Installing Nettle from sources. The log file for nettle un-installation is here: $nettle_uninstall_log "
+ (
+ $SUDO apt-get remove -y nettle-dev nettle-bin
+ cd /tmp
+ echo "Downloading nettle archive"
+ $SUDO rm -rf /tmp/nettle-2.5.tar.gz* /tmp/nettle-2.5
+ wget https://ftp.gnu.org/gnu/nettle/nettle-2.5.tar.gz
+ if [ $? -ne 0 ]; then
+ wget ftp://ftp.lysator.liu.se/pub/security/lsh/nettle-2.5.tar.gz
+ fi
+ if [ ! -f nettle-2.5.tar.gz ]; then
+ echo_error "Could not download nettle source files"
+ cd -
+ return
+ fi
+ tar -xzf nettle-2.5.tar.gz
+ cd nettle-2.5/
+ ./configure --disable-openssl --enable-shared --prefix=/usr
+ $SUDO make uninstall || true
+ ) >& $nettle_uninstall_log
+}
+
+### Remove Gnutls from source
+remove_gnutls_from_source(){
+ gnutls_uninstall_log=$OPENAIR_DIR/cmake_targets/log/gnutls_uninstall_log.txt
+ echo_info "\nUn-Installing Gnutls. The log file for Gnutls un-installation is here: $gnutls_uninstall_log "
+ (
+ $SUDO apt-get remove -y libgnutls-dev
+ cd /tmp
+ echo "Downloading gnutls archive"
+ $SUDO rm -rf /tmp/gnutls-3.1.23.tar.xz* /tmp/gnutls-3.1.23
+ wget http://mirrors.dotsrc.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz || \
+ wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.1/gnutls-3.1.23.tar.xz
+ if [ ! -f gnutls-3.1.23.tar.xz ]; then
+ echo_error "Could not download gnutls source files"
+ cd -
+ return
+ fi
+ tar -xJf gnutls-3.1.23.tar.xz
+ cd gnutls-3.1.23/
+ ./configure --prefix=/usr
+ $SUDO make uninstall || true
+ )>& $gnutls_uninstall_log
+}
+
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
- git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
+ GIT_SSL_NO_VERIFY=true git clone https://gitlab.eurecom.fr/oai/asn1c.git /tmp/asn1c
cd /tmp/asn1c
./configure
make -j`nproc`
diff --git a/cmake_targets/tools/init_exmimo2 b/cmake_targets/tools/init_exmimo2
index 06c40616ac..1ed65cf0e0 100755
--- a/cmake_targets/tools/init_exmimo2
+++ b/cmake_targets/tools/init_exmimo2
@@ -64,15 +64,7 @@ if [ ! -e /dev/openair0 ]; then
sudo chmod a+rw /dev/openair0
fi
-DEVICE=`echo $PCI | awk -F\" '{print $(NF-1)}' | awk '{print $2}'`
-DEVICE_SWID=${DEVICE:2:2}
-if [ $DEVICE_SWID == '0a' ]; then
- echo "Using firware version 10"
$OPENAIR_DIR/targets/bin/updatefw -s 0x43fffff0 -b -f $OPENAIR_TARGETS/ARCH/EXMIMO/USERSPACE/OAI_FW_INIT/sdr_expressmimo2_v10
-else
- echo 'No corresponding firmware found'
- return
-fi
}
main "$@"
diff --git a/common/utils/itti/assertions.h b/common/utils/itti/assertions.h
index 77bd9e4bcf..df8251d105 100644
--- a/common/utils/itti/assertions.h
+++ b/common/utils/itti/assertions.h
@@ -51,7 +51,7 @@ do { \
"In %s() %s:%d\n" fORMAT, \
__FUNCTION__, __FILE__, __LINE__, ##aRGS); \
aCTION; \
- } \
+ } \
} while(0)
#define AssertFatal(cOND, fORMAT, aRGS...) _Assert_(cOND, _Assert_Exit_, fORMAT, ##aRGS)
diff --git a/common/utils/itti/backtrace.c b/common/utils/itti/backtrace.c
index 5044c01e5e..ed7849ab4d 100644
--- a/common/utils/itti/backtrace.c
+++ b/common/utils/itti/backtrace.c
@@ -37,7 +37,8 @@ void display_backtrace(void)
size_t size;
char **strings;
size_t i;
-
+ char* test=getenv("NO_BACKTRACE");
+ if (test!=0) *((int*)0)=0;
size = backtrace(array, 10);
strings = backtrace_symbols(array, size);
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 018f7c7162..375efa5fea 100644
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -45,6 +45,11 @@
# define msg mexPrintf
#else
# ifdef OPENAIR2
+# if ENABLE_RAL
+# include "collection/hashtable/hashtable.h"
+# include "COMMON/ral_messages_types.h"
+# include "UTIL/queue.h"
+# endif
# include "log.h"
# define msg(aRGS...) LOG_D(PHY, ##aRGS)
# else
@@ -119,6 +124,8 @@ static inline void* malloc16_clear( size_t size )
#include "PHY/TOOLS/defs.h"
#include "platform_types.h"
+#ifdef OPENAIR_LTE
+
#include "PHY/LTE_TRANSPORT/defs.h"
#include
@@ -130,6 +137,9 @@ static inline void* malloc16_clear( size_t size )
#define NB_BANDS_MAX 8
+#ifdef OCP_FRAMEWORK
+#include
+#else
typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5,calib_prach_tx=6,rx_dump_frame=7,loop_through_memory=8} runmode_t;
enum transmission_access_mode {
@@ -153,6 +163,7 @@ typedef enum {
synch_to_ext_device=0, // synch to RF or Ethernet device
synch_to_other // synch to another source (timer, other CC_id)
} eNB_timing_t;
+#endif
typedef struct UE_SCAN_INFO_s {
/// 10 best amplitudes (linear) for each pss signals
@@ -939,5 +950,5 @@ static inline int release_thread(pthread_mutex_t *mutex,int *instance_cnt,char *
#include "PHY/LTE_ESTIMATION/defs.h"
#include "SIMULATION/ETH_TRANSPORT/defs.h"
-
+#endif
#endif // __PHY_DEFS__H__
diff --git a/openair1/PHY/extern.h b/openair1/PHY/extern.h
index 293da8f572..09d4c74f52 100644
--- a/openair1/PHY/extern.h
+++ b/openair1/PHY/extern.h
@@ -40,11 +40,17 @@ extern int number_of_cards;
//extern PHY_CONFIG *PHY_config;
//extern PHY_VARS *PHY_vars;
-
+#ifndef OCP_FRAMEWORK
extern PHY_VARS_UE ***PHY_vars_UE_g;
extern PHY_VARS_eNB ***PHY_vars_eNB_g;
extern PHY_VARS_RN **PHY_vars_RN_g;
extern LTE_DL_FRAME_PARMS *lte_frame_parms_g;
+#else
+#define MAX_UE 10
+#define MAX_eNB 20
+extern PHY_VARS_UE * PHY_vars_UE_g[MAX_UE][MAX_NUM_CCs];
+extern PHY_VARS_eNB * PHY_vars_eNB_g[MAX_eNB][MAX_NUM_CCs];
+#endif
extern MAC_xface *mac_xface;
diff --git a/openair1/PHY/impl_defs_lte.h b/openair1/PHY/impl_defs_lte.h
index 3000f13a19..f80effbebd 100644
--- a/openair1/PHY/impl_defs_lte.h
+++ b/openair1/PHY/impl_defs_lte.h
@@ -54,7 +54,9 @@
#define MAX_MBSFN_AREA 8
-
+#ifdef OCP_FRAMEWORK
+#include "enums.h"
+#else
typedef enum {TDD=1,FDD=0} lte_frame_type_t;
typedef enum {EXTENDED=1,NORMAL=0} lte_prefix_type_t;
@@ -74,7 +76,7 @@ typedef enum {
one=6,
two=12
} PHICH_RESOURCE_t;
-
+#endif
/// PHICH-Config from 36.331 RRC spec
typedef struct {
/// Parameter: PHICH-Duration, see TS 36.211 (Table 6.9.3-1).
@@ -161,10 +163,12 @@ typedef struct {
} UL_REFERENCE_SIGNALS_PUSCH_t;
/// Enumeration for parameter Hopping-mode \ref PUSCH_CONFIG_COMMON::hoppingMode.
+#ifndef OCP_FRAMEWORK
typedef enum {
interSubFrame=0,
intraAndInterSubFrame=1
} PUSCH_HOPPING_t;
+#endif
/// PUSCH-ConfigCommon from 36.331 RRC spec.
typedef struct {
@@ -329,6 +333,7 @@ typedef struct {
uint8_t filterCoefficient;
} UL_POWER_CONTROL_DEDICATED;
+#ifndef OCP_FRAMEWORK
/// Enumeration for parameter \f$\alpha\f$ \ref UL_POWER_CONTROL_CONFIG_COMMON::alpha.
typedef enum {
al0=0,
@@ -340,6 +345,7 @@ typedef enum {
al09=6,
al1=7
} PUSCH_alpha_t;
+#endif
/// \note UNUSED
typedef enum {
diff --git a/openair1/PHY/vars.h b/openair1/PHY/vars.h
index f920973368..bb570f0ecd 100644
--- a/openair1/PHY/vars.h
+++ b/openair1/PHY/vars.h
@@ -45,10 +45,15 @@ int16_t *primary_synch2_time;
#include "PHY/CODING/vars.h"
//PHY_VARS *PHY_vars;
+#ifndef OCP_FRAMEWORK
PHY_VARS_UE ***PHY_vars_UE_g;
PHY_VARS_eNB ***PHY_vars_eNB_g;
PHY_VARS_RN **PHY_vars_RN_g;
LTE_DL_FRAME_PARMS *lte_frame_parms_g;
+#else
+PHY_VARS_UE * PHY_vars_UE_g[MAX_UE][MAX_NUM_CCs]={NULL};
+PHY_VARS_eNB * PHY_vars_eNB_g[MAX_eNB][MAX_NUM_CCs]={NULL};
+#endif
unsigned short rev[2048],rev_times4[8192],rev_half[1024];
@@ -132,8 +137,12 @@ double beta2_dlsch[6][MCS_COUNT] = { {2.52163, 0.83231, 0.77472, 1.36536, 1.1682
*/
+#ifdef OCP_FRAMEWORK
+#include
+#else
char eNB_functions[6][20]={"eNodeB_3GPP","eNodeB_3GPP_BBU","NGFI_RCC_IF4p5","NGFI_RAI_IF4p5","NGFI_RRU_IF5","NGFI_RRU_IF4p5",};
char eNB_timing[2][20]={"synch_to_ext_device","synch_to_other"};
+#endif
/// lookup table for unscrambling in RX
int16_t unscrambling_lut[65536*16] __attribute__((aligned(32)));
diff --git a/openair2/COMMON/s1ap_messages_types.h b/openair2/COMMON/s1ap_messages_types.h
index d6b793fd7c..4fc043f281 100644
--- a/openair2/COMMON/s1ap_messages_types.h
+++ b/openair2/COMMON/s1ap_messages_types.h
@@ -71,7 +71,7 @@
* the key length is 32 bytes (256 bits)
*/
#define SECURITY_KEY_LENGTH 32
-
+#ifndef OCP_FRAMEWORK
typedef enum cell_type_e {
CELL_MACRO_ENB,
CELL_HOME_ENB
@@ -102,6 +102,7 @@ typedef enum cn_domain_s {
CN_DOMAIN_PS = 1,
CN_DOMAIN_CS = 2
} cn_domain_t;
+#endif
typedef struct net_ip_address_s {
unsigned ipv4:1;
@@ -117,6 +118,7 @@ typedef struct ambr_s {
bitrate_t br_dl;
} ambr_t;
+#ifndef OCP_FRAMEWORK
typedef enum priority_level_s {
PRIORITY_LEVEL_SPARE = 0,
PRIORITY_LEVEL_HIGHEST = 1,
@@ -135,6 +137,7 @@ typedef enum pre_emp_vulnerability_e {
PRE_EMPTION_VULNERABILITY_DISABLED = 1,
PRE_EMPTION_VULNERABILITY_MAX,
} pre_emp_vulnerability_t;
+#endif
typedef struct allocation_retention_priority_s {
priority_level_t priority_level;
diff --git a/openair2/ENB_APP/enb_config.h b/openair2/ENB_APP/enb_config.h
index 915dde68fa..9e53af172d 100644
--- a/openair2/ENB_APP/enb_config.h
+++ b/openair2/ENB_APP/enb_config.h
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
#include "commonDef.h"
#include "platform_types.h"
@@ -41,6 +42,7 @@
#include "s1ap_messages_types.h"
#ifdef CMAKER
#include "SystemInformationBlockType2.h"
+#include "rrc_messages_types.h"
#else
#include "RRC/LITE/MESSAGES/SystemInformationBlockType2.h"
#endif
@@ -109,6 +111,7 @@ typedef struct Enb_properties_s {
*/
char *eNB_name;
+
/* Tracking area code */
uint16_t tac;
@@ -123,6 +126,7 @@ typedef struct Enb_properties_s {
/* Physical parameters */
int16_t nb_cc;
+#ifndef OCP_FRAMEWORK
eNB_func_t cc_node_function[1+MAX_NUM_CCs];
eNB_timing_t cc_node_timing[1+MAX_NUM_CCs];
int16_t cc_node_synch_ref[1+MAX_NUM_CCs];
@@ -199,8 +203,10 @@ typedef struct Enb_properties_s {
long ue_TimersAndConstants_t311[1+MAX_NUM_CCs];
long ue_TimersAndConstants_n310[1+MAX_NUM_CCs];
long ue_TimersAndConstants_n311[1+MAX_NUM_CCs];
+#else
+ RrcConfigurationReq RrcReq;
+#endif
long ue_TransmissionMode[1+MAX_NUM_CCs];
-
long srb1_timer_poll_retransmit;
long srb1_timer_reordering;
long srb1_timer_status_prohibit;
@@ -229,6 +235,7 @@ typedef struct Enb_properties_s {
/* List of MME to connect to */
rrh_gw_config_t rrh_gw_config[4];
+#ifndef OCP_FRAMEWORK
// otg config
/* Nb of OTG elements */
uint8_t num_otg_elements;
@@ -257,7 +264,7 @@ typedef struct Enb_properties_s {
int16_t udp_log_verbosity;
int16_t osa_log_level;
int16_t osa_log_verbosity;
-
+#endif
} Enb_properties_t;
typedef struct Enb_properties_array_s {
diff --git a/openair2/RRC/LITE/rrc_eNB.c b/openair2/RRC/LITE/rrc_eNB.c
index f14527adbb..284c5fd215 100644
--- a/openair2/RRC/LITE/rrc_eNB.c
+++ b/openair2/RRC/LITE/rrc_eNB.c
@@ -3867,6 +3867,12 @@ openair_rrc_eNB_init(
PROTOCOL_RRC_CTXT_FMT" Init...\n",
PROTOCOL_RRC_CTXT_ARGS(&ctxt));
+#if OCP_FRAMEWORK
+while ( eNB_rrc_inst == NULL ) {
+ LOG_E(RRC, "eNB_rrc_inst not yet initialized, waiting 1 second\n");
+ sleep(1);
+}
+#endif
AssertFatal(eNB_rrc_inst != NULL, "eNB_rrc_inst not initialized!");
AssertFatal(NUMBER_OF_UE_MAX < (module_id_t)0xFFFFFFFFFFFFFFFF, " variable overflow");
diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h
index 652873e569..cc1ab6854c 100644
--- a/openair2/UTIL/OPT/opt.h
+++ b/openair2/UTIL/OPT/opt.h
@@ -55,12 +55,16 @@ This header file must be included */
#include "PHY/impl_defs_lte.h"
#endif
+#ifdef OCP_FRAMEWORK
+#include
+#else
typedef enum trace_mode_e {
OPT_WIRESHARK,
OPT_PCAP,
OPT_TSHARK,
OPT_NONE
} trace_mode_t;
+#endif
typedef enum radio_type_e {
RADIO_TYPE_FDD = 1,
diff --git a/openair2/UTIL/OSA/osa_stream_eea.c b/openair2/UTIL/OSA/osa_stream_eea.c
index 6abaa1f975..6aef6d2588 100644
--- a/openair2/UTIL/OSA/osa_stream_eea.c
+++ b/openair2/UTIL/OSA/osa_stream_eea.c
@@ -191,8 +191,13 @@ int stream_encrypt_eea2(stream_cipher_t *stream_cipher, uint8_t **out)
}
#endif
+#if NETTLE_VERSION_MAJOR < 3
nettle_aes128.set_encrypt_key(ctx, stream_cipher->key_length,
stream_cipher->key);
+#else
+ nettle_aes128.set_encrypt_key(ctx,
+ stream_cipher->key);
+#endif
nettle_ctr_crypt(ctx, nettle_aes128.encrypt,
nettle_aes128.block_size, m,
diff --git a/openair2/X2AP/x2ap_common.h b/openair2/X2AP/x2ap_common.h
index 0cf2990581..d2a2ca7137 100644
--- a/openair2/X2AP/x2ap_common.h
+++ b/openair2/X2AP/x2ap_common.h
@@ -282,8 +282,10 @@
# define X2AP_PORT 36422
#endif
+#ifndef TRUE
#define TRUE 1
#define FALSE 0
+#endif
extern int asn_debug;
extern int asn1_xer_print;
diff --git a/openair3/SECU/nas_stream_eea2.c b/openair3/SECU/nas_stream_eea2.c
index 368cfaf48e..37f2e298fb 100644
--- a/openair3/SECU/nas_stream_eea2.c
+++ b/openair3/SECU/nas_stream_eea2.c
@@ -78,8 +78,13 @@ int nas_stream_encrypt_eea2(nas_stream_cipher_t *stream_cipher, uint8_t *out)
}
#endif
+#if NETTLE_VERSION_MAJOR < 3
nettle_aes128.set_encrypt_key(ctx, stream_cipher->key_length,
stream_cipher->key);
+#else
+ nettle_aes128.set_encrypt_key(ctx,
+ stream_cipher->key);
+#endif
nettle_ctr_crypt(ctx, nettle_aes128.encrypt,
nettle_aes128.block_size, m,
diff --git a/openair3/TEST/test_aes128_ctr_decrypt.c b/openair3/TEST/test_aes128_ctr_decrypt.c
index 4a089c617e..a30dc6c2f2 100644
--- a/openair3/TEST/test_aes128_ctr_decrypt.c
+++ b/openair3/TEST/test_aes128_ctr_decrypt.c
@@ -41,7 +41,12 @@ void test_uncipher_ctr(const struct nettle_cipher *cipher, const uint8_t *key,
uint8_t *data = malloc(length);
uint8_t *ctr = malloc(cipher->block_size);
- cipher->set_encrypt_key(ctx, key_length, key);
+#if NETTLE_VERSION_MAJOR < 3
+ cipher->set_encrypt_key(ctx, key_length, key);
+#else
+ cipher->set_encrypt_key(ctx, key);
+#endif
+
memcpy(ctr, ictr, cipher->block_size);
ctr_crypt(ctx, cipher->encrypt,
diff --git a/openair3/TEST/test_aes128_ctr_encrypt.c b/openair3/TEST/test_aes128_ctr_encrypt.c
index 50d33a1741..6c264a98a6 100644
--- a/openair3/TEST/test_aes128_ctr_encrypt.c
+++ b/openair3/TEST/test_aes128_ctr_encrypt.c
@@ -40,7 +40,12 @@ static void test_cipher_ctr(const struct nettle_cipher *cipher, const uint8_t *k
uint8_t *data = malloc(length);
uint8_t *ctr = malloc(cipher->block_size);
+#if NETTLE_VERSION_MAJOR < 3
cipher->set_encrypt_key(ctx, key_length, key);
+#else
+ cipher->set_encrypt_key(ctx, key);
+#endif
+
memcpy(ctr, ictr, cipher->block_size);
ctr_crypt(ctx, cipher->encrypt,
diff --git a/targets/ARCH/COMMON/common_lib.h b/targets/ARCH/COMMON/common_lib.h
index f43bad3409..a6c8e43483 100644
--- a/targets/ARCH/COMMON/common_lib.h
+++ b/targets/ARCH/COMMON/common_lib.h
@@ -65,10 +65,13 @@ typedef enum {
max_gain=0,med_gain,byp_gain
} rx_gain_t;
+#if OCP_FRAMEWORK
+#include
+#else
typedef enum {
duplex_mode_TDD=1,duplex_mode_FDD=0
} duplex_mode_t;
-
+#endif
/** @addtogroup _GENERIC_PHY_RF_INTERFACE_
@@ -76,6 +79,9 @@ typedef enum {
*/
/*!\brief RF device types
*/
+#ifdef OCP_FRAMEWORK
+#include
+#else
typedef enum {
MIN_RF_DEV_TYPE = 0,
/*!\brief device is ExpressMIMO */
@@ -93,6 +99,7 @@ typedef enum {
MAX_RF_DEV_TYPE
} dev_type_t;
+#endif
/*!\brief transport protocol types
*/
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
index d7201152fc..1f8bab415c 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
@@ -264,6 +264,7 @@ int trx_eth_read_raw(openair0_device *device, openair0_timestamp *timestamp, voi
if (bytes_received ==-1) {
eth->num_rx_errors++;
perror("ETHERNET IF5 READ: ");
+ if (errno == EAGAIN) continue;
exit(-1);
} else {
/* store the timestamp value from packet's header */
diff --git a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
index d840819fe7..1880719c50 100644
--- a/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+++ b/targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
@@ -27,7 +27,7 @@
* \company Eurecom
* \maintainer: navid.nikaein@eurecom.fr
* \note
- * \warning
+ * \warning
*/
#include
@@ -52,366 +52,366 @@ int dest_addr_len[MAX_INST];
int trx_eth_start(openair0_device *device) {
- eth_state_t *eth = (eth_state_t*)device->priv;
-
- /* initialize socket */
- if (eth->flags == ETH_RAW_MODE) {
- printf("Setting ETHERNET to ETH_RAW_IF5_MODE\n");
- if (eth_socket_init_raw(device)!=0) return -1;
- /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
- if (device->host_type == BBU_HOST) {
- if(eth_set_dev_conf_raw(device)!=0) return -1;
- } else {
- if(eth_get_dev_conf_raw(device)!=0) return -1;
- }
- /* adjust MTU wrt number of samples per packet */
- if(ethernet_tune (device,MTU_SIZE,RAW_PACKET_SIZE_BYTES(device->openair0_cfg->samples_per_packet))!=0) return -1;
- if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0) return -1;
- } else if (eth->flags == ETH_RAW_IF4p5_MODE) {
+ eth_state_t *eth = (eth_state_t*)device->priv;
- printf("Setting ETHERNET to ETH_RAW_IF4p5_MODE\n");
- if (eth_socket_init_raw(device)!=0) return -1;
- /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
- if (device->host_type == BBU_HOST) {
- if(eth_set_dev_conf_raw_IF4p5(device)!=0) return -1;
- } else {
- if(eth_get_dev_conf_raw_IF4p5(device)!=0) return -1;
- }
- /* adjust MTU wrt number of samples per packet */
- if(ethernet_tune (device,MTU_SIZE,RAW_IF4p5_PRACH_SIZE_BYTES)!=0) return -1;
+ /* initialize socket */
+ if (eth->flags == ETH_RAW_MODE) {
+ printf("Setting ETHERNET to ETH_RAW_IF5_MODE\n");
+ if (eth_socket_init_raw(device)!=0) return -1;
+ /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_raw(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_raw(device)!=0) return -1;
+ }
+ /* adjust MTU wrt number of samples per packet */
+ if(ethernet_tune (device,MTU_SIZE,RAW_PACKET_SIZE_BYTES(device->openair0_cfg->samples_per_packet))!=0) return -1;
+ if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0) return -1;
+ } else if (eth->flags == ETH_RAW_IF4p5_MODE) {
- if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0) return -1;
- } else if (eth->flags == ETH_UDP_IF4p5_MODE) {
- printf("Setting ETHERNET to UDP_IF4p5_MODE\n");
- if (eth_socket_init_udp(device)!=0) return -1;
- if (device->host_type == BBU_HOST) {
- if(eth_set_dev_conf_udp(device)!=0) return -1;
+ printf("Setting ETHERNET to ETH_RAW_IF4p5_MODE\n");
+ if (eth_socket_init_raw(device)!=0) return -1;
+ /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_raw_IF4p5(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_raw_IF4p5(device)!=0) return -1;
+ }
+ /* adjust MTU wrt number of samples per packet */
+ if(ethernet_tune (device,MTU_SIZE,RAW_IF4p5_PRACH_SIZE_BYTES)!=0) return -1;
+
+ if(ethernet_tune (device,RCV_TIMEOUT,999999)!=0) return -1;
+ } else if (eth->flags == ETH_UDP_IF4p5_MODE) {
+ printf("Setting ETHERNET to UDP_IF4p5_MODE\n");
+ if (eth_socket_init_udp(device)!=0) return -1;
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_udp(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_udp(device)!=0) return -1;
+ }
+ } else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
+ printf("Setting ETHERNET to RAW_IF5_MODE\n");
+ if (eth_socket_init_raw(device)!=0) return -1;
} else {
- if(eth_get_dev_conf_udp(device)!=0) return -1;
+ if (eth_socket_init_udp(device)!=0) return -1;
+ /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
+ if (device->host_type == BBU_HOST) {
+ if(eth_set_dev_conf_udp(device)!=0) return -1;
+ } else {
+ if(eth_get_dev_conf_udp(device)!=0) return -1;
+ }
}
- } else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
- printf("Setting ETHERNET to RAW_IF5_MODE\n");
- if (eth_socket_init_raw(device)!=0) return -1;
- } else {
- if (eth_socket_init_udp(device)!=0) return -1;
- /* RRH gets openair0 device configuration - BBU sets openair0 device configuration*/
- if (device->host_type == BBU_HOST) {
- if(eth_set_dev_conf_udp(device)!=0) return -1;
- } else {
- if(eth_get_dev_conf_udp(device)!=0) return -1;
- }
- }
- /* apply additional configuration */
- if(ethernet_tune (device, SND_BUF_SIZE,2000000000)!=0) return -1;
- if(ethernet_tune (device, RCV_BUF_SIZE,2000000000)!=0) return -1;
-
- return 0;
+ /* apply additional configuration */
+ if(ethernet_tune (device, SND_BUF_SIZE,2000000000)!=0) return -1;
+ if(ethernet_tune (device, RCV_BUF_SIZE,2000000000)!=0) return -1;
+
+ return 0;
}
void trx_eth_end(openair0_device *device) {
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
- /* destroys socket only for the processes that call the eth_end fuction-- shutdown() for beaking the pipe */
- if ( close(eth->sockfd[Mod_id]) <0 ) {
- perror("ETHERNET: Failed to close socket");
- exit(0);
- } else {
- printf("[%s] socket for mod_id %d has been successfully closed.\n",(device->host_type == BBU_HOST)? "BBU":"RRH",Mod_id);
- }
-
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
+ /* destroys socket only for the processes that call the eth_end fuction-- shutdown() for beaking the pipe */
+ if ( close(eth->sockfd[Mod_id]) <0 ) {
+ perror("ETHERNET: Failed to close socket");
+ exit(0);
+ } else {
+ printf("[%s] socket for mod_id %d has been successfully closed.\n",(device->host_type == BBU_HOST)? "BBU":"RRH",Mod_id);
+ }
+
}
int trx_eth_request(openair0_device *device, void *msg, ssize_t msg_len) {
- int Mod_id = device->Mod_id;
- eth_state_t *eth = (eth_state_t*)device->priv;
-
- /* BBU sends a message to RRH */
- if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) {
- perror("ETHERNET: ");
- exit(0);
- }
-
- return 0;
+ int Mod_id = device->Mod_id;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+
+ /* BBU sends a message to RRH */
+ if (sendto(eth->sockfd[Mod_id],msg,msg_len,0,(struct sockaddr *)&dest_addr[Mod_id],dest_addr_len[Mod_id])==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+
+ return 0;
}
int trx_eth_reply(openair0_device *device, void *msg, ssize_t msg_len) {
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id = device->Mod_id;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id = device->Mod_id;
- /* RRH receives from BBU a message */
- if (recvfrom(eth->sockfd[Mod_id],
- msg,
- msg_len,
- 0,
- (struct sockaddr *)&dest_addr[Mod_id],
- (socklen_t *)&dest_addr_len[Mod_id])==-1) {
- perror("ETHERNET: ");
- exit(0);
- }
-
- return 0;
+ /* RRH receives from BBU a message */
+ if (recvfrom(eth->sockfd[Mod_id],
+ msg,
+ msg_len,
+ 0,
+ (struct sockaddr *)&dest_addr[Mod_id],
+ (socklen_t *)&dest_addr_len[Mod_id])==-1) {
+ perror("ETHERNET: ");
+ exit(0);
+ }
+
+ return 0;
}
int trx_eth_stop(openair0_device *device) {
- return(0);
+ return(0);
}
int trx_eth_set_freq(openair0_device* device, openair0_config_t *openair0_cfg,int exmimo_dump_config) {
- return(0);
+ return(0);
}
int trx_eth_set_gains(openair0_device* device, openair0_config_t *openair0_cfg) {
- return(0);
+ return(0);
}
int trx_eth_get_stats(openair0_device* device) {
- return(0);
+ return(0);
}
int trx_eth_reset_stats(openair0_device* device) {
- return(0);
+ return(0);
}
int ethernet_tune(openair0_device *device, unsigned int option, int value) {
-
- eth_state_t *eth = (eth_state_t*)device->priv;
- int Mod_id=device->Mod_id;
- struct timeval timeout;
- struct ifreq ifr;
- char system_cmd[256];
- // char* if_name=DEFAULT_IF;
- // struct in_addr ia;
- // struct if_nameindex *ids;
- int ret=0;
- // int i=0;
-
- /****************** socket level options ************************/
- switch(option) {
- case SND_BUF_SIZE: /* transmit socket buffer size */
- if (setsockopt(eth->sockfd[Mod_id],
- SOL_SOCKET,
- SO_SNDBUF,
- &value,sizeof(value))) {
- perror("[ETHERNET] setsockopt()");
- } else {
- printf("send buffer size= %d bytes\n",value);
- }
- break;
-
- case RCV_BUF_SIZE: /* receive socket buffer size */
- if (setsockopt(eth->sockfd[Mod_id],
- SOL_SOCKET,
- SO_RCVBUF,
- &value,sizeof(value))) {
- perror("[ETHERNET] setsockopt()");
- } else {
- printf("receive bufffer size= %d bytes\n",value);
- }
- break;
-
- case RCV_TIMEOUT:
- timeout.tv_sec = value/1000000;
- timeout.tv_usec = value%1000000;//less than rt_period?
- if (setsockopt(eth->sockfd[Mod_id],
- SOL_SOCKET,
- SO_RCVTIMEO,
- (char *)&timeout,sizeof(timeout))) {
- perror("[ETHERNET] setsockopt()");
- } else {
- printf( "receive timeout= %u usec\n",(unsigned int)timeout.tv_usec);
- }
- break;
-
- case SND_TIMEOUT:
- timeout.tv_sec = value/1000000000;
- timeout.tv_usec = value%1000000000;//less than rt_period?
- if (setsockopt(eth->sockfd[Mod_id],
- SOL_SOCKET,
- SO_SNDTIMEO,
- (char *)&timeout,sizeof(timeout))) {
- perror("[ETHERNET] setsockopt()");
- } else {
- printf( "send timeout= %d,%d sec\n",(int)timeout.tv_sec,(int)timeout.tv_usec);
- }
- break;
-
-
+
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ int Mod_id=device->Mod_id;
+ struct timeval timeout;
+ struct ifreq ifr;
+ char system_cmd[256];
+ // char* if_name=DEFAULT_IF;
+ // struct in_addr ia;
+ // struct if_nameindex *ids;
+ int ret=0;
+ // int i=0;
+
+ /****************** socket level options ************************/
+ switch(option) {
+ case SND_BUF_SIZE: /* transmit socket buffer size */
+ if (setsockopt(eth->sockfd[Mod_id],
+ SOL_SOCKET,
+ SO_SNDBUF,
+ &value,sizeof(value))) {
+ perror("[ETHERNET] setsockopt()");
+ } else {
+ printf("send buffer size= %d bytes\n",value);
+ }
+ break;
+
+ case RCV_BUF_SIZE: /* receive socket buffer size */
+ if (setsockopt(eth->sockfd[Mod_id],
+ SOL_SOCKET,
+ SO_RCVBUF,
+ &value,sizeof(value))) {
+ perror("[ETHERNET] setsockopt()");
+ } else {
+ printf("receive bufffer size= %d bytes\n",value);
+ }
+ break;
+
+ case RCV_TIMEOUT:
+ timeout.tv_sec = value/1000000;
+ timeout.tv_usec = value%1000000;//less than rt_period?
+ if (setsockopt(eth->sockfd[Mod_id],
+ SOL_SOCKET,
+ SO_RCVTIMEO,
+ (char *)&timeout,sizeof(timeout))) {
+ perror("[ETHERNET] setsockopt()");
+ } else {
+ printf( "receive timeout= %u usec\n",(unsigned int)timeout.tv_usec);
+ }
+ break;
+
+ case SND_TIMEOUT:
+ timeout.tv_sec = value/1000000000;
+ timeout.tv_usec = value%1000000000;//less than rt_period?
+ if (setsockopt(eth->sockfd[Mod_id],
+ SOL_SOCKET,
+ SO_SNDTIMEO,
+ (char *)&timeout,sizeof(timeout))) {
+ perror("[ETHERNET] setsockopt()");
+ } else {
+ printf( "send timeout= %d,%d sec\n",(int)timeout.tv_sec,(int)timeout.tv_usec);
+ }
+ break;
+
+
/******************* interface level options *************************/
- case MTU_SIZE: /* change MTU of the eth interface */
- ifr.ifr_addr.sa_family = AF_INET;
- strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
- ifr.ifr_mtu =value;
- if (ioctl(eth->sockfd[Mod_id],SIOCSIFMTU,(caddr_t)&ifr) < 0 )
- perror ("[ETHERNET] Can't set the MTU");
- else
- printf("[ETHERNET] %s MTU size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_mtu);
- break;
-
- case TX_Q_LEN: /* change TX queue length of eth interface */
- ifr.ifr_addr.sa_family = AF_INET;
- strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
- ifr.ifr_qlen =value;
- if (ioctl(eth->sockfd[Mod_id],SIOCSIFTXQLEN,(caddr_t)&ifr) < 0 )
- perror ("[ETHERNET] Can't set the txqueuelen");
- else
- printf("[ETHERNET] %s txqueuelen size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_qlen);
- break;
-
+ case MTU_SIZE: /* change MTU of the eth interface */
+ ifr.ifr_addr.sa_family = AF_INET;
+ strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
+ ifr.ifr_mtu =value;
+ if (ioctl(eth->sockfd[Mod_id],SIOCSIFMTU,(caddr_t)&ifr) < 0 )
+ perror ("[ETHERNET] Can't set the MTU");
+ else
+ printf("[ETHERNET] %s MTU size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_mtu);
+ break;
+
+ case TX_Q_LEN: /* change TX queue length of eth interface */
+ ifr.ifr_addr.sa_family = AF_INET;
+ strncpy(ifr.ifr_name,eth->if_name[Mod_id], sizeof(ifr.ifr_name));
+ ifr.ifr_qlen =value;
+ if (ioctl(eth->sockfd[Mod_id],SIOCSIFTXQLEN,(caddr_t)&ifr) < 0 )
+ perror ("[ETHERNET] Can't set the txqueuelen");
+ else
+ printf("[ETHERNET] %s txqueuelen size has changed to %d\n",eth->if_name[Mod_id],ifr.ifr_qlen);
+ break;
+
/******************* device level options *************************/
- case COALESCE_PAR:
- ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -C %s rx-usecs %d",eth->if_name[Mod_id],value);
- if (ret > 0) {
- ret=system(system_cmd);
- if (ret == -1) {
- fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
- } else {
- printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
- }
- printf("[ETHERNET] Coalesce parameters %s\n",system_cmd);
- } else {
- perror("[ETHERNET] Can't set coalesce parameters\n");
+ case COALESCE_PAR:
+ ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -C %s rx-usecs %d",eth->if_name[Mod_id],value);
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
+ printf("[ETHERNET] Coalesce parameters %s\n",system_cmd);
+ } else {
+ perror("[ETHERNET] Can't set coalesce parameters\n");
+ }
+ break;
+
+ case PAUSE_PAR:
+ if (value==1) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg off rx off tx off",eth->if_name[Mod_id]);
+ else if (value==0) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg on rx on tx on",eth->if_name[Mod_id]);
+ else break;
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
+ printf("[ETHERNET] Pause parameters %s\n",system_cmd);
+ } else {
+ perror("[ETHERNET] Can't set pause parameters\n");
+ }
+ break;
+
+ case RING_PAR:
+ ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -G %s val %d",eth->if_name[Mod_id],value);
+ if (ret > 0) {
+ ret=system(system_cmd);
+ if (ret == -1) {
+ fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
+ } else {
+ printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
+ }
+ printf("[ETHERNET] Ring parameters %s\n",system_cmd);
+ } else {
+ perror("[ETHERNET] Can't set ring parameters\n");
+ }
+ break;
+
+ default:
+ break;
}
- break;
-
- case PAUSE_PAR:
- if (value==1) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg off rx off tx off",eth->if_name[Mod_id]);
- else if (value==0) ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -A %s autoneg on rx on tx on",eth->if_name[Mod_id]);
- else break;
- if (ret > 0) {
- ret=system(system_cmd);
- if (ret == -1) {
- fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
- } else {
- printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
- }
- printf("[ETHERNET] Pause parameters %s\n",system_cmd);
- } else {
- perror("[ETHERNET] Can't set pause parameters\n");
- }
- break;
-
- case RING_PAR:
- ret=snprintf(system_cmd,sizeof(system_cmd),"ethtool -G %s val %d",eth->if_name[Mod_id],value);
- if (ret > 0) {
- ret=system(system_cmd);
- if (ret == -1) {
- fprintf (stderr,"[ETHERNET] Can't start shell to execute %s %s",system_cmd, strerror(errno));
- } else {
- printf ("[ETHERNET] status of %s is %i\n",WEXITSTATUS(ret));
- }
- printf("[ETHERNET] Ring parameters %s\n",system_cmd);
- } else {
- perror("[ETHERNET] Can't set ring parameters\n");
- }
- break;
-
- default:
- break;
- }
-
- return 0;
+
+ return 0;
}
int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params ) {
- eth_state_t *eth = (eth_state_t*)malloc(sizeof(eth_state_t));
- memset(eth, 0, sizeof(eth_state_t));
+ eth_state_t *eth = (eth_state_t*)malloc(sizeof(eth_state_t));
+ memset(eth, 0, sizeof(eth_state_t));
- if (eth_params->transp_preference == 1) {
- eth->flags = ETH_RAW_MODE;
- } else if (eth_params->transp_preference == 0) {
- eth->flags = ETH_UDP_MODE;
- } else if (eth_params->transp_preference == 3) {
- eth->flags = ETH_RAW_IF4p5_MODE;
- } else if (eth_params->transp_preference == 2) {
- eth->flags = ETH_UDP_IF4p5_MODE;
- } else if (eth_params->transp_preference == 4) {
- eth->flags = ETH_RAW_IF5_MOBIPASS;
- } else {
- printf("transport_init: Unknown transport preference %d - default to RAW", eth_params->transp_preference);
- eth->flags = ETH_RAW_MODE;
- }
-
- printf("[ETHERNET]: Initializing openair0_device for %s ...\n", ((device->host_type == BBU_HOST) ? "BBU": "RRH"));
- device->Mod_id = num_devices_eth++;
- device->transp_type = ETHERNET_TP;
- device->trx_start_func = trx_eth_start;
- device->trx_request_func = trx_eth_request;
- device->trx_reply_func = trx_eth_reply;
- device->trx_get_stats_func = trx_eth_get_stats;
- device->trx_reset_stats_func = trx_eth_reset_stats;
- device->trx_end_func = trx_eth_end;
- device->trx_stop_func = trx_eth_stop;
- device->trx_set_freq_func = trx_eth_set_freq;
- device->trx_set_gains_func = trx_eth_set_gains;
-
- if (eth->flags == ETH_RAW_MODE) {
- device->trx_write_func = trx_eth_write_raw;
- device->trx_read_func = trx_eth_read_raw;
- } else if (eth->flags == ETH_UDP_MODE) {
- device->trx_write_func = trx_eth_write_udp;
- device->trx_read_func = trx_eth_read_udp;
- } else if (eth->flags == ETH_RAW_IF4p5_MODE) {
- device->trx_write_func = trx_eth_write_raw_IF4p5;
- device->trx_read_func = trx_eth_read_raw_IF4p5;
- } else if (eth->flags == ETH_UDP_IF4p5_MODE) {
- device->trx_write_func = trx_eth_write_udp_IF4p5;
- device->trx_read_func = trx_eth_read_udp_IF4p5;
- } else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
- device->trx_write_func = trx_eth_write_raw_IF4p5;
- device->trx_read_func = trx_eth_read_raw_IF4p5;
- } else {
- //device->trx_write_func = trx_eth_write_udp_IF4p5;
- //device->trx_read_func = trx_eth_read_udp_IF4p5;
- }
-
- eth->if_name[device->Mod_id] = eth_params->local_if_name;
- device->priv = eth;
-
- /* device specific */
- openair0_cfg[0].iq_rxrescale = 15;//rescale iqs
- openair0_cfg[0].iq_txshift = eth_params->iq_txshift;// shift
- openair0_cfg[0].tx_sample_advance = eth_params->tx_sample_advance;
-
- /* RRH does not have any information to make this configuration atm */
- if (device->host_type == BBU_HOST) {
- /*Note scheduling advance values valid only for case 7680000 */
- switch ((int)openair0_cfg[0].sample_rate) {
- case 30720000:
- openair0_cfg[0].samples_per_packet = 3840;
- break;
- case 23040000:
- openair0_cfg[0].samples_per_packet = 2880;
- break;
- case 15360000:
- openair0_cfg[0].samples_per_packet = 1920;
- break;
- case 7680000:
- openair0_cfg[0].samples_per_packet = 960;
- break;
- case 1920000:
- openair0_cfg[0].samples_per_packet = 240;
- break;
- default:
- printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate);
- exit(-1);
- break;
+ if (eth_params->transp_preference == 1) {
+ eth->flags = ETH_RAW_MODE;
+ } else if (eth_params->transp_preference == 0) {
+ eth->flags = ETH_UDP_MODE;
+ } else if (eth_params->transp_preference == 3) {
+ eth->flags = ETH_RAW_IF4p5_MODE;
+ } else if (eth_params->transp_preference == 2) {
+ eth->flags = ETH_UDP_IF4p5_MODE;
+ } else if (eth_params->transp_preference == 4) {
+ eth->flags = ETH_RAW_IF5_MOBIPASS;
+ } else {
+ printf("transport_init: Unknown transport preference %d - default to RAW", eth_params->transp_preference);
+ eth->flags = ETH_RAW_MODE;
}
- }
-
- device->openair0_cfg=&openair0_cfg[0];
- return 0;
+
+ printf("[ETHERNET]: Initializing openair0_device for %s ...\n", ((device->host_type == BBU_HOST) ? "BBU": "RRH"));
+ device->Mod_id = num_devices_eth++;
+ device->transp_type = ETHERNET_TP;
+ device->trx_start_func = trx_eth_start;
+ device->trx_request_func = trx_eth_request;
+ device->trx_reply_func = trx_eth_reply;
+ device->trx_get_stats_func = trx_eth_get_stats;
+ device->trx_reset_stats_func = trx_eth_reset_stats;
+ device->trx_end_func = trx_eth_end;
+ device->trx_stop_func = trx_eth_stop;
+ device->trx_set_freq_func = trx_eth_set_freq;
+ device->trx_set_gains_func = trx_eth_set_gains;
+
+ if (eth->flags == ETH_RAW_MODE) {
+ device->trx_write_func = trx_eth_write_raw;
+ device->trx_read_func = trx_eth_read_raw;
+ } else if (eth->flags == ETH_UDP_MODE) {
+ device->trx_write_func = trx_eth_write_udp;
+ device->trx_read_func = trx_eth_read_udp;
+ } else if (eth->flags == ETH_RAW_IF4p5_MODE) {
+ device->trx_write_func = trx_eth_write_raw_IF4p5;
+ device->trx_read_func = trx_eth_read_raw_IF4p5;
+ } else if (eth->flags == ETH_UDP_IF4p5_MODE) {
+ device->trx_write_func = trx_eth_write_udp_IF4p5;
+ device->trx_read_func = trx_eth_read_udp_IF4p5;
+ } else if (eth->flags == ETH_RAW_IF5_MOBIPASS) {
+ device->trx_write_func = trx_eth_write_raw_IF4p5;
+ device->trx_read_func = trx_eth_read_raw_IF4p5;
+ } else {
+ //device->trx_write_func = trx_eth_write_udp_IF4p5;
+ //device->trx_read_func = trx_eth_read_udp_IF4p5;
+ }
+
+ eth->if_name[device->Mod_id] = eth_params->local_if_name;
+ device->priv = eth;
+
+ /* device specific */
+ openair0_cfg[0].iq_rxrescale = 15;//rescale iqs
+ openair0_cfg[0].iq_txshift = eth_params->iq_txshift;// shift
+ openair0_cfg[0].tx_sample_advance = eth_params->tx_sample_advance;
+
+ /* RRH does not have any information to make this configuration atm */
+ if (device->host_type == BBU_HOST) {
+ /*Note scheduling advance values valid only for case 7680000 */
+ switch ((int)openair0_cfg[0].sample_rate) {
+ case 30720000:
+ openair0_cfg[0].samples_per_packet = 3840;
+ break;
+ case 23040000:
+ openair0_cfg[0].samples_per_packet = 2880;
+ break;
+ case 15360000:
+ openair0_cfg[0].samples_per_packet = 1920;
+ break;
+ case 7680000:
+ openair0_cfg[0].samples_per_packet = 960;
+ break;
+ case 1920000:
+ openair0_cfg[0].samples_per_packet = 240;
+ break;
+ default:
+ printf("Error: unknown sampling rate %f\n",openair0_cfg[0].sample_rate);
+ exit(-1);
+ break;
+ }
+ }
+
+ device->openair0_cfg=&openair0_cfg[0];
+ return 0;
}
@@ -419,85 +419,85 @@ int transport_init(openair0_device *device, openair0_config_t *openair0_cfg, eth
* DEBUGING-RELATED FUNCTIONS *
**************************************************************************************************************************/
void dump_packet(char *title, unsigned char* pkt, int bytes, unsigned int tx_rx_flag) {
-
- static int numSend = 1;
- static int numRecv = 1;
- int num, k;
- char tmp[48];
- unsigned short int cksum;
-
- num = (tx_rx_flag)? numSend++:numRecv++;
- for (k = 0; k < 24; k++) sprintf(tmp+k, "%02X", pkt[k]);
- cksum = calc_csum((unsigned short *)pkt, bytes>>2);
- printf("%s-%s (%06d): %s 0x%04X\n", title,(tx_rx_flag)? "TX":"RX", num, tmp, cksum);
+
+ static int numSend = 1;
+ static int numRecv = 1;
+ int num, k;
+ char tmp[48];
+ unsigned short int cksum;
+
+ num = (tx_rx_flag)? numSend++:numRecv++;
+ for (k = 0; k < 24; k++) sprintf(tmp+k, "%02X", pkt[k]);
+ cksum = calc_csum((unsigned short *)pkt, bytes>>2);
+ printf("%s-%s (%06d): %s 0x%04X\n", title,(tx_rx_flag)? "TX":"RX", num, tmp, cksum);
}
unsigned short calc_csum (unsigned short *buf, int nwords) {
-
- unsigned long sum;
- for (sum = 0; nwords > 0; nwords--)
- sum += *buf++;
- sum = (sum >> 16) + (sum & 0xffff);
- sum += (sum >> 16);
- return ~sum;
+
+ unsigned long sum;
+ for (sum = 0; nwords > 0; nwords--)
+ sum += *buf++;
+ sum = (sum >> 16) + (sum & 0xffff);
+ sum += (sum >> 16);
+ return ~sum;
}
void dump_dev(openair0_device *device) {
- eth_state_t *eth = (eth_state_t*)device->priv;
-
- printf("Ethernet device interface %i configuration:\n" ,device->openair0_cfg->Mod_id);
- printf(" Log level is %i :\n" ,device->openair0_cfg->log_level);
- printf(" RB number: %i, sample rate: %lf \n" ,
- device->openair0_cfg->num_rb_dl, device->openair0_cfg->sample_rate);
- printf(" BBU configured for %i tx/%i rx channels)\n",
- device->openair0_cfg->tx_num_channels,device->openair0_cfg->rx_num_channels);
- printf(" Running flags: %s %s (\n",
- ((eth->flags & ETH_RAW_MODE) ? "RAW socket mode - ":""),
- ((eth->flags & ETH_UDP_MODE) ? "UDP socket mode - ":""));
- printf(" Number of iqs dumped when displaying packets: %i\n\n",eth->iqdumpcnt);
-
+ eth_state_t *eth = (eth_state_t*)device->priv;
+
+ printf("Ethernet device interface %i configuration:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Log level is %i :\n" ,device->openair0_cfg->log_level);
+ printf(" RB number: %i, sample rate: %lf \n" ,
+ device->openair0_cfg->num_rb_dl, device->openair0_cfg->sample_rate);
+ printf(" BBU configured for %i tx/%i rx channels)\n",
+ device->openair0_cfg->tx_num_channels,device->openair0_cfg->rx_num_channels);
+ printf(" Running flags: %s %s (\n",
+ ((eth->flags & ETH_RAW_MODE) ? "RAW socket mode - ":""),
+ ((eth->flags & ETH_UDP_MODE) ? "UDP socket mode - ":""));
+ printf(" Number of iqs dumped when displaying packets: %i\n\n",eth->iqdumpcnt);
+
}
void inline dump_txcounters(openair0_device *device) {
- eth_state_t *eth = (eth_state_t*)device->priv;
- printf(" Ethernet device interface %i, tx counters:\n" ,device->openair0_cfg->Mod_id);
- printf(" Sent packets: %llu send errors: %i\n", (long long unsigned int)eth->tx_count, eth->num_tx_errors);
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ printf(" Ethernet device interface %i, tx counters:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Sent packets: %llu send errors: %i\n", (long long unsigned int)eth->tx_count, eth->num_tx_errors);
}
void inline dump_rxcounters(openair0_device *device) {
- eth_state_t *eth = (eth_state_t*)device->priv;
- printf(" Ethernet device interface %i rx counters:\n" ,device->openair0_cfg->Mod_id);
- printf(" Received packets: %llu missed packets errors: %i\n", (long long unsigned int)eth->rx_count, eth->num_underflows);
-}
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ printf(" Ethernet device interface %i rx counters:\n" ,device->openair0_cfg->Mod_id);
+ printf(" Received packets: %llu missed packets errors: %i\n", (long long unsigned int)eth->rx_count, eth->num_underflows);
+}
void inline dump_buff(openair0_device *device, char *buff,unsigned int tx_rx_flag, int nsamps) {
-
- char *strptr;
- eth_state_t *eth = (eth_state_t*)device->priv;
- /*need to add ts number of iqs in printf need to fix dump iqs call */
- strptr = (( tx_rx_flag == TX_FLAG) ? "TX" : "RX");
- printf("\n %s, nsamps=%i \n" ,strptr,nsamps);
-
- if (tx_rx_flag == 1) {
- dump_txcounters(device);
- printf(" First %i iqs of TX buffer\n",eth->iqdumpcnt);
- dump_iqs(buff,eth->iqdumpcnt);
- } else {
- dump_rxcounters(device);
- printf(" First %i iqs of RX buffer\n",eth->iqdumpcnt);
- dump_iqs(buff,eth->iqdumpcnt);
- }
-
+
+ char *strptr;
+ eth_state_t *eth = (eth_state_t*)device->priv;
+ /*need to add ts number of iqs in printf need to fix dump iqs call */
+ strptr = (( tx_rx_flag == TX_FLAG) ? "TX" : "RX");
+ printf("\n %s, nsamps=%i \n" ,strptr,nsamps);
+
+ if (tx_rx_flag == 1) {
+ dump_txcounters(device);
+ printf(" First %i iqs of TX buffer\n",eth->iqdumpcnt);
+ dump_iqs(buff,eth->iqdumpcnt);
+ } else {
+ dump_rxcounters(device);
+ printf(" First %i iqs of RX buffer\n",eth->iqdumpcnt);
+ dump_iqs(buff,eth->iqdumpcnt);
+ }
+
}
void dump_iqs(char * buff, int iq_cnt) {
- int i;
- for (i=0;iproc.proc_rxtx[0] == proc ? 0 : 1);
thread_top_init(thread_name,1,850000L,1000000L,2000000L);
@@ -786,6 +787,7 @@ static void* eNB_thread_asynch_rxtx( void* param ) {
PHY_VARS_eNB *eNB = PHY_vars_eNB_g[0][proc->CC_id];
+
int subframe=0, frame=0;
thread_top_init("thread_asynch",1,870000L,1000000L,1000000L);
@@ -1312,7 +1314,9 @@ void init_eNB_proc(int inst) {
for (CC_id=0; CC_idnode_function],eNB_timing[eNB->node_timing]);
+#endif
proc = &eNB->proc;
proc_rxtx = proc->proc_rxtx;
@@ -1374,6 +1378,8 @@ void init_eNB_proc(int inst) {
if ((eNB->node_timing == synch_to_other) ||
(eNB->node_function == NGFI_RRU_IF5) ||
(eNB->node_function == NGFI_RRU_IF4p5))
+
+
pthread_create( &proc->pthread_asynch_rxtx, attr_asynch, eNB_thread_asynch_rxtx, &eNB->proc );
char name[16];
@@ -1606,7 +1612,9 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB->node_timing = node_timing[CC_id];
eNB->abstraction_flag = 0;
eNB->single_thread_flag = single_thread_flag;
+#ifndef OCP_FRAMEWORK
LOG_I(PHY,"Initializing eNB %d CC_id %d : (%s,%s)\n",inst,CC_id,eNB_functions[node_function[CC_id]],eNB_timing[node_timing[CC_id]]);
+#endif
switch (node_function[CC_id]) {
case NGFI_RRU_IF5: