Merge branch 'florian.kaltenberger/openairinterface5g-fix_ue' into develop
This commit is contained in:
@@ -1804,6 +1804,7 @@ add_executable(lte-softmodem-nos1
|
|||||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/lte-enb.c
|
${OPENAIR_TARGETS}/RT/USER/lte-enb.c
|
||||||
|
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
${OPENAIR_TARGETS}/RT/USER/lte-softmodem.c
|
||||||
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
${OPENAIR1_DIR}/SIMULATION/TOOLS/taus.c
|
||||||
${OPENAIR_TARGETS}/SIMU/USER/init_lte.c
|
${OPENAIR_TARGETS}/SIMU/USER/init_lte.c
|
||||||
@@ -1934,7 +1935,7 @@ add_executable(oaisim_nos1
|
|||||||
${x2ap_h}
|
${x2ap_h}
|
||||||
${OPENAIR_BIN_DIR}/messages_xml.h
|
${OPENAIR_BIN_DIR}/messages_xml.h
|
||||||
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
${OPENAIR_TARGETS}/RT/USER/lte-ue.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/lte-enb.c
|
${OPENAIR_TARGETS}/RT/USER/lte-ru.c
|
||||||
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
|
||||||
${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c
|
${OPENAIR_TARGETS}/SIMU/USER/channel_sim.c
|
||||||
${OPENAIR_TARGETS}/SIMU/USER/init_lte.c
|
${OPENAIR_TARGETS}/SIMU/USER/init_lte.c
|
||||||
|
|||||||
@@ -52,9 +52,12 @@ char defbool[2]="1";
|
|||||||
switch(cfgoptions->type)
|
switch(cfgoptions->type)
|
||||||
{
|
{
|
||||||
case TYPE_STRING:
|
case TYPE_STRING:
|
||||||
config_check_valptr(cfgoptions, (char **)(cfgoptions->strptr), sizeof(char *));
|
if (cfgoptions->numelt == 0 ) {
|
||||||
config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval+1));
|
config_check_valptr(cfgoptions, cfgoptions->strptr, strlen(tmpval)+1);
|
||||||
sprintf(*(cfgoptions->strptr), "%s",tmpval);
|
sprintf(*(cfgoptions->strptr), "%s",tmpval);
|
||||||
|
} else {
|
||||||
|
sprintf( (char *)(cfgoptions->strptr), "%s",tmpval);
|
||||||
|
}
|
||||||
printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval);
|
printf_cmdl("[CONFIG] %s set to %s from command line\n", cfgoptions->optname, tmpval);
|
||||||
optisset=1;
|
optisset=1;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -129,20 +129,21 @@ int i;
|
|||||||
|
|
||||||
/* default */
|
/* default */
|
||||||
if (cfgparam == NULL) {
|
if (cfgparam == NULL) {
|
||||||
cfgparam = "libconfig:oaisoftmodem.conf";
|
tmpflags = tmpflags | CONFIG_NOOOPT;
|
||||||
|
cfgparam = DEFAULT_CFGMODE ":" DEFAULT_CFGFILENAME;
|
||||||
}
|
}
|
||||||
/* parse the config parameters to set the config source */
|
/* parse the config parameters to set the config source */
|
||||||
i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams);
|
i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams);
|
||||||
if (i< 0) {
|
if (i< 0) {
|
||||||
fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno));
|
fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno));
|
||||||
cfgmode=strdup("libconfig");
|
cfgmode=strdup(DEFAULT_CFGMODE);
|
||||||
modeparams = strdup("oaisoftmodem.conf");
|
modeparams = strdup(DEFAULT_CFGFILENAME);
|
||||||
}
|
}
|
||||||
else if ( i == 1 ) {
|
else if ( i == 1 ) {
|
||||||
/* -O argument doesn't contain ":" separator, assume -O <conf file> option, default cfgmode to libconfig
|
/* -O argument doesn't contain ":" separator, assume -O <conf file> option, default cfgmode to libconfig
|
||||||
with one parameter, the path to the configuration file */
|
with one parameter, the path to the configuration file */
|
||||||
modeparams=cfgmode;
|
modeparams=cfgmode;
|
||||||
cfgmode=strdup("libconfig");
|
cfgmode=strdup(DEFAULT_CFGMODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
cfgptr = malloc(sizeof(configmodule_interface_t));
|
cfgptr = malloc(sizeof(configmodule_interface_t));
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#define CONFIG_DEBUGCMDLINE 4 // print command line processing messages
|
#define CONFIG_DEBUGCMDLINE 4 // print command line processing messages
|
||||||
#define CONFIG_HELP 8 // print help message
|
#define CONFIG_HELP 8 // print help message
|
||||||
#define CONFIG_ABORT 16 // config failed,abort execution
|
#define CONFIG_ABORT 16 // config failed,abort execution
|
||||||
|
#define CONFIG_NOOOPT 32 // no -O option found when parsing command line
|
||||||
|
|
||||||
|
|
||||||
typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
|
typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
|
||||||
|
|||||||
@@ -50,7 +50,11 @@ configmodule_interface_t *config_get_if(void)
|
|||||||
char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length)
|
char * config_check_valptr(paramdef_t *cfgoptions, char **ptr, int length)
|
||||||
{
|
{
|
||||||
|
|
||||||
printf_ptrs("-- %s 0x%08lx %i\n",cfgoptions->optname,(uintptr_t)(*ptr),length);
|
printf_ptrs("[CONFIG] %s ptr: 0x%08lx requested size: %i\n",cfgoptions->optname,(uintptr_t)(ptr),length);
|
||||||
|
if(cfgoptions->numelt > 0) { /* already allocated */
|
||||||
|
return *ptr;
|
||||||
|
}
|
||||||
|
|
||||||
if (*ptr == NULL) {
|
if (*ptr == NULL) {
|
||||||
*ptr = malloc(length);
|
*ptr = malloc(length);
|
||||||
if ( *ptr != NULL) {
|
if ( *ptr != NULL) {
|
||||||
@@ -147,3 +151,7 @@ int config_isparamset(paramdef_t *params,int paramidx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#endif
|
#endif
|
||||||
|
#define DEFAULT_CFGFILENAME "oaisoftmodem.conf"
|
||||||
|
#define DEFAULT_CFGMODE "libconfig"
|
||||||
|
|
||||||
#define CONFIG_GETSOURCE ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgmode )
|
#define CONFIG_GETSOURCE ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgmode )
|
||||||
#define CONFIG_GETNUMP ( (config_get_if()==NULL) ? 0 : config_get_if()->num_cfgP )
|
#define CONFIG_GETNUMP ( (config_get_if()==NULL) ? 0 : config_get_if()->num_cfgP )
|
||||||
#define CONFIG_GETP(P) ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgP[P] )
|
#define CONFIG_GETP(P) ( (config_get_if()==NULL) ? NULL : config_get_if()->cfgP[P] )
|
||||||
@@ -51,6 +54,7 @@ extern int config_get(paramdef_t *params,int numparams, char *prefix);
|
|||||||
extern int config_isparamset(paramdef_t *params,int paramidx);
|
extern int config_isparamset(paramdef_t *params,int paramidx);
|
||||||
extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val);
|
extern void config_assign_int(paramdef_t *cfgoptions, char *fullname, int val);
|
||||||
extern int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix);
|
extern int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix);
|
||||||
|
extern int config_getparamval_fromparamdefidx(paramdef_t *cfgoptions,int paramidx);
|
||||||
#define config_getlist config_get_if()->getlist
|
#define config_getlist config_get_if()->getlist
|
||||||
#define CONFIG_GETCONFFILE (config_get_if()->cfgP[0])
|
#define CONFIG_GETCONFFILE (config_get_if()->cfgP[0])
|
||||||
|
|
||||||
|
|||||||
@@ -104,17 +104,28 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
|
|||||||
cfgpath,str,cfgoptions[i].numelt);
|
cfgpath,str,cfgoptions[i].numelt);
|
||||||
str[strlen(str)-1] = 0;
|
str[strlen(str)-1] = 0;
|
||||||
}
|
}
|
||||||
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
|
if (cfgoptions[i].numelt == 0 ) {
|
||||||
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1);
|
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
|
||||||
sprintf( *(cfgoptions[i].strptr) , "%s", str);
|
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1);
|
||||||
printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) );
|
sprintf( *(cfgoptions[i].strptr) , "%s", str);
|
||||||
|
printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) );
|
||||||
|
} else {
|
||||||
|
sprintf( (char *)(cfgoptions[i].strptr) , "%s", str);
|
||||||
|
printf_params("[LIBCONFIG] %s: %s\n", cfgpath,(char *)cfgoptions[i].strptr );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if( cfgoptions[i].defstrval != NULL) {
|
if( cfgoptions[i].defstrval != NULL) {
|
||||||
defval=1;
|
defval=1;
|
||||||
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
|
|
||||||
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1);
|
if (cfgoptions[i].numelt == 0 ) {
|
||||||
sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
|
config_check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
|
||||||
printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr));
|
config_check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1);
|
||||||
|
sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
|
||||||
|
printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr));
|
||||||
|
} else {
|
||||||
|
sprintf((char *)(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
|
||||||
|
printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, (char *)cfgoptions[i].strptr);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
notfound=1;
|
notfound=1;
|
||||||
}
|
}
|
||||||
@@ -183,7 +194,7 @@ int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
|
|||||||
read_intarray(&cfgoptions[i],setting,cfgpath);
|
read_intarray(&cfgoptions[i],setting,cfgpath);
|
||||||
} else {
|
} else {
|
||||||
if( cfgoptions[i].defintarrayval != NULL) {
|
if( cfgoptions[i].defintarrayval != NULL) {
|
||||||
config_check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].iptr), sizeof(int32_t));
|
config_check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].iptr), sizeof(int32_t*));
|
||||||
cfgoptions[i].iptr=cfgoptions[i].defintarrayval;
|
cfgoptions[i].iptr=cfgoptions[i].defintarrayval;
|
||||||
defval=1;
|
defval=1;
|
||||||
for (int j=0; j<cfgoptions[i].numelt ; j++) {
|
for (int j=0; j<cfgoptions[i].numelt ; j++) {
|
||||||
|
|||||||
@@ -2939,12 +2939,12 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
|||||||
|
|
||||||
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
|
//dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
|
||||||
ue->UE_mode[eNB_id] = PUSCH;
|
ue->UE_mode[eNB_id] = PUSCH;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx);
|
LOG_E(PHY,"[UE %d] Frame %d, subframe %d: Problem in DCI!\n",ue->Mod_id,frame_rx,subframe_rx);
|
||||||
dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
|
dump_dci(&ue->frame_parms, &dci_alloc_rx[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ((dci_alloc_rx[i].rnti == SI_RNTI) &&
|
else if ((dci_alloc_rx[i].rnti == SI_RNTI) &&
|
||||||
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
|
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
|
||||||
@@ -2977,7 +2977,6 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
else if ((dci_alloc_rx[i].rnti == P_RNTI) &&
|
else if ((dci_alloc_rx[i].rnti == P_RNTI) &&
|
||||||
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
|
((dci_alloc_rx[i].format == format1A) || (dci_alloc_rx[i].format == format1C))) {
|
||||||
|
|||||||
@@ -2592,7 +2592,9 @@ void RCConfig(void) {
|
|||||||
|
|
||||||
|
|
||||||
/* get global parameters, defined outside any section in the config file */
|
/* get global parameters, defined outside any section in the config file */
|
||||||
|
|
||||||
|
printf("Getting ENBSParams\n");
|
||||||
|
|
||||||
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
config_get( ENBSParams,sizeof(ENBSParams)/sizeof(paramdef_t),NULL);
|
||||||
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
RC.nb_inst = ENBSParams[ENB_ACTIVE_ENBS_IDX].numelt;
|
||||||
|
|
||||||
|
|||||||
@@ -807,7 +807,10 @@ mac_UE_get_rrc_status(
|
|||||||
)
|
)
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
{
|
{
|
||||||
return(UE_rrc_inst[Mod_idP].Info[indexP].State);
|
if (UE_rrc_inst)
|
||||||
|
return(UE_rrc_inst[Mod_idP].Info[indexP].State);
|
||||||
|
else
|
||||||
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------------------//
|
//-------------------------------------------------------------------------------------------//
|
||||||
|
|||||||
@@ -627,12 +627,12 @@ void rrc_eNB_emulation_notify_ue_module_id(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
|
||||||
if (RC.rrc[enb_module_id].carrier[CC_id].sib1 != NULL) {
|
if (&RC.rrc[enb_module_id]->carrier[CC_id].sib1 != NULL) {
|
||||||
if (
|
if (
|
||||||
(RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) &&
|
(&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[0] == cell_identity_byte0P) &&
|
||||||
(RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) &&
|
(&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[1] == cell_identity_byte1P) &&
|
||||||
(RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) &&
|
(&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[2] == cell_identity_byte2P) &&
|
||||||
(RC.rrc[enb_module_id].carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P)
|
(&RC.rrc[enb_module_id]->carrier[CC_id].sib1->cellAccessRelatedInfo.cellIdentity.buf[3] == cell_identity_byte3P)
|
||||||
) {
|
) {
|
||||||
ue_context_p = rrc_eNB_get_ue_context(
|
ue_context_p = rrc_eNB_get_ue_context(
|
||||||
RC.rrc[enb_module_id],
|
RC.rrc[enb_module_id],
|
||||||
|
|||||||
@@ -314,8 +314,8 @@ void *log_thread_function(void * list);
|
|||||||
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
#define LOG_GLOBALPARAMS_DESC { \
|
#define LOG_GLOBALPARAMS_DESC { \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, NULL, 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, sizeof(gloglevel)}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_LEVEL, NULL, 0, strptr:(char **)&gloglevel, defstrval:log_level_names[2].name, TYPE_STRING, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,NULL, 0, strptr:(char **)&glogverbo, defstrval:log_verbosity_names[2].name, TYPE_STRING, sizeof(glogverbo)}, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_VERBOSITY,NULL, 0, strptr:(char **)&glogverbo, defstrval:log_verbosity_names[2].name, TYPE_STRING, 0}, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, NULL, 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0, }, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_ONLINE, NULL, 0, iptr:&(g_log->onlinelog), defintval:1, TYPE_INT, 0, }, \
|
||||||
{LOG_CONFIG_STRING_GLOBAL_LOG_INFILE, NULL, 0, iptr:&(g_log->filelog), defintval:0, TYPE_INT, 0, }, \
|
{LOG_CONFIG_STRING_GLOBAL_LOG_INFILE, NULL, 0, iptr:&(g_log->filelog), defintval:0, TYPE_INT, 0, }, \
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
@@ -17,3 +17,20 @@ RUs = (
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
log_config = {
|
||||||
|
global_log_level ="debug";
|
||||||
|
global_log_verbosity ="medium";
|
||||||
|
hw_log_level ="info";
|
||||||
|
hw_log_verbosity ="medium";
|
||||||
|
phy_log_level ="debug";
|
||||||
|
phy_log_verbosity ="medium";
|
||||||
|
mac_log_level ="debug";
|
||||||
|
mac_log_verbosity ="high";
|
||||||
|
rlc_log_level ="info";
|
||||||
|
rlc_log_verbosity ="medium";
|
||||||
|
pdcp_log_level ="info";
|
||||||
|
pdcp_log_verbosity ="medium";
|
||||||
|
rrc_log_level ="info";
|
||||||
|
rrc_log_verbosity ="medium";
|
||||||
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -227,6 +227,9 @@ threads_t threads= {-1,-1,-1,-1,-1,-1,-1};
|
|||||||
*/
|
*/
|
||||||
uint8_t abstraction_flag=0;
|
uint8_t abstraction_flag=0;
|
||||||
|
|
||||||
|
/* forward declarations */
|
||||||
|
void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
|
||||||
|
|
||||||
/*---------------------BMC: timespec helpers -----------------------------*/
|
/*---------------------BMC: timespec helpers -----------------------------*/
|
||||||
|
|
||||||
struct timespec min_diff_time = { .tv_sec = 0, .tv_nsec = 0 };
|
struct timespec min_diff_time = { .tv_sec = 0, .tv_nsec = 0 };
|
||||||
@@ -593,10 +596,11 @@ static void get_options(void) {
|
|||||||
|
|
||||||
|
|
||||||
if (UE_flag > 0) {
|
if (UE_flag > 0) {
|
||||||
|
uint8_t n_rb_dl;
|
||||||
paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC;
|
paramdef_t cmdline_uemodeparams[] =CMDLINE_UEMODEPARAMS_DESC;
|
||||||
paramdef_t cmdline_ueparams[] =CMDLINE_UEPARAMS_DESC;
|
paramdef_t cmdline_ueparams[] =CMDLINE_UEPARAMS_DESC;
|
||||||
|
|
||||||
|
set_default_frame_parms(frame_parms);
|
||||||
|
|
||||||
config_process_cmdline( cmdline_uemodeparams,sizeof(cmdline_uemodeparams)/sizeof(paramdef_t),NULL);
|
config_process_cmdline( cmdline_uemodeparams,sizeof(cmdline_uemodeparams)/sizeof(paramdef_t),NULL);
|
||||||
config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL);
|
config_process_cmdline( cmdline_ueparams,sizeof(cmdline_ueparams)/sizeof(paramdef_t),NULL);
|
||||||
@@ -606,22 +610,21 @@ static void get_options(void) {
|
|||||||
input_fd = fopen(loopfile,"r");
|
input_fd = fopen(loopfile,"r");
|
||||||
AssertFatal(input_fd != NULL,"Please provide a valid input file\n");
|
AssertFatal(input_fd != NULL,"Please provide a valid input file\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue;
|
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue;
|
||||||
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXMED_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_med;
|
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXMED_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_med;
|
||||||
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXBYP_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_byp;
|
if ( (cmdline_uemodeparams[CMDLINE_CALIBUERXBYP_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = rx_calib_ue_byp;
|
||||||
if ( *(cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].uptr) > 0) mode = debug_prach;
|
if ( (cmdline_uemodeparams[CMDLINE_DEBUGUEPRACH_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = debug_prach;
|
||||||
if ( *(cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].uptr) > 0) mode = no_L2_connect;
|
if ( (cmdline_uemodeparams[CMDLINE_NOL2CONNECT_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = no_L2_connect;
|
||||||
if ( *(cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].uptr) > 0) mode = calib_prach_tx;
|
if ( (cmdline_uemodeparams[CMDLINE_CALIBPRACHTX_IDX].paramflags & PARAMFLAG_PARAMSET) != 0) mode = calib_prach_tx;
|
||||||
if (dumpframe > 0) mode = rx_dump_frame;
|
if (dumpframe > 0) mode = rx_dump_frame;
|
||||||
|
|
||||||
if ( downlink_frequency[0][0] > 0) {
|
if ( downlink_frequency[0][0] > 0) {
|
||||||
for (CC_id=1; CC_id<MAX_NUM_CCs; CC_id++) {
|
printf("Downlink frequency set to %u\n", downlink_frequency[0][0]);
|
||||||
downlink_frequency[CC_id][1] = downlink_frequency[0][0];
|
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
downlink_frequency[CC_id][2] = downlink_frequency[0][0];
|
frame_parms[CC_id]->dl_CarrierFreq = downlink_frequency[0][0];
|
||||||
downlink_frequency[CC_id][3] = downlink_frequency[0][0];
|
}
|
||||||
printf("Downlink for CC_id %d frequency set to %u\n", CC_id, downlink_frequency[CC_id][0]);
|
UE_scan=0;
|
||||||
}
|
|
||||||
UE_scan=0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tddflag > 0) {
|
if (tddflag > 0) {
|
||||||
@@ -629,38 +632,38 @@ static void get_options(void) {
|
|||||||
frame_parms[CC_id]->frame_type = TDD;
|
frame_parms[CC_id]->frame_type = TDD;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frame_parms[0]->N_RB_DL !=0) {
|
if (n_rb_dl !=0) {
|
||||||
if ( frame_parms[0]->N_RB_DL < 6 ) {
|
printf("NB_RB set to %d\n",n_rb_dl);
|
||||||
frame_parms[0]->N_RB_DL = 6;
|
if ( n_rb_dl < 6 ) {
|
||||||
printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",frame_parms[0]->N_RB_DL);
|
n_rb_dl = 6;
|
||||||
}
|
printf ( "%i: Invalid number of ressource blocks, adjusted to 6\n",n_rb_dl);
|
||||||
if ( frame_parms[0]->N_RB_DL > 100 ) {
|
}
|
||||||
frame_parms[0]->N_RB_DL = 100;
|
if ( n_rb_dl > 100 ) {
|
||||||
printf ( "%i: Invalid number of ressource blocks, adjusted to 100\n",frame_parms[0]->N_RB_DL);
|
n_rb_dl = 100;
|
||||||
}
|
printf ( "%i: Invalid number of ressource blocks, adjusted to 100\n",n_rb_dl);
|
||||||
if ( frame_parms[0]->N_RB_DL > 50 && frame_parms[0]->N_RB_DL < 100 ) {
|
}
|
||||||
frame_parms[0]->N_RB_DL = 50;
|
if ( n_rb_dl > 50 && n_rb_dl < 100 ) {
|
||||||
printf ( "%i: Invalid number of ressource blocks, adjusted to 50\n",frame_parms[0]->N_RB_DL);
|
n_rb_dl = 50;
|
||||||
}
|
printf ( "%i: Invalid number of ressource blocks, adjusted to 50\n",n_rb_dl);
|
||||||
if ( frame_parms[0]->N_RB_DL > 25 && frame_parms[0]->N_RB_DL < 50 ) {
|
}
|
||||||
frame_parms[0]->N_RB_DL = 25;
|
if ( n_rb_dl > 25 && n_rb_dl < 50 ) {
|
||||||
printf ( "%i: Invalid number of ressource blocks, adjusted to 25\n",frame_parms[0]->N_RB_DL);
|
n_rb_dl = 25;
|
||||||
}
|
printf ( "%i: Invalid number of ressource blocks, adjusted to 25\n",n_rb_dl);
|
||||||
UE_scan = 0;
|
}
|
||||||
frame_parms[0]->N_RB_UL=frame_parms[0]->N_RB_DL;
|
UE_scan = 0;
|
||||||
for (CC_id=1; CC_id<MAX_NUM_CCs; CC_id++) {
|
for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
frame_parms[CC_id]->N_RB_DL=frame_parms[0]->N_RB_DL;
|
frame_parms[CC_id]->N_RB_DL=n_rb_dl;
|
||||||
frame_parms[CC_id]->N_RB_UL=frame_parms[0]->N_RB_UL;
|
frame_parms[CC_id]->N_RB_UL=n_rb_dl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (CC_id=0;CC_id<MAX_NUM_CCs;CC_id++) {
|
||||||
for (CC_id=1;CC_id<MAX_NUM_CCs;CC_id++) {
|
tx_max_power[CC_id]=tx_max_power[0];
|
||||||
tx_max_power[CC_id]=tx_max_power[0];
|
rx_gain[0][CC_id] = rx_gain[0][0];
|
||||||
rx_gain[0][CC_id] = rx_gain[0][0];
|
tx_gain[0][CC_id] = tx_gain[0][0];
|
||||||
tx_gain[0][CC_id] = tx_gain[0][0];
|
|
||||||
}
|
}
|
||||||
} /* UE_flag > 0 */
|
} /* UE_flag > 0 */
|
||||||
|
|
||||||
#if T_TRACER
|
#if T_TRACER
|
||||||
paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ;
|
paramdef_t cmdline_ttraceparams[] =CMDLINE_TTRACEPARAMS_DESC ;
|
||||||
config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL);
|
config_process_cmdline( cmdline_ttraceparams,sizeof(cmdline_ttraceparams)/sizeof(paramdef_t),NULL);
|
||||||
@@ -675,10 +678,11 @@ static void get_options(void) {
|
|||||||
NB_RU = RC.nb_RU;
|
NB_RU = RC.nb_RU;
|
||||||
printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,NB_RU);
|
printf("Configuration: nb_rrc_inst %d, nb_L1_inst %d, nb_ru %d\n",NB_eNB_INST,RC.nb_L1_inst,NB_RU);
|
||||||
}
|
}
|
||||||
} else if (UE_flag == 1 && (CONFIG_GETCONFFILE != NULL)) {
|
} else if (UE_flag == 1 && (!(CONFIG_ISFLAGSET(CONFIG_NOOOPT))) ) {
|
||||||
// Here the configuration file is the XER encoded UE capabilities
|
// Here the configuration file is the XER encoded UE capabilities
|
||||||
// Read it in and store in asn1c data structures
|
// Read it in and store in asn1c data structures
|
||||||
strcpy(uecap_xer,CONFIG_GETCONFFILE);
|
sprintf(uecap_xer,"%stargets/PROJECTS/GENERIC-LTE-EPC/CONF/UE_config.xml",getenv("OPENAIR_HOME"));
|
||||||
|
printf("%s\n",uecap_xer);
|
||||||
uecap_xer_in=1;
|
uecap_xer_in=1;
|
||||||
} /* UE with config file */
|
} /* UE with config file */
|
||||||
}
|
}
|
||||||
@@ -691,7 +695,7 @@ int T_dont_fork = 0; /* default is to fork, see 'T_init' to understand */
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]);
|
|
||||||
void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
||||||
|
|
||||||
int CC_id;
|
int CC_id;
|
||||||
@@ -728,11 +732,12 @@ void set_default_frame_parms(LTE_DL_FRAME_PARMS *frame_parms[MAX_NUM_CCs]) {
|
|||||||
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.highSpeedFlag=0;
|
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.highSpeedFlag=0;
|
||||||
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
|
frame_parms[CC_id]->prach_config_common.prach_ConfigInfo.prach_FreqOffset=0;
|
||||||
|
|
||||||
downlink_frequency[CC_id][0] = 2680000000; // Use float to avoid issue with frequency over 2^31.
|
// downlink_frequency[CC_id][0] = 2680000000; // Use float to avoid issue with frequency over 2^31.
|
||||||
downlink_frequency[CC_id][1] = downlink_frequency[CC_id][0];
|
// downlink_frequency[CC_id][1] = downlink_frequency[CC_id][0];
|
||||||
downlink_frequency[CC_id][2] = downlink_frequency[CC_id][0];
|
// downlink_frequency[CC_id][2] = downlink_frequency[CC_id][0];
|
||||||
downlink_frequency[CC_id][3] = downlink_frequency[CC_id][0];
|
// downlink_frequency[CC_id][3] = downlink_frequency[CC_id][0];
|
||||||
//printf("Downlink for CC_id %d frequency set to %u\n", CC_id, downlink_frequency[CC_id][0]);
|
//printf("Downlink for CC_id %d frequency set to %u\n", CC_id, downlink_frequency[CC_id][0]);
|
||||||
|
frame_parms[CC_id]->dl_CarrierFreq=downlink_frequency[CC_id][0];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -905,14 +910,14 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
|
|
||||||
// set default parameters
|
// set default parameters
|
||||||
if (UE_flag == 1) set_default_frame_parms(frame_parms);
|
//if (UE_flag == 1) set_default_frame_parms(frame_parms);
|
||||||
|
|
||||||
logInit();
|
logInit();
|
||||||
|
|
||||||
printf("Reading in command-line options\n");
|
printf("Reading in command-line options\n");
|
||||||
|
|
||||||
get_options ();
|
get_options ();
|
||||||
if (CONFIG_ISFLAGSET(CONFIG_ABORT)) {
|
if (CONFIG_ISFLAGSET(CONFIG_ABORT) && UE_flag == 0) {
|
||||||
fprintf(stderr,"Getting configuration failed\n");
|
fprintf(stderr,"Getting configuration failed\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
@@ -931,7 +936,7 @@ int main( int argc, char **argv )
|
|||||||
printf("configuring for UE\n");
|
printf("configuring for UE\n");
|
||||||
|
|
||||||
set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1);
|
set_comp_log(HW, LOG_DEBUG, LOG_HIGH, 1);
|
||||||
set_comp_log(PHY, LOG_DEBUG, LOG_HIGH, 1);
|
set_comp_log(PHY, LOG_INFO, LOG_HIGH, 1);
|
||||||
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(MAC, LOG_INFO, LOG_HIGH, 1);
|
||||||
set_comp_log(RLC, LOG_INFO, LOG_HIGH | FLAG_THREAD, 1);
|
set_comp_log(RLC, LOG_INFO, LOG_HIGH | FLAG_THREAD, 1);
|
||||||
set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1);
|
set_comp_log(PDCP, LOG_INFO, LOG_HIGH, 1);
|
||||||
@@ -1080,8 +1085,9 @@ int main( int argc, char **argv )
|
|||||||
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
else if (frame_parms[CC_id]->N_RB_DL == 25)
|
||||||
UE[CC_id]->N_TA_offset = 624/4;
|
UE[CC_id]->N_TA_offset = 624/4;
|
||||||
}
|
}
|
||||||
|
init_openair0();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
|
fill_modeled_runtime_table(runtime_phy_rx,runtime_phy_tx);
|
||||||
@@ -1130,8 +1136,6 @@ int main( int argc, char **argv )
|
|||||||
|
|
||||||
|
|
||||||
#if defined(ENABLE_ITTI)
|
#if defined(ENABLE_ITTI)
|
||||||
|
|
||||||
|
|
||||||
if ((UE_flag == 1)||
|
if ((UE_flag == 1)||
|
||||||
(RC.nb_inst > 0)) {
|
(RC.nb_inst > 0)) {
|
||||||
|
|
||||||
@@ -1149,16 +1153,6 @@ int main( int argc, char **argv )
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (phy_test==0) {
|
|
||||||
if (UE_flag==1) {
|
|
||||||
printf("Filling UE band info\n");
|
|
||||||
fill_ue_band_info();
|
|
||||||
dl_phy_sync_success (0, 0, 0, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mlockall(MCL_CURRENT | MCL_FUTURE);
|
mlockall(MCL_CURRENT | MCL_FUTURE);
|
||||||
|
|
||||||
@@ -1225,14 +1219,18 @@ int main( int argc, char **argv )
|
|||||||
rt_sleep_ns(10*100000000ULL);
|
rt_sleep_ns(10*100000000ULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// start the main threads
|
// start the main threads
|
||||||
if (UE_flag == 1) {
|
if (UE_flag == 1) {
|
||||||
int eMBMS_active = 0;
|
int eMBMS_active = 0;
|
||||||
init_UE(1,eMBMS_active,uecap_xer_in);
|
init_UE(1,eMBMS_active,uecap_xer_in);
|
||||||
|
|
||||||
|
if (phy_test==0) {
|
||||||
|
printf("Filling UE band info\n");
|
||||||
|
fill_ue_band_info();
|
||||||
|
dl_phy_sync_success (0, 0, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
number_of_cards = 1;
|
number_of_cards = 1;
|
||||||
|
|
||||||
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
for(CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
|
||||||
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
PHY_vars_UE_g[0][CC_id]->rf_map.card=0;
|
||||||
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
PHY_vars_UE_g[0][CC_id]->rf_map.chain=CC_id+chain_offset;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
#define CONFIG_HLP_NOSNGLT "Disables single-thread mode in lte-softmodem\n"
|
||||||
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
#define CONFIG_HLP_TADV "Set timing_advance\n"
|
||||||
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
#define CONFIG_HLP_DLF "Set the downlink frequency for all component carriers\n"
|
||||||
#define CONFIG_HLP_CHOFF "Channel id offset"
|
#define CONFIG_HLP_CHOFF "Channel id offset\n"
|
||||||
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
#define CONFIG_HLP_SOFTS "Enable soft scope and L1 and L2 stats (Xforms)\n"
|
||||||
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
#define CONFIG_HLP_EXMCAL "Calibrate the EXMIMO borad, available files: exmimo2_2arxg.lime exmimo2_2brxg.lime \n"
|
||||||
#define CONFIG_HLP_ITTIL "Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n"
|
#define CONFIG_HLP_ITTIL "Generate ITTI analyzser logs (similar to wireshark logs but with more details)\n"
|
||||||
@@ -127,7 +127,7 @@
|
|||||||
{"ue-nb-ant-tx", CONFIG_HLP_UENANTT, 0, u8ptr:&nb_antenna_tx, defuintval:1, TYPE_UINT8, 0}, \
|
{"ue-nb-ant-tx", CONFIG_HLP_UENANTT, 0, u8ptr:&nb_antenna_tx, defuintval:1, TYPE_UINT8, 0}, \
|
||||||
{"ue-scan-carrier", CONFIG_HLP_UESCAN, PARAMFLAG_BOOL, iptr:&UE_scan_carrier, defintval:0, TYPE_INT, 0}, \
|
{"ue-scan-carrier", CONFIG_HLP_UESCAN, PARAMFLAG_BOOL, iptr:&UE_scan_carrier, defintval:0, TYPE_INT, 0}, \
|
||||||
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
|
{"ue-max-power", NULL, 0, iptr:&(tx_max_power[0]), defintval:90, TYPE_INT, 0}, \
|
||||||
{"r" , CONFIG_HLP_PRB, 0, u8ptr:&(frame_parms[0]->N_RB_DL), defintval:0, TYPE_UINT8, 0}, \
|
{"r" , CONFIG_HLP_PRB, 0, u8ptr:&n_rb_dl, defintval:0, TYPE_UINT8, 0}, \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -303,6 +303,7 @@ static void *UE_thread_synch(void *arg)
|
|||||||
} while (ind < sizeof(eutra_bands) / sizeof(eutra_bands[0]));
|
} while (ind < sizeof(eutra_bands) / sizeof(eutra_bands[0]));
|
||||||
|
|
||||||
if (found == 0) {
|
if (found == 0) {
|
||||||
|
LOG_E(PHY,"Can't find EUTRA band for frequency %d",UE->frame_parms.dl_CarrierFreq);
|
||||||
exit_fun("Can't find EUTRA band for frequency");
|
exit_fun("Can't find EUTRA band for frequency");
|
||||||
return &UE_thread_synch_retval;
|
return &UE_thread_synch_retval;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -782,7 +782,10 @@ void get_simulation_options(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( load_configmodule(argc,argv) == NULL) {
|
||||||
|
exit_fun("[SOFTMODEM] Error, configuration module init failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (RC.config_file_name != NULL) {
|
if (RC.config_file_name != NULL) {
|
||||||
/* Read eNB configuration file */
|
/* Read eNB configuration file */
|
||||||
RCConfig();
|
RCConfig();
|
||||||
|
|||||||
Reference in New Issue
Block a user