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
612ab055
Commit
612ab055
authored
Dec 06, 2017
by
Navid Nikaein
Committed by
Robert Schmidt
Dec 14, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add control logic to reconfigure and start eNB
parent
6e6a462d
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
174 additions
and
75 deletions
+174
-75
openair2/ENB_APP/enb_app.c
openair2/ENB_APP/enb_app.c
+27
-7
openair2/ENB_APP/enb_config.c
openair2/ENB_APP/enb_config.c
+18
-4
openair2/ENB_APP/enb_config.h
openair2/ENB_APP/enb_config.h
+9
-2
openair2/ENB_APP/flexran_agent_common_internal.c
openair2/ENB_APP/flexran_agent_common_internal.c
+6
-3
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+4
-0
targets/COMMON/create_tasks.c
targets/COMMON/create_tasks.c
+11
-8
targets/COMMON/create_tasks.h
targets/COMMON/create_tasks.h
+1
-0
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.flexran.usrpb210.conf
...ECTS/GENERIC-LTE-EPC/CONF/enb.band7.flexran.usrpb210.conf
+4
-2
targets/RT/USER/lte-softmodem.c
targets/RT/USER/lte-softmodem.c
+94
-49
No files found.
openair2/ENB_APP/enb_app.c
View file @
612ab055
...
...
@@ -55,6 +55,17 @@
extern
unsigned
char
NB_eNB_INST
;
#endif
extern
volatile
int
node_control_state
;
static
void
enb_app_wait_reconfig_cmd
(
void
)
{
LOG_I
(
ENB_APP
,
"ENB APP await reconfiguration command
\n
"
);
while
(
node_control_state
==
ENB_WAIT_RECONFIGURATION_CMD
)
{
usleep
(
200000
);
}
sleep
(
2
);
// wait for createing other tasks
}
#if defined(ENABLE_ITTI)
...
...
@@ -270,7 +281,7 @@ static uint32_t eNB_app_register(uint32_t enb_id_start, uint32_t enb_id_end, con
/*------------------------------------------------------------------------------*/
void
*
eNB_app_task
(
void
*
args_p
)
{
const
Enb_properties_array_t
*
enb_properties_p
=
NULL
;
Enb_properties_array_t
*
enb_properties_p
=
NULL
;
#if defined(ENABLE_ITTI)
uint32_t
enb_nb
=
1
;
/* Default number of eNB is 1 */
uint32_t
enb_id_start
=
0
;
...
...
@@ -309,19 +320,28 @@ void *eNB_app_task(void *args_p)
"Number of eNB is greater than eNB defined in configuration file (%d/%d)!"
,
enb_nb
,
enb_properties_p
->
number
);
for
(
enb_id
=
enb_id_start
;
(
enb_id
<
enb_id_end
)
;
enb_id
++
)
{
configure_phy
(
enb_id
,
enb_properties_p
);
configure_rrc
(
enb_id
,
enb_properties_p
);
}
#if defined (FLEXRAN_AGENT_SB_IF)
for
(
enb_id
=
enb_id_start
;
(
enb_id
<
enb_id_end
)
;
enb_id
++
)
{
printf
(
"
\n
start enb agent %d
\n
"
,
enb_id
);
flexran_agent_start
(
enb_id
,
enb_properties_p
);
}
// wait for config comd from the controller/network app
enb_app_wait_reconfig_cmd
();
// set again the ran api vars
for
(
enb_id
=
enb_id_start
;
(
enb_id
<
enb_id_end
)
;
enb_id
++
)
{
printf
(
"
\n
set again enb vars %d
\n
"
,
enb_id
);
flexran_set_enb_vars
(
enb_id
,
RAN_LTE_OAI
);
}
#endif
for
(
enb_id
=
enb_id_start
;
(
enb_id
<
enb_id_end
)
;
enb_id
++
)
{
configure_phy
(
enb_id
,
enb_properties_p
);
configure_rrc
(
enb_id
,
enb_properties_p
);
}
# if defined(ENABLE_USE_MME)
/* Try to register each eNB */
registered_enb
=
0
;
...
...
openair2/ENB_APP/enb_config.c
View file @
612ab055
...
...
@@ -197,6 +197,7 @@
#define ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS "FLEXRAN_AGENT_IPV4_ADDRESS"
#define ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT "FLEXRAN_AGENT_PORT"
#define ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE "FLEXRAN_AGENT_CACHE"
#define ENB_CONFIG_STRING_FLEXRAN_AGENT_AWAIT_RECONF "FLEXRAN_AGENT_AWAIT_RECONF"
#define ENB_CONFIG_STRING_RRH_GW_CONFIG "rrh_gw_config"
#define ENB_CONFIG_STRING_RRH_GW_LOCAL_IF_NAME "local_if_name"
...
...
@@ -351,6 +352,8 @@ void enb_config_display(void)
// printf( "\tInterface IP Address: \t%s:\n",enb_properties.properties[i]->flexran_agent_ipv4_address);
printf
(
"
\t
Interface PORT:
\t
%d:
\n\n
"
,
enb_properties
.
properties
[
i
]
->
flexran_agent_port
);
printf
(
"
\t
Cache directory:
\t
%s:
\n
"
,
enb_properties
.
properties
[
i
]
->
flexran_agent_cache
);
printf
(
"
\t
eNB Control State:
\t
%s:
\n
"
,(
enb_properties
.
properties
[
i
]
->
flexran_agent_reconf
==
0
)
?
"ENB_NORMAL_OPERATION"
:
"ENB_WAIT_RECONFIGURATION_CMD"
);
#endif
...
...
@@ -536,7 +539,7 @@ extern int asn1_xer_print;
#else
#define libconfig_int int
#endif
const
Enb_properties_array_t
*
enb_config_init
(
char
*
lib_config_file_name_pP
)
Enb_properties_array_t
*
enb_config_init
(
char
*
lib_config_file_name_pP
)
{
config_t
cfg
;
config_setting_t
*
setting
=
NULL
;
...
...
@@ -689,6 +692,8 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
char
*
flexran_agent_ipv4_address
=
NULL
;
libconfig_int
flexran_agent_port
=
0
;
char
*
flexran_agent_cache
=
NULL
;
char
*
flexran_agent_reconf
=
NULL
;
libconfig_int
otg_ue_id
=
0
;
char
*
otg_app_type
=
NULL
;
char
*
otg_bg_traffic
=
NULL
;
...
...
@@ -2580,6 +2585,9 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
&
flexran_agent_port
)
&&
config_setting_lookup_string
(
subsetting
,
ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE
,
(
const
char
**
)
&
flexran_agent_cache
)
&&
config_setting_lookup_string
(
subsetting
,
ENB_CONFIG_STRING_FLEXRAN_AGENT_AWAIT_RECONF
,
(
const
char
**
)
&
flexran_agent_reconf
)
)
)
{
enb_properties
.
properties
[
enb_properties_index
]
->
flexran_agent_interface_name
=
strdup
(
flexran_agent_interface_name
);
...
...
@@ -2592,6 +2600,12 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
enb_properties
.
properties
[
enb_properties_index
]
->
flexran_agent_port
=
flexran_agent_port
;
enb_properties
.
properties
[
enb_properties_index
]
->
flexran_agent_cache
=
strdup
(
flexran_agent_cache
);
if
((
strcmp
(
flexran_agent_reconf
,
"yes"
)
==
0
)
||
(
strcmp
(
flexran_agent_reconf
,
"YES"
)
==
0
)){
enb_properties
.
properties
[
enb_properties_index
]
->
flexran_agent_reconf
=
1
;
}
else
{
enb_properties
.
properties
[
enb_properties_index
]
->
flexran_agent_reconf
=
0
;
}
}
}
...
...
@@ -2885,7 +2899,7 @@ const Enb_properties_array_t *enb_config_init(char* lib_config_file_name_pP)
}
const
Enb_properties_array_t
*
enb_config_get
(
void
)
Enb_properties_array_t
*
enb_config_get
(
void
)
{
return
&
enb_properties
;
}
...
...
openair2/ENB_APP/enb_config.h
View file @
612ab055
...
...
@@ -237,6 +237,8 @@ typedef struct Enb_properties_s {
in_addr_t
flexran_agent_ipv4_address
;
tcp_udp_port_t
flexran_agent_port
;
char
*
flexran_agent_cache
;
int
flexran_agent_reconf
;
/* Nb of RRH to connect to */
uint8_t
nb_rrh_gw
;
...
...
@@ -276,15 +278,20 @@ typedef struct Enb_properties_s {
#endif
}
Enb_properties_t
;
typedef
enum
{
ENB_NORMAL_OPERATION
=
0x0
,
ENB_WAIT_RECONFIGURATION_CMD
=
0x1
}
ENB_MODULE_STATE
;
typedef
struct
Enb_properties_array_s
{
int
number
;
Enb_properties_t
*
properties
[
MAX_ENB
];
}
Enb_properties_array_t
;
void
enb_config_display
(
void
);
const
Enb_properties_array_t
*
enb_config_init
(
char
*
lib_config_file_name_pP
);
Enb_properties_array_t
*
enb_config_init
(
char
*
lib_config_file_name_pP
);
const
Enb_properties_array_t
*
enb_config_get
(
void
);
Enb_properties_array_t
*
enb_config_get
(
void
);
#endif
/* ENB_CONFIG_H_ */
/** @} */
openair2/ENB_APP/flexran_agent_common_internal.c
View file @
612ab055
...
...
@@ -31,7 +31,7 @@
#include "flexran_agent_common_internal.h"
#include "flexran_agent_mac_internal.h"
extern
volatile
int
reconfigure_enb
;
extern
volatile
int
node_control_state
;
int
apply_reconfiguration_policy
(
mid_t
mod_id
,
const
char
*
policy
,
size_t
policy_length
)
{
...
...
@@ -72,8 +72,8 @@ int apply_reconfiguration_policy(mid_t mod_id, const char *policy, size_t policy
if
(
parse_enb_id
(
mod_id
,
&
parser
)
==
-
1
)
{
goto
error
;
}
else
{
// succeful parse and setting
LOG_I
(
ENB_APP
,
"Successful parsed config for enb system
\n
"
)
;
//reconfigure_enb=RECONF_FREQ
;
node_control_state
=
ENB_NORMAL_OPERATION
;
LOG_I
(
ENB_APP
,
"Successful parsed config for enb system, entering normal state
\n
"
)
;
}
}
else
if
(
strcmp
((
char
*
)
event
.
data
.
scalar
.
value
,
"mac"
)
==
0
)
{
LOG_D
(
ENB_APP
,
"This is intended for the mac system
\n
"
);
...
...
@@ -258,6 +258,9 @@ int parse_enb_config_parameters(mid_t mod_id, yaml_parser_t *parser) {
yaml_event_delete
(
&
event
);
}
/* reflect in RAN API */
flexran_set_enb_vars
(
mod_id
,
RAN_LTE_OAI
);
return
0
;
error:
...
...
openair2/LAYER2/MAC/eNB_scheduler_primitives.c
View file @
612ab055
...
...
@@ -131,6 +131,7 @@ int UE_num_active_CC(UE_list_t *listP,int ue_idP)
int
UE_PCCID
(
module_id_t
mod_idP
,
int
ue_idP
)
//------------------------------------------------------------------------------
{
if
(
eNB_mac_inst
==
NULL
)
return
0
;
return
(
eNB_mac_inst
[
mod_idP
].
UE_list
.
pCC_id
[
ue_idP
]);
}
...
...
@@ -139,6 +140,7 @@ rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP)
//------------------------------------------------------------------------------
{
if
(
eNB_mac_inst
==
NULL
)
return
0
;
rnti_t
rnti
=
eNB_mac_inst
[
mod_idP
].
UE_list
.
UE_template
[
UE_PCCID
(
mod_idP
,
ue_idP
)][
ue_idP
].
rnti
;
if
(
rnti
>
0
)
{
...
...
@@ -154,6 +156,7 @@ rnti_t UE_RNTI(module_id_t mod_idP, int ue_idP)
boolean_t
is_UE_active
(
module_id_t
mod_idP
,
int
ue_idP
)
//------------------------------------------------------------------------------
{
if
(
eNB_mac_inst
==
NULL
)
return
0
;
return
(
eNB_mac_inst
[
mod_idP
].
UE_list
.
active
[
ue_idP
]);
}
...
...
@@ -182,6 +185,7 @@ uint8_t find_active_UEs(module_id_t module_idP,int CC_id){
int
UE_BSR
(
uint8_t
mod_id
,
uint8_t
ue_id
,
uint8_t
lcid
)
{
if
(
eNB_mac_inst
==
NULL
)
return
0
;
return
eNB_mac_inst
[
mod_id
].
UE_list
.
UE_template
[
UE_PCCID
(
mod_id
,
ue_id
)][
ue_id
].
bsr_info
[
lcid
];
}
...
...
targets/COMMON/create_tasks.c
View file @
612ab055
...
...
@@ -40,21 +40,24 @@
# endif
# include "enb_app.h"
int
create_
tasks
(
uint32_t
enb_nb
,
uint32_t
ue
_nb
)
int
create_
enb_app_task
(
uint32_t
enb
_nb
)
{
itti_wait_ready
(
1
);
if
(
itti_create_task
(
TASK_L2L1
,
l2l1_task
,
NULL
)
<
0
)
{
LOG_E
(
PDCP
,
"Create task for L2L1 failed
\n
"
);
return
-
1
;
}
if
(
enb_nb
>
0
)
{
/* Last task to create, others task must be ready before its start */
if
(
itti_create_task
(
TASK_ENB_APP
,
eNB_app_task
,
NULL
)
<
0
)
{
LOG_E
(
ENB_APP
,
"Create task for eNB APP failed
\n
"
);
return
-
1
;
}
}
return
0
;
}
int
create_tasks
(
uint32_t
enb_nb
,
uint32_t
ue_nb
)
{
itti_wait_ready
(
1
);
if
(
itti_create_task
(
TASK_L2L1
,
l2l1_task
,
NULL
)
<
0
)
{
LOG_E
(
PDCP
,
"Create task for L2L1 failed
\n
"
);
return
-
1
;
}
# ifdef OPENAIR2
...
...
targets/COMMON/create_tasks.h
View file @
612ab055
...
...
@@ -27,6 +27,7 @@
extern
void
*
l2l1_task
(
void
*
arg
);
int
create_tasks
(
uint32_t
enb_nb
,
uint32_t
ue_nb
);
int
create_enb_app_task
(
uint32_t
enb_nb
);
#endif
#endif
/* CREATE_TASKS_H_ */
targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.flexran.usrpb210.conf
View file @
612ab055
...
...
@@ -155,10 +155,11 @@ eNBs =
NETWORK_CONTROLLER
:
{
FLEXRAN_AGENT_INTERFACE_NAME
=
"
eth1
"
;
FLEXRAN_AGENT_IPV4_ADDRESS
=
"1
0.0.2.5
/30"
;
FLEXRAN_AGENT_INTERFACE_NAME
=
"
lo
"
;
FLEXRAN_AGENT_IPV4_ADDRESS
=
"1
27.0.0.1
/30"
;
FLEXRAN_AGENT_PORT
=
2210
;
FLEXRAN_AGENT_CACHE
=
"/mnt/oai_agent_cache"
;
FLEXRAN_AGENT_AWAIT_RECONF
=
"no"
;
};
log_config
:
...
...
@@ -177,6 +178,7 @@ eNBs =
pdcp_log_verbosity
=
"medium"
;
rrc_log_level
=
"info"
;
rrc_log_verbosity
=
"medium"
;
};
}
);
targets/RT/USER/lte-softmodem.c
View file @
612ab055
...
...
@@ -174,6 +174,8 @@ eNB_func_t node_function[MAX_NUM_CCs];
eNB_timing_t
node_timing
[
MAX_NUM_CCs
];
int16_t
node_synch_ref
[
MAX_NUM_CCs
];
volatile
int16_t
node_control_state
;
uint32_t
target_dl_mcs
=
28
;
//maximum allowed mcs
uint32_t
target_ul_mcs
=
20
;
uint32_t
timing_advance
=
0
;
...
...
@@ -232,6 +234,12 @@ threads_t threads= {-1,-1,-1,-1,-1,-1,-1};
*/
uint8_t
abstraction_flag
=
0
;
/* */
/* overrid the enb configuration params*/
static
void
reconfigure_enb_params
(
int
enb_id
);
/*---------------------BMC: timespec helpers -----------------------------*/
struct
timespec
min_diff_time
=
{
.
tv_sec
=
0
,
.
tv_nsec
=
0
};
...
...
@@ -1080,11 +1088,20 @@ static void get_options (int argc, char **argv) {
"Number of eNB is greater than eNB defined in configuration file %s (%d/%d)!"
,
conf_config_file_name
,
NB_eNB_INST
,
enb_properties
->
number
);
NB_eNB_INST
=
enb_properties
->
number
;
/* Update some simulation parameters */
for
(
i
=
0
;
i
<
enb_properties
->
number
;
i
++
)
{
AssertFatal
(
MAX_NUM_CCs
==
enb_properties
->
properties
[
i
]
->
nb_cc
,
"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
);
if
(
enb_properties
->
properties
[
i
]
->
flexran_agent_reconf
==
1
)
{
node_control_state
=
ENB_WAIT_RECONFIGURATION_CMD
;
}
else
{
node_control_state
=
ENB_NORMAL_OPERATION
;
}
eth_params
=
(
eth_params_t
*
)
malloc
(
enb_properties
->
properties
[
i
]
->
nb_rrh_gw
*
sizeof
(
eth_params_t
));
memset
(
eth_params
,
0
,
enb_properties
->
properties
[
i
]
->
nb_rrh_gw
*
sizeof
(
eth_params_t
));
...
...
@@ -1133,35 +1150,7 @@ static void get_options (int argc, char **argv) {
}
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
node_function
[
CC_id
]
=
enb_properties
->
properties
[
i
]
->
cc_node_function
[
CC_id
];
node_timing
[
CC_id
]
=
enb_properties
->
properties
[
i
]
->
cc_node_timing
[
CC_id
];
node_synch_ref
[
CC_id
]
=
enb_properties
->
properties
[
i
]
->
cc_node_synch_ref
[
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
];
frame_parms
[
CC_id
]
->
tdd_config_S
=
enb_properties
->
properties
[
i
]
->
tdd_config_s
[
CC_id
];
frame_parms
[
CC_id
]
->
Ncp
=
enb_properties
->
properties
[
i
]
->
prefix_type
[
CC_id
];
//for (j=0; j < enb_properties->properties[i]->nb_cc; j++ ){
frame_parms
[
CC_id
]
->
Nid_cell
=
enb_properties
->
properties
[
i
]
->
Nid_cell
[
CC_id
];
frame_parms
[
CC_id
]
->
N_RB_DL
=
enb_properties
->
properties
[
i
]
->
N_RB_DL
[
CC_id
];
frame_parms
[
CC_id
]
->
N_RB_UL
=
enb_properties
->
properties
[
i
]
->
N_RB_DL
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antennas_tx
=
enb_properties
->
properties
[
i
]
->
nb_antennas_tx
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antenna_ports_eNB
=
enb_properties
->
properties
[
i
]
->
nb_antenna_ports
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antennas_rx
=
enb_properties
->
properties
[
i
]
->
nb_antennas_rx
[
CC_id
];
frame_parms
[
CC_id
]
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
=
enb_properties
->
properties
[
i
]
->
prach_config_index
[
CC_id
];
frame_parms
[
CC_id
]
->
prach_config_common
.
prach_ConfigInfo
.
prach_FreqOffset
=
enb_properties
->
properties
[
i
]
->
prach_freq_offset
[
CC_id
];
frame_parms
[
CC_id
]
->
mode1_flag
=
(
frame_parms
[
CC_id
]
->
nb_antenna_ports_eNB
==
1
)
?
1
:
0
;
frame_parms
[
CC_id
]
->
threequarter_fs
=
threequarter_fs
;
//} // j
}
reconfigure_enb_params
(
i
);
init_all_otg
(
0
);
g_otg
->
seed
=
0
;
...
...
@@ -1206,20 +1195,7 @@ static void get_options (int argc, char **argv) {
osa_log_verbosity
=
enb_properties
->
properties
[
i
]
->
osa_log_verbosity
;
#endif
// adjust the log
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
for
(
k
=
0
;
k
<
4
;
k
++
)
{
downlink_frequency
[
CC_id
][
k
]
=
enb_properties
->
properties
[
i
]
->
downlink_frequency
[
CC_id
];
uplink_frequency_offset
[
CC_id
][
k
]
=
enb_properties
->
properties
[
i
]
->
uplink_frequency_offset
[
CC_id
];
rx_gain
[
CC_id
][
k
]
=
(
double
)
enb_properties
->
properties
[
i
]
->
rx_gain
[
CC_id
];
tx_gain
[
CC_id
][
k
]
=
(
double
)
enb_properties
->
properties
[
i
]
->
tx_gain
[
CC_id
];
}
printf
(
"Downlink frequency/ uplink offset of CC_id %d set to %ju/%d
\n
"
,
CC_id
,
enb_properties
->
properties
[
i
]
->
downlink_frequency
[
CC_id
],
enb_properties
->
properties
[
i
]
->
uplink_frequency_offset
[
CC_id
]);
}
// CC_id
}
// i
//this is needed for phy-test option
...
...
@@ -1236,6 +1212,57 @@ static void get_options (int argc, char **argv) {
}
}
static
void
reconfigure_enb_params
(
int
enb_id
)
{
int
CC_id
,
k
;
const
Enb_properties_array_t
*
enb_properties
=
enb_config_get
();
for
(
CC_id
=
0
;
CC_id
<
MAX_NUM_CCs
;
CC_id
++
)
{
node_function
[
CC_id
]
=
enb_properties
->
properties
[
enb_id
]
->
cc_node_function
[
CC_id
];
node_timing
[
CC_id
]
=
enb_properties
->
properties
[
enb_id
]
->
cc_node_timing
[
CC_id
];
node_synch_ref
[
CC_id
]
=
enb_properties
->
properties
[
enb_id
]
->
cc_node_synch_ref
[
CC_id
];
frame_parms
[
CC_id
]
->
frame_type
=
enb_properties
->
properties
[
enb_id
]
->
frame_type
[
CC_id
];
frame_parms
[
CC_id
]
->
tdd_config
=
enb_properties
->
properties
[
enb_id
]
->
tdd_config
[
CC_id
];
frame_parms
[
CC_id
]
->
tdd_config_S
=
enb_properties
->
properties
[
enb_id
]
->
tdd_config_s
[
CC_id
];
frame_parms
[
CC_id
]
->
Ncp
=
enb_properties
->
properties
[
enb_id
]
->
prefix_type
[
CC_id
];
//for (j=0; j < enb_properties->properties[i]->nb_cc; j++ ){
frame_parms
[
CC_id
]
->
Nid_cell
=
enb_properties
->
properties
[
enb_id
]
->
Nid_cell
[
CC_id
];
frame_parms
[
CC_id
]
->
N_RB_DL
=
enb_properties
->
properties
[
enb_id
]
->
N_RB_DL
[
CC_id
];
frame_parms
[
CC_id
]
->
N_RB_UL
=
enb_properties
->
properties
[
enb_id
]
->
N_RB_DL
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antennas_tx
=
enb_properties
->
properties
[
enb_id
]
->
nb_antennas_tx
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antenna_ports_eNB
=
enb_properties
->
properties
[
enb_id
]
->
nb_antenna_ports
[
CC_id
];
frame_parms
[
CC_id
]
->
nb_antennas_rx
=
enb_properties
->
properties
[
enb_id
]
->
nb_antennas_rx
[
CC_id
];
frame_parms
[
CC_id
]
->
prach_config_common
.
prach_ConfigInfo
.
prach_ConfigIndex
=
enb_properties
->
properties
[
enb_id
]
->
prach_config_index
[
CC_id
];
frame_parms
[
CC_id
]
->
prach_config_common
.
prach_ConfigInfo
.
prach_FreqOffset
=
enb_properties
->
properties
[
enb_id
]
->
prach_freq_offset
[
CC_id
];
frame_parms
[
CC_id
]
->
mode1_flag
=
(
frame_parms
[
CC_id
]
->
nb_antenna_ports_eNB
==
1
)
?
1
:
0
;
frame_parms
[
CC_id
]
->
threequarter_fs
=
threequarter_fs
;
for
(
k
=
0
;
k
<
4
;
k
++
)
{
downlink_frequency
[
CC_id
][
k
]
=
enb_properties
->
properties
[
enb_id
]
->
downlink_frequency
[
CC_id
];
uplink_frequency_offset
[
CC_id
][
k
]
=
enb_properties
->
properties
[
enb_id
]
->
uplink_frequency_offset
[
CC_id
];
rx_gain
[
CC_id
][
k
]
=
(
double
)
enb_properties
->
properties
[
enb_id
]
->
rx_gain
[
CC_id
];
tx_gain
[
CC_id
][
k
]
=
(
double
)
enb_properties
->
properties
[
enb_id
]
->
tx_gain
[
CC_id
];
}
printf
(
"Downlink frequency/ uplink offset of CC_id %d set to %ju/%d
\n
"
,
CC_id
,
enb_properties
->
properties
[
enb_id
]
->
downlink_frequency
[
CC_id
],
enb_properties
->
properties
[
enb_id
]
->
uplink_frequency_offset
[
CC_id
]);
init_ul_hopping
(
frame_parms
[
CC_id
]);
init_frame_parms
(
frame_parms
[
CC_id
],
1
);
// phy_init_top(frame_parms[CC_id]);
phy_init_lte_top
(
frame_parms
[
CC_id
]);
}
// CC_id
}
#if T_TRACER
int
T_wait
=
1
;
/* by default we wait for the tracer */
int
T_port
=
2021
;
/* default port to listen to to wait for the tracer */
...
...
@@ -1395,6 +1422,19 @@ void init_openair0() {
}
}
/* check the state : either continue or wait for a command to start/stop the eNB
* if needed override the current configuration parameters, such as
* frequencies, bands, power, bandwidth
*/
static
void
ltesm_wait_reconfig_cmd
(
void
)
{
LOG_I
(
ENB_APP
,
"LTE Softmodem wait reconfiguration command
\n
"
);
while
(
node_control_state
==
ENB_WAIT_RECONFIGURATION_CMD
)
{
usleep
(
200000
);
}
}
int
main
(
int
argc
,
char
**
argv
)
{
int
i
,
j
,
k
,
aa
,
re
;
#if defined (XFORMS)
...
...
@@ -1405,6 +1445,8 @@ int main( int argc, char **argv ) {
uint8_t
abstraction_flag
=
0
;
uint8_t
beta_ACK
=
0
,
beta_RI
=
0
,
beta_CQI
=
2
;
PHY_vars_eNB_g
=
NULL
;
#if defined (XFORMS)
int
ret
;
#endif
...
...
@@ -1570,11 +1612,6 @@ int main( int argc, char **argv ) {
LOG_I
(
PHY
,
"Set nb_rx_antenna %d , nb_tx_antenna %d
\n
"
,
frame_parms
[
CC_id
]
->
nb_antennas_rx
,
frame_parms
[
CC_id
]
->
nb_antennas_tx
);
}
init_ul_hopping
(
frame_parms
[
CC_id
]);
init_frame_parms
(
frame_parms
[
CC_id
],
1
);
// phy_init_top(frame_parms[CC_id]);
phy_init_lte_top
(
frame_parms
[
CC_id
]);
}
...
...
@@ -1586,6 +1623,14 @@ int main( int argc, char **argv ) {
// N_ZC = (prach_fmt <4)?839:139;
}
create_enb_app_task
(
UE_flag
?
0
:
1
);
ltesm_wait_reconfig_cmd
();
// reconfigure_enb: 0 for wait, 1 for skip, and other values to reconfigure
for
(
i
=
0
;
(
i
<
NB_eNB_INST
&&
node_control_state
==
ENB_NORMAL_OPERATION
)
;
i
++
){
reconfigure_enb_params
(
i
);
printf
(
"[ENB_APP] Reconfigured eNB module %d - continue
\n
"
,
i
);
}
if
(
UE_flag
==
1
)
{
NB_UE_INST
=
1
;
NB_INST
=
1
;
...
...
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