gNB: make SR timers configurable in CONF file
This commit is contained in:
@@ -643,7 +643,10 @@ int main(int argc, char **argv)
|
|||||||
.minRXTXTIME = 6,
|
.minRXTXTIME = 6,
|
||||||
.do_CSIRS = 0,
|
.do_CSIRS = 0,
|
||||||
.do_SRS = 0,
|
.do_SRS = 0,
|
||||||
.force_256qam_off = false};
|
.force_256qam_off = false,
|
||||||
|
.timer_config.sr_ProhibitTimer = 0,
|
||||||
|
.timer_config.sr_TransMax = 64,
|
||||||
|
.timer_config.sr_ProhibitTimer_v1700 = 0};
|
||||||
|
|
||||||
RC.nb_nr_macrlc_inst = 1;
|
RC.nb_nr_macrlc_inst = 1;
|
||||||
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
||||||
|
|||||||
@@ -607,7 +607,10 @@ int main(int argc, char *argv[])
|
|||||||
.minRXTXTIME = 0,
|
.minRXTXTIME = 0,
|
||||||
.do_CSIRS = 0,
|
.do_CSIRS = 0,
|
||||||
.do_SRS = 0,
|
.do_SRS = 0,
|
||||||
.force_256qam_off = false};
|
.force_256qam_off = false,
|
||||||
|
.timer_config.sr_ProhibitTimer = 0,
|
||||||
|
.timer_config.sr_TransMax = 64,
|
||||||
|
.timer_config.sr_ProhibitTimer_v1700 = 0};
|
||||||
|
|
||||||
RC.nb_nr_macrlc_inst = 1;
|
RC.nb_nr_macrlc_inst = 1;
|
||||||
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
RC.nb_nr_mac_CC = (int*)malloc(RC.nb_nr_macrlc_inst*sizeof(int));
|
||||||
|
|||||||
@@ -1321,6 +1321,20 @@ void RCconfig_nr_macrlc(configmodule_interface_t *cfg)
|
|||||||
config.force_256qam_off ? "force off" : "may be on",
|
config.force_256qam_off ? "force off" : "may be on",
|
||||||
config.use_deltaMCS ? "on" : "off");
|
config.use_deltaMCS ? "on" : "off");
|
||||||
|
|
||||||
|
paramdef_t Timers_Params[] = GNB_TIMERS_PARAMS_DESC;
|
||||||
|
char aprefix[MAX_OPTNAME_SIZE * 2 + 8];
|
||||||
|
sprintf(aprefix, "%s.[0].%s", GNB_CONFIG_STRING_GNB_LIST, GNB_CONFIG_STRING_TIMERS_CONFIG);
|
||||||
|
config_get(config_get_if(), Timers_Params, sizeofArray(Timers_Params), aprefix);
|
||||||
|
|
||||||
|
config.timer_config.sr_ProhibitTimer = *Timers_Params[GNB_TIMERS_SR_PROHIBIT_TIMER_IDX].iptr;
|
||||||
|
config.timer_config.sr_TransMax = *Timers_Params[GNB_TIMERS_SR_TRANS_MAX_IDX].iptr;
|
||||||
|
config.timer_config.sr_ProhibitTimer_v1700 = *Timers_Params[GNB_TIMERS_SR_PROHIBIT_TIMER_V1700_IDX].iptr;
|
||||||
|
LOG_I(GNB_APP,
|
||||||
|
"sr_ProhibitTimer %d, sr_TransMax %d, sr_ProhibitTimer_v1700 %d\n",
|
||||||
|
config.timer_config.sr_ProhibitTimer,
|
||||||
|
config.timer_config.sr_TransMax,
|
||||||
|
config.timer_config.sr_ProhibitTimer_v1700);
|
||||||
|
|
||||||
NR_ServingCellConfigCommon_t *scc = get_scc_config(cfg, config.minRXTXTIME);
|
NR_ServingCellConfigCommon_t *scc = get_scc_config(cfg, config.minRXTXTIME);
|
||||||
//xer_fprint(stdout, &asn_DEF_NR_ServingCellConfigCommon, scc);
|
//xer_fprint(stdout, &asn_DEF_NR_ServingCellConfigCommon, scc);
|
||||||
NR_ServingCellConfig_t *scd = get_scd_config(cfg);
|
NR_ServingCellConfig_t *scd = get_scd_config(cfg);
|
||||||
|
|||||||
@@ -323,6 +323,30 @@ typedef enum {
|
|||||||
|
|
||||||
#define GNB_AMF_IPV4_ADDRESS_IDX 0
|
#define GNB_AMF_IPV4_ADDRESS_IDX 0
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* TIMERS configuration parameters section name */
|
||||||
|
#define GNB_CONFIG_STRING_TIMERS_CONFIG "TIMERS"
|
||||||
|
|
||||||
|
/* TIMERS configuration parameters names */
|
||||||
|
#define GNB_CONFIG_STRING_TIMERS_SR_PROHIBIT_TIMER "sr_ProhibitTimer"
|
||||||
|
#define GNB_CONFIG_STRING_TIMERS_SR_TRANS_MAX "sr_TransMax"
|
||||||
|
#define GNB_CONFIG_STRING_TIMERS_SR_PROHIBIT_TIMER_V1700 "sr_ProhibitTimer_v1700"
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
/* TIMERS configuration parameters */
|
||||||
|
/* optname helpstr paramflags XXXptr defXXXval type numelt */
|
||||||
|
/*-------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
|
#define GNB_TIMERS_PARAMS_DESC { \
|
||||||
|
{GNB_CONFIG_STRING_TIMERS_SR_PROHIBIT_TIMER, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_TIMERS_SR_TRANS_MAX, NULL, 0, .iptr=NULL, .defintval=64, TYPE_INT, 0}, \
|
||||||
|
{GNB_CONFIG_STRING_TIMERS_SR_PROHIBIT_TIMER_V1700, NULL, 0, .iptr=NULL, .defintval=0, TYPE_INT, 0}, \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define GNB_TIMERS_SR_PROHIBIT_TIMER_IDX 0
|
||||||
|
#define GNB_TIMERS_SR_TRANS_MAX_IDX 1
|
||||||
|
#define GNB_TIMERS_SR_PROHIBIT_TIMER_V1700_IDX 2
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------------------------------------------------------------*/
|
||||||
/* SCTP configuration parameters section name */
|
/* SCTP configuration parameters section name */
|
||||||
|
|||||||
@@ -128,6 +128,12 @@ typedef struct nr_pdsch_AntennaPorts_t {
|
|||||||
int XP;
|
int XP;
|
||||||
} nr_pdsch_AntennaPorts_t;
|
} nr_pdsch_AntennaPorts_t;
|
||||||
|
|
||||||
|
typedef struct nr_mac_timers {
|
||||||
|
int sr_ProhibitTimer;
|
||||||
|
int sr_TransMax;
|
||||||
|
int sr_ProhibitTimer_v1700;
|
||||||
|
} nr_mac_timers_t;
|
||||||
|
|
||||||
typedef struct nr_mac_config_t {
|
typedef struct nr_mac_config_t {
|
||||||
int sib1_tda;
|
int sib1_tda;
|
||||||
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
nr_pdsch_AntennaPorts_t pdsch_AntennaPorts;
|
||||||
@@ -140,6 +146,7 @@ typedef struct nr_mac_config_t {
|
|||||||
bool use_deltaMCS;
|
bool use_deltaMCS;
|
||||||
//int pusch_TargetSNRx10;
|
//int pusch_TargetSNRx10;
|
||||||
//int pucch_TargetSNRx10;
|
//int pucch_TargetSNRx10;
|
||||||
|
nr_mac_timers_t timer_config;
|
||||||
} nr_mac_config_t;
|
} nr_mac_config_t;
|
||||||
|
|
||||||
typedef struct NR_preamble_ue {
|
typedef struct NR_preamble_ue {
|
||||||
|
|||||||
+112
-16
@@ -2282,7 +2282,102 @@ static NR_PhysicalCellGroupConfig_t *configure_phy_cellgroup(void)
|
|||||||
return physicalCellGroupConfig;
|
return physicalCellGroupConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NR_MAC_CellGroupConfig_t *configure_mac_cellgroup(void)
|
static long *get_sr_ProhibitTimer(const nr_mac_timers_t *timer_config)
|
||||||
|
{
|
||||||
|
if (timer_config->sr_ProhibitTimer == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
long *ret = calloc(1, sizeof(*ret));
|
||||||
|
switch (timer_config->sr_ProhibitTimer) {
|
||||||
|
case 1:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms1;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms4;
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms8;
|
||||||
|
break;
|
||||||
|
case 16:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms16;
|
||||||
|
break;
|
||||||
|
case 32:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms32;
|
||||||
|
break;
|
||||||
|
case 64:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms64;
|
||||||
|
break;
|
||||||
|
case 128:
|
||||||
|
*ret = NR_SchedulingRequestToAddMod__sr_ProhibitTimer_ms128;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(1 == 0, "Invalid value configured for sr_ProhibitTimer!\n");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static long get_sr_TransMax(const nr_mac_timers_t *timer_config)
|
||||||
|
{
|
||||||
|
switch (timer_config->sr_TransMax) {
|
||||||
|
case 4:
|
||||||
|
return NR_SchedulingRequestToAddMod__sr_TransMax_n4;
|
||||||
|
case 8:
|
||||||
|
return NR_SchedulingRequestToAddMod__sr_TransMax_n8;
|
||||||
|
case 16:
|
||||||
|
return NR_SchedulingRequestToAddMod__sr_TransMax_n16;
|
||||||
|
case 32:
|
||||||
|
return NR_SchedulingRequestToAddMod__sr_TransMax_n32;
|
||||||
|
case 64:
|
||||||
|
return NR_SchedulingRequestToAddMod__sr_TransMax_n64;
|
||||||
|
default:
|
||||||
|
AssertFatal(1 == 0, "Invalid value configured for sr_TransMax!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static long *get_sr_ProhibitTimer_v1700(const nr_mac_timers_t *timer_config)
|
||||||
|
{
|
||||||
|
if (timer_config->sr_ProhibitTimer_v1700 == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
long *ret = calloc(1, sizeof(*ret));
|
||||||
|
switch (timer_config->sr_ProhibitTimer_v1700) {
|
||||||
|
case 192:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms192;
|
||||||
|
break;
|
||||||
|
case 256:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms256;
|
||||||
|
break;
|
||||||
|
case 320:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms320;
|
||||||
|
break;
|
||||||
|
case 384:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms384;
|
||||||
|
break;
|
||||||
|
case 448:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms448;
|
||||||
|
break;
|
||||||
|
case 512:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms512;
|
||||||
|
break;
|
||||||
|
case 576:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms576;
|
||||||
|
break;
|
||||||
|
case 640:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms640;
|
||||||
|
break;
|
||||||
|
case 1082:
|
||||||
|
*ret = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms1082;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
AssertFatal(1 == 0, "Invalid value configured for sr_ProhibitTimer_v1700!\n");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NR_MAC_CellGroupConfig_t *configure_mac_cellgroup(const nr_mac_timers_t *timer_config)
|
||||||
{
|
{
|
||||||
NR_MAC_CellGroupConfig_t * mac_CellGroupConfig = calloc(1, sizeof(*mac_CellGroupConfig));
|
NR_MAC_CellGroupConfig_t * mac_CellGroupConfig = calloc(1, sizeof(*mac_CellGroupConfig));
|
||||||
AssertFatal(mac_CellGroupConfig != NULL, "Couldn't allocate mac-CellGroupConfig. Out of memory!\n");
|
AssertFatal(mac_CellGroupConfig != NULL, "Couldn't allocate mac-CellGroupConfig. Out of memory!\n");
|
||||||
@@ -2303,20 +2398,21 @@ static NR_MAC_CellGroupConfig_t *configure_mac_cellgroup(void)
|
|||||||
mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList = CALLOC(1,sizeof(*mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList));
|
mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList = CALLOC(1,sizeof(*mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList));
|
||||||
struct NR_SchedulingRequestToAddMod *schedulingrequestlist = CALLOC(1,sizeof(*schedulingrequestlist));
|
struct NR_SchedulingRequestToAddMod *schedulingrequestlist = CALLOC(1,sizeof(*schedulingrequestlist));
|
||||||
schedulingrequestlist->schedulingRequestId = 0;
|
schedulingrequestlist->schedulingRequestId = 0;
|
||||||
schedulingrequestlist->sr_ProhibitTimer = NULL;
|
schedulingrequestlist->sr_ProhibitTimer = get_sr_ProhibitTimer(timer_config);
|
||||||
schedulingrequestlist->sr_TransMax = NR_SchedulingRequestToAddMod__sr_TransMax_n64;
|
schedulingrequestlist->sr_TransMax = get_sr_TransMax(timer_config);
|
||||||
asn1cSeqAdd(&(mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList->list),schedulingrequestlist);
|
asn1cSeqAdd(&(mac_CellGroupConfig->schedulingRequestConfig->schedulingRequestToAddModList->list),schedulingrequestlist);
|
||||||
|
|
||||||
mac_CellGroupConfig->ext4 = calloc(1, sizeof(*mac_CellGroupConfig->ext4));
|
if (timer_config->sr_ProhibitTimer_v1700 != 0) {
|
||||||
mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700 =
|
mac_CellGroupConfig->ext4 = calloc(1, sizeof(*mac_CellGroupConfig->ext4));
|
||||||
calloc(1, sizeof(*mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700));
|
mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700 =
|
||||||
mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700 =
|
calloc(1, sizeof(*mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700));
|
||||||
calloc(1, sizeof(*mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700));
|
mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700 =
|
||||||
struct NR_SchedulingRequestToAddModExt_v1700 *schedulingrequestlist_v1700 = calloc(1, sizeof(*schedulingrequestlist_v1700));
|
calloc(1, sizeof(*mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700));
|
||||||
schedulingrequestlist_v1700->sr_ProhibitTimer_v1700 = calloc(1, sizeof(*schedulingrequestlist_v1700->sr_ProhibitTimer_v1700));
|
struct NR_SchedulingRequestToAddModExt_v1700 *schedulingrequestlist_v1700 = calloc(1, sizeof(*schedulingrequestlist_v1700));
|
||||||
*schedulingrequestlist_v1700->sr_ProhibitTimer_v1700 = NR_SchedulingRequestToAddModExt_v1700__sr_ProhibitTimer_v1700_ms576;
|
schedulingrequestlist_v1700->sr_ProhibitTimer_v1700 = get_sr_ProhibitTimer_v1700(timer_config);
|
||||||
asn1cSeqAdd(&(mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700->list),
|
asn1cSeqAdd(&(mac_CellGroupConfig->ext4->schedulingRequestConfig_v1700->schedulingRequestToAddModListExt_v1700->list),
|
||||||
schedulingrequestlist_v1700);
|
schedulingrequestlist_v1700);
|
||||||
|
}
|
||||||
|
|
||||||
mac_CellGroupConfig->skipUplinkTxDynamic=false;
|
mac_CellGroupConfig->skipUplinkTxDynamic=false;
|
||||||
mac_CellGroupConfig->ext1 = NULL;
|
mac_CellGroupConfig->ext1 = NULL;
|
||||||
@@ -2584,8 +2680,8 @@ NR_CellGroupConfig_t *get_initial_cellGroupConfig(int uid,
|
|||||||
cellGroupConfig->rlc_BearerToReleaseList = NULL;
|
cellGroupConfig->rlc_BearerToReleaseList = NULL;
|
||||||
|
|
||||||
/* mac CellGroup Config */
|
/* mac CellGroup Config */
|
||||||
cellGroupConfig->mac_CellGroupConfig = configure_mac_cellgroup();
|
cellGroupConfig->mac_CellGroupConfig = configure_mac_cellgroup(&configuration->timer_config);
|
||||||
|
|
||||||
cellGroupConfig->physicalCellGroupConfig = configure_phy_cellgroup();
|
cellGroupConfig->physicalCellGroupConfig = configure_phy_cellgroup();
|
||||||
|
|
||||||
cellGroupConfig->spCellConfig = get_initial_SpCellConfig(uid, scc, servingcellconfigdedicated, configuration);
|
cellGroupConfig->spCellConfig = get_initial_SpCellConfig(uid, scc, servingcellconfigdedicated, configuration);
|
||||||
@@ -2798,7 +2894,7 @@ NR_CellGroupConfig_t *get_default_secondaryCellGroup(const NR_ServingCellConfigC
|
|||||||
secondaryCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*secondaryCellGroup->rlc_BearerToAddModList));
|
secondaryCellGroup->rlc_BearerToAddModList = calloc(1, sizeof(*secondaryCellGroup->rlc_BearerToAddModList));
|
||||||
asn1cSeqAdd(&secondaryCellGroup->rlc_BearerToAddModList->list, RLC_BearerConfig);
|
asn1cSeqAdd(&secondaryCellGroup->rlc_BearerToAddModList->list, RLC_BearerConfig);
|
||||||
|
|
||||||
secondaryCellGroup->mac_CellGroupConfig = configure_mac_cellgroup();
|
secondaryCellGroup->mac_CellGroupConfig = configure_mac_cellgroup(&configuration->timer_config);
|
||||||
secondaryCellGroup->physicalCellGroupConfig = configure_phy_cellgroup();
|
secondaryCellGroup->physicalCellGroupConfig = configure_phy_cellgroup();
|
||||||
secondaryCellGroup->spCellConfig = calloc(1, sizeof(*secondaryCellGroup->spCellConfig));
|
secondaryCellGroup->spCellConfig = calloc(1, sizeof(*secondaryCellGroup->spCellConfig));
|
||||||
secondaryCellGroup->spCellConfig->servCellIndex = calloc(1, sizeof(*secondaryCellGroup->spCellConfig->servCellIndex));
|
secondaryCellGroup->spCellConfig->servCellIndex = calloc(1, sizeof(*secondaryCellGroup->spCellConfig->servCellIndex));
|
||||||
|
|||||||
Reference in New Issue
Block a user