Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG UE
Commits
6a98e5d5
Commit
6a98e5d5
authored
Oct 12, 2016
by
Rohit Gupta
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'enhancement-10-harmony-lts' into develop
parents
a0ed8f20
c62b9f46
Changes
27
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
574 additions
and
458 deletions
+574
-458
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+16
-3
cmake_targets/at_commands/CMakeLists.txt
cmake_targets/at_commands/CMakeLists.txt
+18
-0
cmake_targets/autotests/README.txt
cmake_targets/autotests/README.txt
+0
-1
cmake_targets/autotests/test_case_list.xml
cmake_targets/autotests/test_case_list.xml
+1
-1
cmake_targets/build_oai
cmake_targets/build_oai
+1
-0
cmake_targets/tools/build_helper
cmake_targets/tools/build_helper
+56
-58
cmake_targets/tools/init_exmimo2
cmake_targets/tools/init_exmimo2
+0
-8
common/utils/itti/assertions.h
common/utils/itti/assertions.h
+1
-1
common/utils/itti/backtrace.c
common/utils/itti/backtrace.c
+2
-1
openair1/PHY/defs.h
openair1/PHY/defs.h
+12
-1
openair1/PHY/extern.h
openair1/PHY/extern.h
+7
-1
openair1/PHY/impl_defs_lte.h
openair1/PHY/impl_defs_lte.h
+8
-2
openair1/PHY/vars.h
openair1/PHY/vars.h
+9
-0
openair2/COMMON/s1ap_messages_types.h
openair2/COMMON/s1ap_messages_types.h
+4
-1
openair2/ENB_APP/enb_config.h
openair2/ENB_APP/enb_config.h
+9
-2
openair2/RRC/LITE/rrc_eNB.c
openair2/RRC/LITE/rrc_eNB.c
+6
-0
openair2/UTIL/OPT/opt.h
openair2/UTIL/OPT/opt.h
+4
-0
openair2/UTIL/OSA/osa_stream_eea.c
openair2/UTIL/OSA/osa_stream_eea.c
+5
-0
openair2/X2AP/x2ap_common.h
openair2/X2AP/x2ap_common.h
+2
-0
openair3/SECU/nas_stream_eea2.c
openair3/SECU/nas_stream_eea2.c
+5
-0
openair3/TEST/test_aes128_ctr_decrypt.c
openair3/TEST/test_aes128_ctr_decrypt.c
+6
-1
openair3/TEST/test_aes128_ctr_encrypt.c
openair3/TEST/test_aes128_ctr_encrypt.c
+5
-0
targets/ARCH/COMMON/common_lib.h
targets/ARCH/COMMON/common_lib.h
+8
-1
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
+1
-0
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+373
-373
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
+4
-0
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+11
-3
No files found.
cmake_targets/CMakeLists.txt
View file @
6a98e5d5
...
...
@@ -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"
)
...
...
cmake_targets/at_commands/CMakeLists.txt
View file @
6a98e5d5
...
...
@@ -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
)
...
...
cmake_targets/autotests/README.txt
View file @
6a98e5d5
OAI Test PLAN
#UNDER CONSTRUCTION. Not correct at the moment
Obj.# Case# Test# Description
...
...
cmake_targets/autotests/test_case_list.xml
View file @
6a98e5d5
...
...
@@ -7,7 +7,7 @@
<GitOpenair-cnRepo>
https://gitlab.eurecom.fr/oai/openair-cn.git
</GitOpenair-cnRepo>
<GitOAI5GRepoBranch>
develop
</GitOAI5GRepoBranch>
<GitOpenair-cnRepoBranch>
develop
</GitOpenair-cnRepoBranch>
<CleanUpOldProgs>
oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim
configure_cots*
wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd starthss start_ltebox stop_ltebox configure_cots_sony_experia_m4_ue configure_cots_huaweiE398_ue configure_cots_bandrich_ue
</CleanUpOldProgs>
<CleanUpOldProgs>
oaisim oaisim_nos1 lte-softmodem lte-softmodem-nos1 mme_gw run_epc auth_request run_hss oai_hss mme spgw hss hss_sim wvdial iperf iperf_script iperf_script_phone ping tshark rrh_gw iperf3 iperf3_script iperf3_script_phone pppd starthss start_ltebox stop_ltebox configure_cots_sony_experia_m4_ue configure_cots_huaweiE398_ue configure_cots_bandrich_ue
</CleanUpOldProgs>
<CleanUpAluLteBox>
sudo -S -E /opt/ltebox/tools/stop_ltebox
</CleanUpAluLteBox>
<ExmimoRfStop>
exmimo_pci=`lspci -m | grep Xilinx`; if [ -n "$exmimo_pci" ] ; then $OPENAIR_DIR/cmake_targets/build_oai -w EXMIMO -c; sudo -S -E $OPENAIR_DIR/cmake_targets/tools/stop_exmimo2; fi; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_bandrich_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_huaweiE398_ue.py --reset-ue; sudo -E $OPENAIR_DIR/cmake_targets/autotests/tools/configure_cots_sony_experia_m4_ue.py --stop-ue; uname -a; sudo -E dmesg
</ExmimoRfStop>
<Timeout_execution>
36000
</Timeout_execution>
...
...
cmake_targets/build_oai
View file @
6a98e5d5
...
...
@@ -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
...
...
cmake_targets/tools/build_helper
View file @
6a98e5d5
...
...
@@ -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`
...
...
cmake_targets/tools/init_exmimo2
View file @
6a98e5d5
...
...
@@ -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
"
$@
"
common/utils/itti/assertions.h
View file @
6a98e5d5
...
...
@@ -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)
...
...
common/utils/itti/backtrace.c
View file @
6a98e5d5
...
...
@@ -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
);
...
...
openair1/PHY/defs.h
View file @
6a98e5d5
...
...
@@ -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 <pthread.h>
...
...
@@ -130,6 +137,9 @@ static inline void* malloc16_clear( size_t size )
#define NB_BANDS_MAX 8
#ifdef OCP_FRAMEWORK
#include <enums.h>
#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__
openair1/PHY/extern.h
View file @
6a98e5d5
...
...
@@ -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
;
...
...
openair1/PHY/impl_defs_lte.h
View file @
6a98e5d5
...
...
@@ -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
{
...
...
openair1/PHY/vars.h
View file @
6a98e5d5
...
...
@@ -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 <enums.h>
#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
)));
...
...
openair2/COMMON/s1ap_messages_types.h
View file @
6a98e5d5
...
...
@@ -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
;
...
...
openair2/ENB_APP/enb_config.h
View file @
6a98e5d5
...
...
@@ -32,6 +32,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <libconfig.h>
#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
{
...
...
openair2/RRC/LITE/rrc_eNB.c
View file @
6a98e5d5
...
...
@@ -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"
);
...
...
openair2/UTIL/OPT/opt.h
View file @
6a98e5d5
...
...
@@ -55,12 +55,16 @@ This header file must be included */
#include "PHY/impl_defs_lte.h"
#endif
#ifdef OCP_FRAMEWORK
#include <enums.h>
#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
,
...
...
openair2/UTIL/OSA/osa_stream_eea.c
View file @
6a98e5d5
...
...
@@ -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
,
...
...
openair2/X2AP/x2ap_common.h
View file @
6a98e5d5
...
...
@@ -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
;
...
...
openair3/SECU/nas_stream_eea2.c
View file @
6a98e5d5
...
...
@@ -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
,
...
...
openair3/TEST/test_aes128_ctr_decrypt.c
View file @
6a98e5d5
...
...
@@ -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
,
...
...
openair3/TEST/test_aes128_ctr_encrypt.c
View file @
6a98e5d5
...
...
@@ -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
,
...
...
targets/ARCH/COMMON/common_lib.h
View file @
6a98e5d5
...
...
@@ -65,10 +65,13 @@ typedef enum {
max_gain
=
0
,
med_gain
,
byp_gain
}
rx_gain_t
;
#if OCP_FRAMEWORK
#include <enums.h>
#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 <enums.h>
#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
*/
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/eth_raw.c
View file @
6a98e5d5
...
...
@@ -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 */
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
6a98e5d5
...
...
@@ -27,7 +27,7 @@
* \company Eurecom
* \maintainer: navid.nikaein@eurecom.fr
* \note
* \warning
* \warning
*/
#include <arpa/inet.h>
...
...
@@ -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
)
{
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
;
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
)
{
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_raw_IF4p5
(
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
;
}
}
/* adjust MTU wrt number of samples per packet */
if
(
ethernet_tune
(
device
,
MTU_SIZE
,
RAW_IF4p5_PRACH_SIZE_BYTES
)
!=
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
;
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_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
;
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
;
/* 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
;
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
;
}
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
);
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
));
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
{
perror
(
"[ETHERNET] Can't set pause parameters
\n
"
);
printf
(
"transport_init: Unknown transport preference %d - default to RAW"
,
eth_params
->
transp_preference
);
eth
->
flags
=
ETH_RAW_MODE
;
}
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
);
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
{
perror
(
"[ETHERNET] Can't set ring parameters
\n
"
);
//device->trx_write_func = trx_eth_write_udp_IF4p5;
//device->trx_read_func = trx_eth_read_udp_IF4p5;
}
break
;
default:
break
;
}
return
0
;
}
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
;
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
));
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
;
/* 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
;
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
;
i
<
iq_cnt
;
i
++
)
{
printf
(
"s%02i: Q=%+ij I=%+i%s"
,
i
,
((
iqoai_t
*
)(
buff
))[
i
].
q
,
((
iqoai_t
*
)(
buff
))[
i
].
i
,
((
i
+
1
)
%
3
==
0
)
?
"
\n
"
:
" "
);
}
int
i
;
for
(
i
=
0
;
i
<
iq_cnt
;
i
++
)
{
printf
(
"s%02i: Q=%+ij I=%+i%s"
,
i
,
((
iqoai_t
*
)(
buff
))[
i
].
q
,
((
iqoai_t
*
)(
buff
))[
i
].
i
,
((
i
+
1
)
%
3
==
0
)
?
"
\n
"
:
" "
);
}
}
targets/ARCH/ETHERNET/USERSPACE/LIB/if_defs.h
View file @
6a98e5d5
...
...
@@ -37,11 +37,15 @@
#include "PHY/LTE_TRANSPORT/if5_tools.h"
// ETH transport preference modes
#ifdef OCP_FRAMEWORK
#include "enums.h"
#else
#define ETH_UDP_MODE 0
#define ETH_RAW_MODE 1
#define ETH_UDP_IF4p5_MODE 2
#define ETH_RAW_IF4p5_MODE 3
#define ETH_RAW_IF5_MOBIPASS 4
#endif
// Time domain RRH packet sizes
#define MAC_HEADER_SIZE_BYTES (sizeof(struct ether_header))
...
...
targets/RT/USER/lte-enb.c
View file @
6a98e5d5
...
...
@@ -151,6 +151,8 @@ static struct {
volatile
uint8_t
phy_proc_CC_id
;
}
sync_phy_proc
;
extern
double
cpuf
;
void
exit_fun
(
const
char
*
s
);
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
,
eth_params_t
*
,
int
);
...
...
@@ -182,11 +184,9 @@ 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
"
);
exit
_fun
(
"Error setting deadline scheduler"
);
exit
(
1
);
}
LOG_I
(
HW
,
"[SCHED] eNB %s deadline thread started on CPU %d
\n
"
,
thread_name
,
sched_getcpu
()
);
#else //LOW_LATENCY
int
policy
,
s
,
j
;
struct
sched_param
sparam
;
...
...
@@ -582,6 +582,7 @@ static void* eNB_thread_rxtx( void* param ) {
// set default return value
eNB_thread_rxtx_status
=
0
;
sprintf
(
thread_name
,
"RXn_TXnp4_%d
\n
"
,
&
eNB
->
proc
.
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_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
eNB
=
PHY_vars_eNB_g
[
inst
][
CC_id
];
#ifndef OCP_FRAMEWORK
LOG_I
(
PHY
,
"Initializing eNB %d CC_id %d (%s,%s),
\n
"
,
inst
,
CC_id
,
eNB_functions
[
eNB
->
node_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
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment