Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
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
ZhouShuya
OpenXG-RAN
Commits
72ff627a
Commit
72ff627a
authored
9 years ago
by
Navid Nikaein
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add eNB configuration parameters for the fronthaul
parent
a701d184
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
156 additions
and
141 deletions
+156
-141
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+73
-0
openair2/ENB_APP/enb_config.h
openair2/ENB_APP/enb_config.h
+18
-0
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+65
-141
No files found.
openair2/ENB_APP/enb_config.c
View file @
72ff627a
...
...
@@ -170,6 +170,14 @@
#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U "ENB_IPV4_ADDRESS_FOR_S1U"
#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U "ENB_PORT_FOR_S1U"
#define ENB_CONFIG_STRING_RRH_GW_CONFIG "rrh_gw_config"
#define ENB_CONFIG_STRING_RRH_GW_LOCAL_IF_NAME "local_if_name"
#define ENB_CONFIG_STRING_RRH_GW_LOCAL_ADDRESS "local_address"
#define ENB_CONFIG_STRING_RRH_GW_REMOTE_ADDRESS "remote_address"
#define ENB_CONFIG_STRING_RRH_GW_LOCAL_PORT "local_port"
#define ENB_CONFIG_STRING_RRH_GW_REMOTE_PORT "remote_port"
#define ENB_CONFIG_STRING_RRH_GW_ACTIVE "active"
#define ENB_CONFIG_STRING_RRH_GW_PREFERENCE "preference"
#define ENB_CONFIG_STRING_ASN1_VERBOSITY "Asn1_verbosity"
#define ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE "none"
...
...
@@ -275,6 +283,18 @@ static void enb_config_display(void)
printf
(
"
\t
MNC:
\t
%02"
PRIu16
":
\n
"
,
enb_properties
.
properties
[
i
]
->
mnc
);
}
for
(
j
=
0
;
j
<
enb_properties
.
properties
[
i
]
->
nb_rrh_gw
;
j
++
)
{
if
(
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
active
==
1
){
printf
(
"
\n\t
RRH GW %d config for eNB %u:
\n\n
"
,
j
,
i
);
printf
(
"
\t
interface name :
\t
%s:
\n
"
,
enb_properties
.
properties
[
i
]
->
rrh_gw_if_name
);
printf
(
"
\t
local address :
\t
%s:
\n
"
,
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
local_address
);
printf
(
"
\t
local port :
\t
%d:
\n
"
,
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
local_port
);
printf
(
"
\t
remote address :
\t
%s:
\n
"
,
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_address
);
printf
(
"
\t
remote port :
\t
%d:
\n
"
,
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_port
);
printf
(
"
\t
transport :
\t
%s Ethernet:
\n\n
"
,(
enb_properties
.
properties
[
i
]
->
rrh_gw_config
[
j
].
raw
==
1
)
?
"RAW"
:
"UDP"
);
}
}
for
(
j
=
0
;
j
<
enb_properties
.
properties
[
i
]
->
nb_cc
;
j
++
)
{
printf
(
"
\t
eutra band for CC %d:
\t
%"
PRId16
":
\n
"
,
j
,
enb_properties
.
properties
[
i
]
->
eutra_band
[
j
]);
printf
(
"
\t
downlink freq for CC %d:
\t
%"
PRIu64
":
\n
"
,
j
,
enb_properties
.
properties
[
i
]
->
downlink_frequency
[
j
]);
...
...
@@ -455,6 +475,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
config_setting_t
*
setting_srb1
=
NULL
;
config_setting_t
*
setting_mme_addresses
=
NULL
;
config_setting_t
*
setting_mme_address
=
NULL
;
config_setting_t
*
setting_rrh_gws
=
NULL
;
config_setting_t
*
setting_rrh_gw
=
NULL
;
config_setting_t
*
setting_enb
=
NULL
;
config_setting_t
*
setting_otg
=
NULL
;
config_setting_t
*
subsetting_otg
=
NULL
;
...
...
@@ -462,6 +484,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
int
enb_properties_index
=
0
;
int
num_enbs
=
0
;
int
num_mme_address
=
0
;
int
num_rrh_gw
=
0
;
int
num_otg_elements
=
0
;
int
num_component_carriers
=
0
;
int
i
=
0
;
...
...
@@ -558,10 +581,15 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
libconfig_int
my_int
;
char
*
if_name
=
NULL
;
char
*
ipv4
=
NULL
;
char
*
ipv4_remote
=
NULL
;
char
*
ipv6
=
NULL
;
char
*
active
=
NULL
;
char
*
preference
=
NULL
;
libconfig_int
local_port
=
0
;
libconfig_int
remote_port
=
0
;
const
char
*
active_enb
[
MAX_ENB
];
char
*
enb_interface_name_for_S1U
=
NULL
;
char
*
enb_ipv4_address_for_S1U
=
NULL
;
...
...
@@ -2136,6 +2164,51 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
enb_properties
.
properties
[
enb_properties_index
]
->
mme_ip_address
[
j
].
ipv6
=
1
;
}
}
// RRH Config
setting_rrh_gws
=
config_setting_get_member
(
setting_enb
,
ENB_CONFIG_STRING_RRH_GW_CONFIG
);
num_rrh_gw
=
config_setting_length
(
setting_rrh_gws
);
enb_properties
.
properties
[
enb_properties_index
]
->
nb_rrh_gw
=
0
;
for
(
j
=
0
;
j
<
num_rrh_gw
;
j
++
)
{
setting_rrh_gw
=
config_setting_get_elem
(
setting_rrh_gws
,
j
);
if
(
!
(
config_setting_lookup_string
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_LOCAL_IF_NAME
,
(
const
char
**
)
&
if_name
)
&&
config_setting_lookup_string
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_LOCAL_ADDRESS
,
(
const
char
**
)
&
ipv4
)
&&
config_setting_lookup_string
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_REMOTE_ADDRESS
,
(
const
char
**
)
&
ipv4_remote
)
&&
config_setting_lookup_int
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_LOCAL_PORT
,
&
local_port
)
&&
config_setting_lookup_int
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_REMOTE_PORT
,
&
remote_port
)
&&
config_setting_lookup_string
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_ACTIVE
,
(
const
char
**
)
&
active
)
&&
config_setting_lookup_string
(
setting_rrh_gw
,
ENB_CONFIG_STRING_RRH_GW_PREFERENCE
,
(
const
char
**
)
&
preference
)
)
)
{
AssertError
(
0
,
parse_errors
++
,
"Failed to parse eNB configuration file %s, %u th enb %u the RRH GW address !
\n
"
,
lib_config_file_name_pP
,
i
,
j
);
continue
;
// FIXME will prevent segfaults below, not sure what happens at function exit...
}
enb_properties
.
properties
[
enb_properties_index
]
->
nb_rrh_gw
+=
1
;
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_if_name
=
strdup
(
if_name
);
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
local_address
=
strdup
(
ipv4
);
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
remote_address
=
strdup
(
ipv4_remote
);
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
local_port
=
local_port
;
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
remote_port
=
remote_port
;
if
(
strcmp
(
active
,
"yes"
)
==
0
)
{
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
active
=
1
;
}
if
(
strcmp
(
preference
,
"udp"
)
==
0
)
{
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
udp
=
1
;
}
else
if
(
strcmp
(
preference
,
"raw"
)
==
0
)
{
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
raw
=
1
;
}
else
{
//if (strcmp(preference, "no") == 0)
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
udp
=
1
;
enb_properties
.
properties
[
enb_properties_index
]
->
rrh_gw_config
[
j
].
raw
=
1
;
}
}
// SCTP SETTING
enb_properties
.
properties
[
enb_properties_index
]
->
sctp_out_streams
=
SCTP_OUT_STREAMS
;
...
...
This diff is collapsed.
Click to expand it.
openair2/ENB_APP/enb_config.h
View file @
72ff627a
...
...
@@ -78,6 +78,17 @@ typedef struct mme_ip_address_s {
char
*
ipv6_address
;
}
mme_ip_address_t
;
typedef
struct
rrh_gw_config_s
{
unsigned
udp
:
1
;
unsigned
raw
:
1
;
unsigned
active
:
1
;
char
*
local_address
;
char
*
remote_address
;
uint16_t
local_port
;
uint16_t
remote_port
;
}
rrh_gw_config_t
;
typedef
struct
Enb_properties_s
{
/* Unique eNB_id to identify the eNB within EPC.
* For macro eNB ids this field should be 20 bits long.
...
...
@@ -203,6 +214,13 @@ typedef struct Enb_properties_s {
char
*
enb_interface_name_for_S1_MME
;
in_addr_t
enb_ipv4_address_for_S1_MME
;
/* Nb of RRH to connect to */
uint8_t
nb_rrh_gw
;
char
*
rrh_gw_if_name
;
/* List of MME to connect to */
rrh_gw_config_t
rrh_gw_config
[
4
];
// otg config
/* Nb of OTG elements */
uint8_t
num_otg_elements
;
...
...
This diff is collapsed.
Click to expand it.
targets/RT/USER/lte-softmodem.c
View file @
72ff627a
...
...
@@ -329,15 +329,7 @@ time_stats_t softmodem_stats_rx_sf[10]; // total rx time
void
reset_opp_meas
(
void
);
void
print_opp_meas
(
void
);
int
transmission_mode
=
1
;
/*
FT: not a very clean way of managing the rescale of iqs in rx path, but this is done in
openair1/PHY/MODULATION/ul_7_5_kHz.c which doesn't have access to config parameters
to re-worked later.....
RX_IQRESCALELEN is setup in device libraries for all non expressmimo targets and acessed as an
external variable in ul_7_5_kHz.c. For expressmimo it is a macro (openair1/PHY/defs.h)
Regarding the value of this variable or macro: 18 is for 15 bits iqs, 15 is used for USRP, EXMIMO
*/
//int rxrescale;
int16_t
glog_level
=
LOG_INFO
;
int16_t
glog_verbosity
=
LOG_MED
;
...
...
@@ -369,57 +361,16 @@ int16_t osa_log_verbosity = LOG_MED;
#ifdef ETHERNET
char
rrh_eNB_ip
[
20
]
=
"127.0.0.1"
;
int
rrh_eNB_port
=
50000
;
char
*
rrh_UE_ip
=
"127.0.0.1"
;
int
rrh_UE_port
=
51000
;
#endif
/* flag given in runtime to specify if the RF head is local or remote (default option is local RF)*/
uint8_t
local_remote_RF
=
BBU_LOCAL_RF_ENABLED
;
char
uecap_xer
[
1024
],
uecap_xer_in
=
0
;
extern
void
*
UE_thread
(
void
*
arg
);
extern
void
init_UE_threads
(
void
);
/*---------------------BMC: timespec helpers -----------------------------*/
struct
timespec
min_diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
struct
timespec
max_diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
struct
timespec
clock_difftime
(
struct
timespec
start
,
struct
timespec
end
)
{
struct
timespec
temp
;
if
((
end
.
tv_nsec
-
start
.
tv_nsec
)
<
0
)
{
temp
.
tv_sec
=
end
.
tv_sec
-
start
.
tv_sec
-
1
;
temp
.
tv_nsec
=
1000000000
+
end
.
tv_nsec
-
start
.
tv_nsec
;
}
else
{
temp
.
tv_sec
=
end
.
tv_sec
-
start
.
tv_sec
;
temp
.
tv_nsec
=
end
.
tv_nsec
-
start
.
tv_nsec
;
}
return
temp
;
}
void
print_difftimes
()
{
#ifdef DEBUG
printf
(
"difftimes min = %lu ns ; max = %lu ns
\n
"
,
min_diff_time
.
tv_nsec
,
max_diff_time
.
tv_nsec
);
#else
LOG_I
(
HW
,
"difftimes min = %lu ns ; max = %lu ns
\n
"
,
min_diff_time
.
tv_nsec
,
max_diff_time
.
tv_nsec
);
#endif
}
void
update_difftimes
(
struct
timespec
start
,
struct
timespec
end
)
{
struct
timespec
diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
int
changed
=
0
;
diff_time
=
clock_difftime
(
start
,
end
);
if
((
min_diff_time
.
tv_nsec
==
0
)
||
(
diff_time
.
tv_nsec
<
min_diff_time
.
tv_nsec
))
{
min_diff_time
.
tv_nsec
=
diff_time
.
tv_nsec
;
changed
=
1
;
}
if
((
max_diff_time
.
tv_nsec
==
0
)
||
(
diff_time
.
tv_nsec
>
max_diff_time
.
tv_nsec
))
{
max_diff_time
.
tv_nsec
=
diff_time
.
tv_nsec
;
changed
=
1
;
}
#if 1
if
(
changed
)
print_difftimes
();
#endif
}
/*------------------------------------------------------------------------*/
unsigned
int
build_rflocal
(
int
txi
,
int
txq
,
int
rxi
,
int
rxq
)
{
return
(
txi
+
(
txq
<<
6
)
+
(
rxi
<<
12
)
+
(
rxq
<<
18
));
...
...
@@ -479,7 +430,7 @@ void help (void) {
printf
(
" -h provides this help message!
\n
"
);
printf
(
" -K Generate ITTI analyzser logs (similar to wireshark logs but with more details)
\n
"
);
printf
(
" -m Set the maximum downlink MCS
\n
"
);
printf
(
" -M
Specify whether RF head is local or remote,valid options: (1: local , 2:remote)
\n
"
);
printf
(
" -M
IP address of RRH
\n
"
);
printf
(
" -O eNB configuration file (located in targets/PROJECTS/GENERIC-LTE-EPC/CONF
\n
"
);
printf
(
" -q Enable processing timing measurement of lte softmodem on per subframe basis
\n
"
);
printf
(
" -r Set the PRB, valid values: 6, 25, 50, 100
\n
"
);
...
...
@@ -996,12 +947,6 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
if
(
tx_offset
>=
(
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
phy_vars_eNB
->
lte_frame_parms
.
samples_per_tti
))
tx_offset
-=
LTE_NUMBER_OF_SUBFRAMES_PER_FRAME
*
phy_vars_eNB
->
lte_frame_parms
.
samples_per_tti
;
((
short
*
)
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
][
tx_offset
])[
0
]
=
((
short
*
)
dummy_tx_b
)[
2
*
i
]
<<
openair0_cfg
[
0
].
iq_txshift
;
((
short
*
)
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
][
tx_offset
])[
1
]
=
((
short
*
)
dummy_tx_b
)[
2
*
i
+
1
]
<<
openair0_cfg
[
0
].
iq_txshift
;
/*
((
short
*
)
&
phy_vars_eNB
->
lte_eNB_common_vars
.
txdata
[
0
][
aa
][
tx_offset
])[
0
]
=
#ifdef EXMIMO
((
short
*
)
dummy_tx_b
)[
2
*
i
]
<<
4
;
...
...
@@ -1018,7 +963,6 @@ void do_OFDM_mod_rt(int subframe,PHY_VARS_eNB *phy_vars_eNB)
#else
((
short
*
)
dummy_tx_b
)[
2
*
i
+
1
]
<<
4
;
#endif
*/
}
// if S-subframe switch to RX in second subframe
if
(
subframe_select
(
&
phy_vars_eNB
->
lte_frame_parms
,
subframe
)
==
SF_S
)
{
...
...
@@ -1836,9 +1780,7 @@ static void* eNB_thread( void* arg )
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
);
stop_meas
(
&
softmodem_stats_hw
);
if
(
frame
>
50
)
{
clock_gettime
(
CLOCK_MONOTONIC
,
&
trx_time1
);
}
if
(
frame
>
20
){
if
(
rxs
!=
spp
)
...
...
@@ -1848,6 +1790,8 @@ static void* eNB_thread( void* arg )
// Transmit TX buffer based on timestamp from RX
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
1
);
// prepare tx buffer pointers
for
(
i
=
0
;
i
<
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
;
i
++
)
...
...
@@ -1867,23 +1811,16 @@ static void* eNB_thread( void* arg )
VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME
(
VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST
,
(
timestamp
+
(
openair0_cfg
[
card
].
tx_delay
*
spp
)
-
openair0_cfg
[
card
].
tx_forward_nsamps
)
&
0xffffffff
);
stop_meas
(
&
softmodem_stats_mt
);
if
(
frame
>
50
)
{
clock_gettime
(
CLOCK_MONOTONIC
,
&
trx_time2
);
// BMC: compute time between rx and tx
update_difftimes
(
trx_time1
,
trx_time2
);
}
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
(
VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE
,
0
);
#else
// USRP_DEBUG is active
rt_sleep_ns
(
1000000
);
#endif
/* FT configurable tx lauch delay (in slots )*/
if
((
tx_launched
==
0
)
&&
((
openair0_cfg
[
card
].
txlaunch_wait
==
0
)
||
((
openair0_cfg
[
card
].
txlaunch_wait
==
1
)
&&
(
rx_pos
>=
(((
2
*
hw_subframe
)
+
openair0_cfg
[
card
].
txlaunch_wait_slotcount
)
*
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
samples_per_tti
>>
1
)))))
{
(
rx_pos
>=
(((
2
*
hw_subframe
)
+
1
)
*
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
samples_per_tti
>>
1
)))
{
tx_launched
=
1
;
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
...
...
@@ -2044,9 +1981,6 @@ eNB_thread_cleanup:
#endif
eNB_thread_status
=
0
;
print_difftimes
();
return
&
eNB_thread_status
;
}
...
...
@@ -2058,8 +1992,8 @@ static void get_options (int argc, char **argv)
int
c
;
// char line[1000];
// int l;
int
k
,
i
;
//,j,k;
#if defined(OAI_USRP) || defined(CPRIGW)
//#ifndef EXMIMO?
int
k
,
i
,
j
;
//,j,k;
#if defined(OAI_USRP) || defined(CPRIGW)
int
clock_src
;
#endif
int
CC_id
;
...
...
@@ -2178,7 +2112,9 @@ static void get_options (int argc, char **argv)
break
;
case
'M'
:
local_remote_RF
=
atoi
(
optarg
);
#ifdef ETHERNET
strcpy
(
rrh_eNB_ip
,
optarg
);
#endif
break
;
case
'C'
:
...
...
@@ -2307,7 +2243,7 @@ static void get_options (int argc, char **argv)
break
;
case
's'
:
#if defined(OAI_USRP) || defined(CPRIGW)
//#ifndef EXMIMO
#if defined(OAI_USRP) || defined(CPRIGW)
clock_src
=
atoi
(
optarg
);
...
...
@@ -2406,6 +2342,21 @@ static void get_options (int argc, char **argv)
"lte-softmodem compiled with MAX_NUM_CCs=%d, but only %d CCs configured for eNB %d!"
,
MAX_NUM_CCs
,
enb_properties
->
properties
[
i
]
->
nb_cc
,
i
);
for
(
j
=
0
;
j
<
enb_properties
->
properties
[
i
]
->
nb_rrh_gw
;
j
++
)
{
if
(
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
active
==
1
){
// replace printf by setting
printf
(
"
\n\t
RRH GW %d config for eNB %u:
\n\n
"
,
j
,
i
);
printf
(
"
\t
interface name :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_if_name
);
printf
(
"
\t
local address :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
local_address
);
printf
(
"
\t
local port :
\t
%d:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
local_port
);
printf
(
"
\t
remote address :
\t
%s:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_address
);
printf
(
"
\t
remote port :
\t
%d:
\n
"
,
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
remote_port
);
printf
(
"
\t
transport :
\t
%s Ethernet:
\n\n
"
,(
enb_properties
->
properties
[
i
]
->
rrh_gw_config
[
j
].
raw
==
1
)
?
"RAW"
:
"UDP"
);
}
}
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
frame_parms
[
CC_id
]
->
frame_type
=
enb_properties
->
properties
[
i
]
->
frame_type
[
CC_id
];
frame_parms
[
CC_id
]
->
tdd_config
=
enb_properties
->
properties
[
i
]
->
tdd_config
[
CC_id
];
...
...
@@ -2910,11 +2861,6 @@ int main( int argc, char **argv )
for
(
card
=
0
;
card
<
MAX_CARDS
;
card
++
)
{
#ifdef EXMIMO
/* FT: for all other devices the iq_txshift value is setup in the device library */
openair0_cfg
[
card
].
iq_txshift
=
4
;
#endif
if
(
frame_parms
[
0
]
->
N_RB_DL
==
100
)
{
sample_rate
=
30.72e6
;
bw
=
10.0e6
;
...
...
@@ -2925,8 +2871,8 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
tx_bw
=
10e6
;
openair0_cfg
[
card
].
rx_bw
=
10e6
;
// from usrp_time_offset
//
openair0_cfg[card].tx_forward_nsamps = 175;
//
openair0_cfg[card].tx_delay = 8;
openair0_cfg
[
card
].
tx_forward_nsamps
=
175
;
openair0_cfg
[
card
].
tx_delay
=
8
;
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
50
)
{
sample_rate
=
15.36e6
;
...
...
@@ -2937,8 +2883,8 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
samples_per_frame
=
153600
;
openair0_cfg
[
card
].
tx_bw
=
5e6
;
openair0_cfg
[
card
].
rx_bw
=
5e6
;
//
openair0_cfg[card].tx_forward_nsamps = 95;
//
openair0_cfg[card].tx_delay = 5;
openair0_cfg
[
card
].
tx_forward_nsamps
=
95
;
openair0_cfg
[
card
].
tx_delay
=
5
;
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
25
)
{
sample_rate
=
7.68e6
;
...
...
@@ -2950,14 +2896,12 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
rx_bw
=
2.5e6
;
openair0_cfg
[
card
].
samples_per_packet
=
1024
;
#ifdef OAI_USRP
// openair0_cfg[card].tx_forward_nsamps = 70;
//openair0_cfg[card].tx_delay = 5;
openair0_cfg
[
card
].
tx_forward_nsamps
=
70
;
openair0_cfg
[
card
].
tx_delay
=
5
;
#elif OAI_BLADERF
openair0_cfg
[
card
].
tx_forward_nsamps
=
0
;
openair0_cfg
[
card
].
tx_delay
=
8
;
#endif
//#elif OAI_BLADERF
//openair0_cfg[card].tx_forward_nsamps = 0;
//openair0_cfg[card].tx_delay = 8;
//#endif
#endif
}
else
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
{
sample_rate
=
1.92e6
;
...
...
@@ -2968,26 +2912,16 @@ int main( int argc, char **argv )
openair0_cfg
[
card
].
samples_per_frame
=
19200
;
openair0_cfg
[
card
].
tx_bw
=
1.5e6
;
openair0_cfg
[
card
].
rx_bw
=
1.5e6
;
//
openair0_cfg[card].tx_forward_nsamps = 40;
//
openair0_cfg[card].tx_delay = 8;
openair0_cfg
[
card
].
tx_forward_nsamps
=
40
;
openair0_cfg
[
card
].
tx_delay
=
8
;
#endif
}
#ifdef ETHERNET
//openair0_cfg[card].remote_addr = "192.168.12.242";
//openair0_cfg[card].remote_addr = "127.0.0.1";
openair0_cfg
[
card
].
remote_addr
=
"74:d4:35:cc:88:45"
;
openair0_cfg
[
card
].
remote_port
=
50000
;
//openair0_cfg[card].my_addr = "192.168.12.31";
//openair0_cfg[card].my_addr = "127.0.0.1";
openair0_cfg
[
card
].
my_addr
=
"d4:be:d9:22:0a:ac"
;
openair0_cfg
[
card
].
my_port
=
50000
;
//openair0_cfg[card].my_port = 50001;
openair0_cfg
[
card
].
tx_delay
=
10
;
//calib needed
openair0_cfg
[
card
].
tx_delay
=
0
;
openair0_cfg
[
card
].
tx_forward_nsamps
=
0
;
openair0_cfg
[
card
].
txlaunch_wait
=
0
;
openair0_cfg
[
card
].
txlaunch_wait_slotcount
=
0
;
if
(
frame_parms
[
0
]
->
N_RB_DL
==
6
)
openair0_cfg
[
card
].
samples_per_packet
=
256
;
...
...
@@ -3000,20 +2934,23 @@ int main( int argc, char **argv )
#ifndef EXMIMO
openair0_cfg
[
card
].
samples_per_packet
=
openair0_cfg
[
0
].
samples_per_packet
;
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
[
0
]
->
N_RB_DL
;
#endif
printf
(
"HW: Configuring card %d, nb_antennas_tx/rx %d/%d
\n
"
,
card
,
((
UE_flag
==
0
)
?
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
:
PHY_vars_UE_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_tx
),
((
UE_flag
==
0
)
?
PHY_vars_eNB_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
:
PHY_vars_UE_g
[
0
][
0
]
->
lte_frame_parms
.
nb_antennas_rx
));
openair0_cfg
[
card
].
Mod_id
=
0
;
#ifdef ETHERNET
/*do we need to separate ue and enb????*/
#ifdef ETHERNET
if
(
UE_flag
)
{
printf
(
"ETHERNET: Configuring UE ETH for %s:%d
\n
"
,
rrh_UE_ip
,
rrh_UE_port
);
openair0_cfg
[
card
].
remote_
addr
=
&
rrh_UE_ip
[
0
];
openair0_cfg
[
card
].
remote_
ip
=
&
rrh_UE_ip
[
0
];
openair0_cfg
[
card
].
remote_port
=
rrh_UE_port
;
}
else
{
printf
(
"ETHERNET: Configuring eNB ETH for %s:%d
\n
"
,
rrh_eNB_ip
,
rrh_eNB_port
);
openair0_cfg
[
card
].
remote_ip
=
&
rrh_eNB_ip
[
0
];
openair0_cfg
[
card
].
remote_port
=
rrh_eNB_port
;
}
openair0_cfg
[
card
].
num_rb_dl
=
frame_parms
[
0
]
->
N_RB_DL
;
#endif
openair0_cfg
[
card
].
sample_rate
=
sample_rate
;
openair0_cfg
[
card
].
tx_bw
=
bw
;
...
...
@@ -3066,35 +3003,17 @@ int main( int argc, char **argv )
#endif
}
/* device host type is set*/
openair0
.
host_type
=
BBU_HOST
;
/* device type is initialized NONE_DEV (no RF device) when the RF device will be initiated device type will be set */
openair0
.
type
=
NONE_DEV
;
/* transport type is initialized NONE_TP (no transport protocol) when the transport protocol will be initiated transport protocol type will be set */
openair0
.
transp_type
=
NONE_TP
;
openair0
.
func_type
=
BBU_FUNC
;
openair0_cfg
[
0
].
log_level
=
glog_level
;
/* BBU can either have local or remote radio heads - local radio head option is set by default so the corresponding device is initiated */
if
((
mode
!=
loop_through_memory
)
&&
(
openair0_device_
load
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
(
openair0_device_
init
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
printf
(
"Exiting, cannot initialize device
\n
"
);
exit
(
-
1
);
}
else
if
(
mode
==
loop_through_memory
)
{
}
/* radio heads are remote so the trasnsport protocol is initiated */
if
(
local_remote_RF
==
BBU_REMOTE_RF_ENABLED
)
{
if
((
mode
!=
loop_through_memory
)
&&
(
openair0_transport_load
(
&
openair0
,
&
openair0_cfg
[
0
])
<
0
))
{
printf
(
"Exiting, cannot initialize transport protocol
\n
"
);
exit
(
-
1
);
}
else
if
(
mode
==
loop_through_memory
)
{
}
}
//for EXMIMO
//openair0_cfg[0].iq_rxrescale=15; /* default value if build with EXMIMO */
//rxrescale=openair0_cfg[0].iq_rxrescale; /* see comments near RX_IQRESCALELEN definition */
printf
(
"Done
\n
"
);
...
...
@@ -3513,6 +3432,7 @@ int main( int argc, char **argv )
if
(
multi_thread
>
0
)
{
printf
(
"Killing eNB processing threads
\n
"
);
kill_eNB_proc
();
}
}
...
...
@@ -3604,6 +3524,10 @@ int setup_eNB_buffers(PHY_VARS_eNB **phy_vars_eNB, openair0_config_t *openair0_c
#endif
// replace RX signal buffers with mmaped HW versions
#ifdef EXMIMO
openair0_cfg
[
CC_id
].
tx_num_channels
=
0
;
...
...
This diff is collapsed.
Click to expand it.
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