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
63732aa4
Commit
63732aa4
authored
Feb 01, 2017
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
adding RRU/Fronthaul functionality to oaisim
parent
fe2dfe74
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
183 additions
and
32 deletions
+183
-32
cmake_targets/CMakeLists.txt
cmake_targets/CMakeLists.txt
+2
-1
cmake_targets/build_oai
cmake_targets/build_oai
+11
-2
openair1/PHY/defs.h
openair1/PHY/defs.h
+1
-0
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
+1
-1
targets/RT/USER/lte-enb.c
targets/RT/USER/lte-enb.c
+22
-15
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+2
-2
targets/RT/USER/lte-ue.c
targets/RT/USER/lte-ue.c
+7
-3
targets/SIMU/USER/oaisim.c
targets/SIMU/USER/oaisim.c
+20
-6
targets/SIMU/USER/oaisim_functions.c
targets/SIMU/USER/oaisim_functions.c
+117
-2
No files found.
cmake_targets/CMakeLists.txt
View file @
63732aa4
...
@@ -1883,6 +1883,7 @@ add_executable(oaisim
...
@@ -1883,6 +1883,7 @@ add_executable(oaisim
${
OPENAIR_TARGETS
}
/SIMU/USER/oaisim_functions.c
${
OPENAIR_TARGETS
}
/SIMU/USER/oaisim_functions.c
${
OPENAIR_TARGETS
}
/SIMU/USER/event_handler.c
${
OPENAIR_TARGETS
}
/SIMU/USER/event_handler.c
${
OPENAIR_TARGETS
}
/SIMU/USER/oaisim.c
${
OPENAIR_TARGETS
}
/SIMU/USER/oaisim.c
${
OPENAIR_TARGETS
}
/ARCH/COMMON/common_lib.c
${
OPENAIR2_DIR
}
/RRC/NAS/nas_config.c
${
OPENAIR2_DIR
}
/RRC/NAS/nas_config.c
${
OPENAIR2_DIR
}
/RRC/NAS/rb_config.c
${
OPENAIR2_DIR
}
/RRC/NAS/rb_config.c
${
OPENAIR3_DIR
}
/NAS/UE/nas_ue_task.c
${
OPENAIR3_DIR
}
/NAS/UE/nas_ue_task.c
...
@@ -1897,7 +1898,7 @@ add_executable(oaisim
...
@@ -1897,7 +1898,7 @@ add_executable(oaisim
target_include_directories
(
oaisim PUBLIC
${
OPENAIR_TARGETS
}
/SIMU/USER
)
target_include_directories
(
oaisim PUBLIC
${
OPENAIR_TARGETS
}
/SIMU/USER
)
target_link_libraries
(
oaisim
target_link_libraries
(
oaisim
-Wl,--start-group
-Wl,-
ldl,-
-start-group
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS
${
MSC_LIB
}
L2
${
RAL_LIB
}
LIB_NAS_UE SIMU SIMU_ETH SECU_OSA
${
ITTI_LIB
}
${
MIH_LIB
}
RRC_LIB S1AP_LIB S1AP_ENB X2AP_LIB GTPV1U SECU_CN UTIL HASHTABLE SCTP_CLIENT UDP SCHED_LIB PHY LFDS
${
MSC_LIB
}
L2
${
RAL_LIB
}
LIB_NAS_UE SIMU SIMU_ETH SECU_OSA
${
ITTI_LIB
}
${
MIH_LIB
}
-Wl,--end-group
)
-Wl,--end-group
)
...
...
cmake_targets/build_oai
View file @
63732aa4
...
@@ -418,9 +418,9 @@ function main() {
...
@@ -418,9 +418,9 @@ function main() {
if
[
"
$oaisim
"
=
"1"
]
;
then
if
[
"
$oaisim
"
=
"1"
]
;
then
#to be discussed
#to be discussed
# there is no RF device
and no
transport protocol
# there is no RF device transport protocol
HW
=
"None"
HW
=
"None"
TP
=
"
None
"
TP
=
"
ETHERNET
"
if
[
"
$XFORMS
"
==
"True"
]
;
then
if
[
"
$XFORMS
"
==
"True"
]
;
then
PRINT_STATS
=
"True"
PRINT_STATS
=
"True"
...
@@ -666,6 +666,15 @@ function main() {
...
@@ -666,6 +666,15 @@ function main() {
CMakeFiles/oai_nw_drv/oai_nw_drv.ko
$dbin
/oai_nw_drv.ko
CMakeFiles/oai_nw_drv/oai_nw_drv.ko
$dbin
/oai_nw_drv.ko
fi
fi
if
[
"
$TP
"
==
"ETHERNET"
]
;
then
compilations
\
$oaisim_build_dir
oai_eth_transpro
\
liboai_eth_transpro.so
$dbin
/liboai_eth_transpro.so.
$REL
ln
-s
liboai_eth_transpro.so liboai_transpro.so
ln
-s
$dbin
/liboai_eth_transpro.so.
$REL
$dbin
/liboai_transpro.so
echo_info
"liboai_transpro.so is linked with ETHERNET library"
fi
cmake_file
=
$DIR
/oaisim_mme_build_oai/CMakeLists.txt
cmake_file
=
$DIR
/oaisim_mme_build_oai/CMakeLists.txt
cp
$DIR
/oaisim_mme_build_oai/CMakeLists.template
$cmake_file
cp
$DIR
/oaisim_mme_build_oai/CMakeLists.template
$cmake_file
echo
"set ( CMAKE_BUILD_TYPE
$CMAKE_BUILD_TYPE
)"
>>
$cmake_file
echo
"set ( CMAKE_BUILD_TYPE
$CMAKE_BUILD_TYPE
)"
>>
$cmake_file
...
...
openair1/PHY/defs.h
View file @
63732aa4
...
@@ -430,6 +430,7 @@ typedef struct PHY_VARS_eNB_s {
...
@@ -430,6 +430,7 @@ typedef struct PHY_VARS_eNB_s {
eNB_proc_t
proc
;
eNB_proc_t
proc
;
eNB_func_t
node_function
;
eNB_func_t
node_function
;
eNB_timing_t
node_timing
;
eNB_timing_t
node_timing
;
eth_params_t
*
eth_params
;
int
single_thread_flag
;
int
single_thread_flag
;
openair0_rf_map
rf_map
;
openair0_rf_map
rf_map
;
int
abstraction_flag
;
int
abstraction_flag
;
...
...
targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.c
View file @
63732aa4
targets/RT/USER/lte-enb.c
View file @
63732aa4
...
@@ -130,6 +130,8 @@ extern int sync_var;
...
@@ -130,6 +130,8 @@ extern int sync_var;
extern
int
transmission_mode
;
extern
int
transmission_mode
;
extern
int
oaisim_flag
;
//pthread_t main_eNB_thread;
//pthread_t main_eNB_thread;
time_stats_t
softmodem_stats_mt
;
// main thread
time_stats_t
softmodem_stats_mt
;
// main thread
...
@@ -1986,6 +1988,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -1986,6 +1988,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
=
PHY_vars_eNB_g
[
inst
][
CC_id
];
eNB
=
PHY_vars_eNB_g
[
inst
][
CC_id
];
eNB
->
node_function
=
node_function
[
CC_id
];
eNB
->
node_function
=
node_function
[
CC_id
];
eNB
->
node_timing
=
node_timing
[
CC_id
];
eNB
->
node_timing
=
node_timing
[
CC_id
];
eNB
->
eth_params
=
eth_params
+
CC_id
;
eNB
->
abstraction_flag
=
0
;
eNB
->
abstraction_flag
=
0
;
eNB
->
single_thread_flag
=
single_thread_flag
;
eNB
->
single_thread_flag
=
single_thread_flag
;
eNB
->
ts_offset
=
0
;
eNB
->
ts_offset
=
0
;
...
@@ -2011,14 +2014,16 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -2011,14 +2014,16 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
->
start_rf
=
start_rf
;
eNB
->
start_rf
=
start_rf
;
eNB
->
start_if
=
start_if
;
eNB
->
start_if
=
start_if
;
eNB
->
fh_asynch
=
fh_if5_asynch_DL
;
eNB
->
fh_asynch
=
fh_if5_asynch_DL
;
if
(
oaisim_flag
==
0
)
{
ret
=
openair0_device_load
(
&
eNB
->
rfdevice
,
&
openair0_cfg
[
CC_id
]);
ret
=
openair0_device_load
(
&
eNB
->
rfdevice
,
&
openair0_cfg
[
CC_id
]);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize rf device
\n
"
);
printf
(
"Exiting, cannot initialize rf device
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
}
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
)
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
eNB
->
eth_params
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
...
@@ -2038,15 +2043,17 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -2038,15 +2043,17 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
->
fh_asynch
=
fh_if4p5_asynch_DL
;
eNB
->
fh_asynch
=
fh_if4p5_asynch_DL
;
eNB
->
start_rf
=
start_rf
;
eNB
->
start_rf
=
start_rf
;
eNB
->
start_if
=
start_if
;
eNB
->
start_if
=
start_if
;
if
(
oaisim_flag
==
0
)
{
ret
=
openair0_device_load
(
&
eNB
->
rfdevice
,
&
openair0_cfg
[
CC_id
]);
ret
=
openair0_device_load
(
&
eNB
->
rfdevice
,
&
openair0_cfg
[
CC_id
]);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize rf device
\n
"
);
printf
(
"Exiting, cannot initialize rf device
\n
"
);
exit
(
-
1
);
exit
(
-
1
);
}
}
}
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
rfdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
eNB
->
ifdevice
.
host_type
=
RRH_HOST
;
printf
(
"loading transport interface ...
\n
"
);
printf
(
"loading transport interface ...
\n
"
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
)
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
eNB
->
eth_params
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
...
@@ -2103,7 +2110,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -2103,7 +2110,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
)
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
eNB
->
eth_params
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
...
@@ -2125,7 +2132,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -2125,7 +2132,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
->
fh_asynch
=
(
eNB
->
node_timing
==
synch_to_other
)
?
fh_if4p5_asynch_UL
:
NULL
;
eNB
->
fh_asynch
=
(
eNB
->
node_timing
==
synch_to_other
)
?
fh_if4p5_asynch_UL
:
NULL
;
eNB
->
rfdevice
.
host_type
=
BBU_HOST
;
eNB
->
rfdevice
.
host_type
=
BBU_HOST
;
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
)
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
eNB
->
eth_params
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
...
@@ -2151,7 +2158,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
...
@@ -2151,7 +2158,7 @@ void init_eNB(eNB_func_t node_function[], eNB_timing_t node_timing[],int nb_inst
eNB
->
rfdevice
.
host_type
=
BBU_HOST
;
eNB
->
rfdevice
.
host_type
=
BBU_HOST
;
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
eNB
->
ifdevice
.
host_type
=
BBU_HOST
;
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
(
eth_params
+
CC_id
)
);
ret
=
openair0_transport_load
(
&
eNB
->
ifdevice
,
&
openair0_cfg
[
CC_id
],
eNB
->
eth_params
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
printf
(
"openair0_transport_init returns %d for CC_id %d
\n
"
,
ret
,
CC_id
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
...
...
targets/RT/USER/lte-softmodem.c
View file @
63732aa4
...
@@ -112,7 +112,7 @@ extern int netlink_init(void);
...
@@ -112,7 +112,7 @@ extern int netlink_init(void);
// In lte-enb.c
// In lte-enb.c
extern
int
setup_eNB_buffers
(
PHY_VARS_eNB
**
phy_vars_eNB
,
openair0_config_t
*
openair0_cfg
);
extern
int
setup_eNB_buffers
(
PHY_VARS_eNB
**
phy_vars_eNB
,
openair0_config_t
*
openair0_cfg
);
extern
void
init_eNB
(
eNB_func_t
*
,
eNB_timing_t
*
,
int
,
eth_params_t
*
,
int
,
int
);
extern
void
init_eNB
(
eNB_func_t
*
,
eNB_timing_t
*
,
int
)
,
eth_params_t
*
,
int
,
int
);
extern
void
stop_eNB
(
int
);
extern
void
stop_eNB
(
int
);
extern
void
kill_eNB_proc
(
void
);
extern
void
kill_eNB_proc
(
void
);
...
@@ -285,7 +285,7 @@ double cpuf;
...
@@ -285,7 +285,7 @@ double cpuf;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
int
oaisim_flag
=
0
;
/*---------------------BMC: timespec helpers -----------------------------*/
/*---------------------BMC: timespec helpers -----------------------------*/
...
...
targets/RT/USER/lte-ue.c
View file @
63732aa4
...
@@ -110,6 +110,8 @@ extern int rx_input_level_dBm;
...
@@ -110,6 +110,8 @@ extern int rx_input_level_dBm;
extern
uint8_t
exit_missed_slots
;
extern
uint8_t
exit_missed_slots
;
extern
uint64_t
num_missed_slots
;
// counter for the number of missed slots
extern
uint64_t
num_missed_slots
;
// counter for the number of missed slots
extern
int
oaisim_flag
;
extern
void
exit_fun
(
const
char
*
s
);
extern
void
exit_fun
(
const
char
*
s
);
#define KHz (1000UL)
#define KHz (1000UL)
...
@@ -180,10 +182,12 @@ void init_UE(int nb_inst) {
...
@@ -180,10 +182,12 @@ void init_UE(int nb_inst) {
sleep
(
1
);
sleep
(
1
);
UE
=
PHY_vars_UE_g
[
inst
][
0
];
UE
=
PHY_vars_UE_g
[
inst
][
0
];
if
(
oaisim_flag
==
0
)
{
ret
=
openair0_device_load
(
&
(
UE
->
rfdevice
),
&
openair0_cfg
[
0
]);
ret
=
openair0_device_load
(
&
(
UE
->
rfdevice
),
&
openair0_cfg
[
0
]);
if
(
ret
!=
0
){
if
(
ret
!=
0
){
exit_fun
(
"Error loading device library"
);
exit_fun
(
"Error loading device library"
);
}
}
}
UE
->
rfdevice
.
host_type
=
BBU_HOST
;
UE
->
rfdevice
.
host_type
=
BBU_HOST
;
// UE->rfdevice.type = NONE_DEV;
// UE->rfdevice.type = NONE_DEV;
error_code
=
pthread_create
(
&
UE
->
proc
.
pthread_ue
,
&
UE
->
proc
.
attr_ue
,
UE_thread
,
NULL
);
error_code
=
pthread_create
(
&
UE
->
proc
.
pthread_ue
,
&
UE
->
proc
.
attr_ue
,
UE_thread
,
NULL
);
...
...
targets/SIMU/USER/oaisim.c
View file @
63732aa4
...
@@ -1286,8 +1286,26 @@ main (int argc, char **argv)
...
@@ -1286,8 +1286,26 @@ main (int argc, char **argv)
init_openair2
();
init_openair2
();
init_openair0
();
init_ocm
();
init_ocm
();
#if defined(ENABLE_ITTI)
// Handle signals until all tasks are terminated
// Note: Cannot handle both RRU/RAU and eNB at the same time, if the first "eNB" is an RRU/RAU, no NAS
if
(
oai_emulation
.
info
.
node_function
[
0
]
<
NGFI_RAU_IF4p5
)
{
if
(
create_tasks
(
oai_emulation
.
info
.
nb_enb_local
,
oai_emulation
.
info
.
nb_ue_local
)
<
0
)
exit
(
-
1
);
// need a softer mode
}
else
{
if
(
create_tasks
(
0
,
oai_emulation
.
info
.
nb_ue_local
)
<
0
)
exit
(
-
1
);
// need a softer mode
}
#endif
// wait for all threads to startup
// wait for all threads to startup
sleep
(
3
);
sleep
(
3
);
printf
(
"Sending sync to all threads
\n
"
);
printf
(
"Sending sync to all threads
\n
"
);
...
@@ -1327,12 +1345,8 @@ main (int argc, char **argv)
...
@@ -1327,12 +1345,8 @@ main (int argc, char **argv)
#if defined(ENABLE_ITTI)
#if defined(ENABLE_ITTI)
// Handle signals until all tasks are terminated
if
(
create_tasks
(
oai_emulation
.
info
.
nb_enb_local
,
oai_emulation
.
info
.
nb_ue_local
)
>=
0
)
{
itti_wait_tasks_end
();
itti_wait_tasks_end
();
}
else
{
exit
(
-
1
);
// need a softer mode
}
#else
#else
...
...
targets/SIMU/USER/oaisim_functions.c
View file @
63732aa4
...
@@ -77,6 +77,9 @@
...
@@ -77,6 +77,9 @@
# include "s1ap_eNB.h"
# include "s1ap_eNB.h"
#endif
#endif
#include "../../ARCH/COMMON/common_lib.h"
#include "../../ARCH/ETHERNET/USERSPACE/LIB/if_defs.h"
#ifdef SMBV
#ifdef SMBV
extern
uint8_t
config_smbv
;
extern
uint8_t
config_smbv
;
extern
char
smbv_ip
[
16
];
extern
char
smbv_ip
[
16
];
...
@@ -88,6 +91,8 @@ extern char smbv_ip[16];
...
@@ -88,6 +91,8 @@ extern char smbv_ip[16];
#define K 2 // averaging coefficient
#define K 2 // averaging coefficient
#define TARGET_SF_TIME_NS 1000000 // 1ms = 1000000 ns
#define TARGET_SF_TIME_NS 1000000 // 1ms = 1000000 ns
#define min(a,b) ((a)<(b)?(a):(b))
int
otg_times
=
0
;
int
otg_times
=
0
;
int
if_times
=
0
;
int
if_times
=
0
;
int
for_times
=
0
;
int
for_times
=
0
;
...
@@ -170,11 +175,14 @@ extern int xforms;
...
@@ -170,11 +175,14 @@ extern int xforms;
extern
uint32_t
downlink_frequency
[
MAX_NUM_CCs
][
4
];
extern
uint32_t
downlink_frequency
[
MAX_NUM_CCs
][
4
];
extern
int32_t
uplink_frequency_offset
[
MAX_NUM_CCs
][
4
];
extern
int32_t
uplink_frequency_offset
[
MAX_NUM_CCs
][
4
];
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
);
eth_params_t
*
eth_params
;
void
init_eNB
(
eNB_func_t
node_function
[],
eNB_timing_t
node_timing
[],
int
nb_inst
,
eth_params_t
*
,
int
,
int
);
void
stop_eNB
(
int
nb_inst
);
void
stop_eNB
(
int
nb_inst
);
const
Enb_properties_array_t
*
enb_properties
;
const
Enb_properties_array_t
*
enb_properties
;
int
oaisim_flag
=
1
;
void
get_simulation_options
(
int
argc
,
char
*
argv
[])
void
get_simulation_options
(
int
argc
,
char
*
argv
[])
{
{
...
@@ -787,6 +795,32 @@ void get_simulation_options(int argc, char *argv[])
...
@@ -787,6 +795,32 @@ void get_simulation_options(int argc, char *argv[])
"Number of eNB is greater than eNB defined in configuration file %s (%d/%d)!"
,
"Number of eNB is greater than eNB defined in configuration file %s (%d/%d)!"
,
conf_config_file_name
,
oai_emulation
.
info
.
nb_enb_local
,
enb_properties
->
number
);
conf_config_file_name
,
oai_emulation
.
info
.
nb_enb_local
,
enb_properties
->
number
);
eth_params
=
(
eth_params_t
*
)
malloc
(
enb_properties
->
properties
[
0
]
->
nb_rrh_gw
*
sizeof
(
eth_params_t
));
memset
(
eth_params
,
0
,
enb_properties
->
properties
[
0
]
->
nb_rrh_gw
*
sizeof
(
eth_params_t
));
for
(
int
j
=
0
;
j
<
enb_properties
->
properties
[
0
]
->
nb_rrh_gw
;
j
++
)
{
if
(
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
active
==
1
)
{
// local_remote_radio = BBU_REMOTE_RADIO_HEAD;
(
eth_params
+
j
)
->
local_if_name
=
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
rrh_gw_if_name
;
(
eth_params
+
j
)
->
my_addr
=
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
local_address
;
(
eth_params
+
j
)
->
my_port
=
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
local_port
;
(
eth_params
+
j
)
->
remote_addr
=
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
remote_address
;
(
eth_params
+
j
)
->
remote_port
=
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
remote_port
;
if
(
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
raw
==
1
)
{
(
eth_params
+
j
)
->
transp_preference
=
ETH_RAW_MODE
;
}
else
if
(
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
rawif4p5
==
1
)
{
(
eth_params
+
j
)
->
transp_preference
=
ETH_RAW_IF4p5_MODE
;
}
else
if
(
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
udpif4p5
==
1
)
{
(
eth_params
+
j
)
->
transp_preference
=
ETH_UDP_IF4p5_MODE
;
}
else
if
(
enb_properties
->
properties
[
0
]
->
rrh_gw_config
[
j
].
rawif5_mobipass
==
1
)
{
(
eth_params
+
j
)
->
transp_preference
=
ETH_RAW_IF5_MOBIPASS
;
}
else
{
(
eth_params
+
j
)
->
transp_preference
=
ETH_UDP_MODE
;
}
}
}
/* Update some simulation parameters */
/* Update some simulation parameters */
oai_emulation
.
info
.
frame_type
[
0
]
=
enb_properties
->
properties
[
0
]
->
frame_type
[
0
];
oai_emulation
.
info
.
frame_type
[
0
]
=
enb_properties
->
properties
[
0
]
->
frame_type
[
0
];
oai_emulation
.
info
.
tdd_config
[
0
]
=
enb_properties
->
properties
[
0
]
->
tdd_config
[
0
];
oai_emulation
.
info
.
tdd_config
[
0
]
=
enb_properties
->
properties
[
0
]
->
tdd_config
[
0
];
...
@@ -1126,6 +1160,85 @@ int UE_trx_write(openair0_device *device,openair0_timestamp timestamp, void **bu
...
@@ -1126,6 +1160,85 @@ int UE_trx_write(openair0_device *device,openair0_timestamp timestamp, void **bu
return
(
nsamps
);
return
(
nsamps
);
}
}
void
init_openair0
(
void
);
openair0_config_t
openair0_cfg
[
MAX_CARDS
];
void
init_openair0
()
{
int
card
;
int
i
;
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
openair0_cfg
[
card
].
configFilename
=
NULL
;
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
if
(
frame_parms
[
0
]
->
threequarter_fs
)
{
openair0_cfg
[
card
].
sample_rate
=
23.04e6
;
openair0_cfg
[
card
].
samples_per_frame
=
230400
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
else
{
openair0_cfg
[
card
].
sample_rate
=
30.72e6
;
openair0_cfg
[
card
].
samples_per_frame
=
307200
;
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
}
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
openair0_cfg
[
card
].
sample_rate
=
15.36e6
;
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
openair0_cfg
[
card
].
tx_bw
=
5e6
;
openair0_cfg
[
card
].
rx_bw
=
5e6
;
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
25
)
{
openair0_cfg
[
card
].
sample_rate
=
7.68e6
;
openair0_cfg
[
card
].
samples_per_frame
=
76800
;
openair0_cfg
[
card
].
tx_bw
=
2.5e6
;
openair0_cfg
[
card
].
rx_bw
=
2.5e6
;
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
{
openair0_cfg
[
card
].
sample_rate
=
1.92e6
;
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
}
if
(
frame_parms
[
0
]
->
frame_type
==
TDD
)
openair0_cfg
[
card
].
duplex_mode
=
duplex_mode_TDD
;
else
//FDD
openair0_cfg
[
card
].
duplex_mode
=
duplex_mode_FDD
;
openair0_cfg
[
card
].
remote_addr
=
(
eth_params
+
card
)
->
remote_addr
;
openair0_cfg
[
card
].
remote_port
=
(
eth_params
+
card
)
->
remote_port
;
openair0_cfg
[
card
].
my_addr
=
(
eth_params
+
card
)
->
my_addr
;
openair0_cfg
[
card
].
my_port
=
(
eth_params
+
card
)
->
my_port
;
printf
(
"HW: Configuring card %d, nb_antennas_tx/rx %d/%d
\n
"
,
card
,
PHY_vars_eNB_g
[
0
][
0
]
->
frame_parms
.
nb_antennas_tx
,
PHY_vars_eNB_g
[
0
][
0
]
->
frame_parms
.
nb_antennas_rx
);
openair0_cfg
[
card
].
Mod_id
=
0
;
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
[
0
]
->
N_RB_DL
;
openair0_cfg
[
card
].
tx_num_channels
=
min
(
2
,
PHY_vars_eNB_g
[
0
][
0
]
->
frame_parms
.
nb_antennas_tx
);
openair0_cfg
[
card
].
rx_num_channels
=
min
(
2
,
PHY_vars_eNB_g
[
0
][
0
]
->
frame_parms
.
nb_antennas_rx
);
for
(
i
=
0
;
i
<
4
;
i
++
)
{
openair0_cfg
[
card
].
rx_gain
[
i
]
=
PHY_vars_eNB_g
[
0
][
0
]
->
rx_total_gain_dB
;
printf
(
"Card %d, channel %d, Setting tx_gain %f, rx_gain %f, tx_freq %f, rx_freq %f
\n
"
,
card
,
i
,
openair0_cfg
[
card
].
tx_gain
[
i
],
openair0_cfg
[
card
].
rx_gain
[
i
],
openair0_cfg
[
card
].
tx_freq
[
i
],
openair0_cfg
[
card
].
rx_freq
[
i
]);
}
}
}
void
init_devices
(
void
){
void
init_devices
(
void
){
module_id_t
UE_id
,
eNB_id
;
module_id_t
UE_id
,
eNB_id
;
...
@@ -1270,7 +1383,7 @@ void init_openair1(void)
...
@@ -1270,7 +1383,7 @@ void init_openair1(void)
init_devices
();
init_devices
();
init_eNB
(
oai_emulation
.
info
.
node_function
,
oai_emulation
.
info
.
node_timing
,
NB_eNB_INST
);
init_eNB
(
oai_emulation
.
info
.
node_function
,
oai_emulation
.
info
.
node_timing
,
NB_eNB_INST
,
eth_params
,
1
,
0
);
// init_ue_status();
// init_ue_status();
for
(
UE_id
=
0
;
UE_id
<
NB_UE_INST
;
UE_id
++
)
{
for
(
UE_id
=
0
;
UE_id
<
NB_UE_INST
;
UE_id
++
)
{
...
@@ -1820,6 +1933,7 @@ void init_time()
...
@@ -1820,6 +1933,7 @@ void init_time()
td_avg
=
TARGET_SF_TIME_NS
;
td_avg
=
TARGET_SF_TIME_NS
;
}
}
/*
int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params) {
int openair0_transport_load(openair0_device *device, openair0_config_t *openair0_cfg, eth_params_t * eth_params) {
return(0);
return(0);
...
@@ -1831,3 +1945,4 @@ int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cf
...
@@ -1831,3 +1945,4 @@ int openair0_device_load(openair0_device *device, openair0_config_t *openair0_cf
return(0);
return(0);
}
}
*/
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