Use osmo_tdef to implement dl-tbf-idle-time
Change-Id: I5e4f0d2f90e643600b7752525d6c2830856c9d3b
This commit is contained in:
parent
63700ead34
commit
2b5c629055
|
@ -84,6 +84,7 @@ static struct osmo_tdef T_defs_pcu[] = {
|
|||
{ .T=-2001, .default_val=2, .unit=OSMO_TDEF_S, .desc="PACCH assignment timer (s)", .val=0 },
|
||||
{ .T=-2002, .default_val=200, .unit=OSMO_TDEF_MS, .desc="Waiting after IMM.ASS confirm timer (ms)", .val=0 },
|
||||
{ .T=-2030, .default_val=60, .unit=OSMO_TDEF_S, .desc="Time to keep an idle MS object alive (s)", .val=0 }, /* slightly above T3314 (default 44s, 24.008, 11.2.2) */
|
||||
{ .T=-2031, .default_val=2000, .unit=OSMO_TDEF_MS, .desc="Time to keep an idle DL TBF alive (ms)", .val=0 },
|
||||
{ .T=0, .default_val=0, .unit=OSMO_TDEF_S, .desc=NULL, .val=0 } /* empty item at the end */
|
||||
};
|
||||
|
||||
|
|
|
@ -133,7 +133,6 @@ struct gprs_rlcmac_bts {
|
|||
uint8_t force_two_phase;
|
||||
uint8_t alpha, gamma;
|
||||
uint8_t egprs_enabled;
|
||||
uint32_t dl_tbf_idle_msec; /* hold time for idle DL TBFs */
|
||||
bool dl_tbf_preemptive_retransmission;
|
||||
uint8_t si13[GSM_MACBLOCK_LEN];
|
||||
bool si13_is_set;
|
||||
|
|
|
@ -247,9 +247,10 @@ static inline enum tbf_dl_prio tbf_compute_priority(const struct gprs_rlcmac_bts
|
|||
uint8_t ts, uint32_t fn, int age)
|
||||
{
|
||||
const gprs_rlc_dl_window *w = tbf->window();
|
||||
unsigned long msecs = osmo_tdef_get(bts->T_defs_pcu, 3190, OSMO_TDEF_MS, -1);
|
||||
unsigned long msecs_t3190 = osmo_tdef_get(bts->T_defs_pcu, 3190, OSMO_TDEF_MS, -1);
|
||||
unsigned long dl_tbf_idle_msec = osmo_tdef_get(bts->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);
|
||||
int age_thresh1 = msecs_to_frames(200);
|
||||
int age_thresh2 = msecs_to_frames(OSMO_MIN(msecs/2, bts->dl_tbf_idle_msec));
|
||||
int age_thresh2 = msecs_to_frames(OSMO_MIN(msecs_t3190/2, dl_tbf_idle_msec));
|
||||
|
||||
if (tbf->is_control_ts(ts) && tbf->need_control_ts())
|
||||
return DL_PRIO_CONTROL;
|
||||
|
|
|
@ -252,7 +252,6 @@ int main(int argc, char *argv[])
|
|||
bts->ws_pdch = 0;
|
||||
|
||||
bts->llc_codel_interval_msec = LLC_CODEL_USE_DEFAULT;
|
||||
bts->dl_tbf_idle_msec = 2000;
|
||||
bts->llc_idle_ack_csec = 10;
|
||||
|
||||
/*
|
||||
|
|
|
@ -253,9 +253,6 @@ static int config_write_pcu(struct vty *vty)
|
|||
vty_out(vty, " two-phase-access%s", VTY_NEWLINE);
|
||||
vty_out(vty, " alpha %d%s", bts->alpha, VTY_NEWLINE);
|
||||
vty_out(vty, " gamma %d%s", bts->gamma * 2, VTY_NEWLINE);
|
||||
if (bts->dl_tbf_idle_msec)
|
||||
vty_out(vty, " dl-tbf-idle-time %d%s", bts->dl_tbf_idle_msec,
|
||||
VTY_NEWLINE);
|
||||
if (!bts->dl_tbf_preemptive_retransmission)
|
||||
vty_out(vty, " no dl-tbf-preemptive-retransmission%s", VTY_NEWLINE);
|
||||
if (strcmp(bts->pcu_sock_path, PCU_SOCK_DEFAULT))
|
||||
|
@ -850,27 +847,31 @@ DEFUN(show_bts_stats,
|
|||
}
|
||||
|
||||
#define IDLE_TIME_STR "keep an idle DL TBF alive for the time given\n"
|
||||
DEFUN(cfg_pcu_dl_tbf_idle_time,
|
||||
DEFUN_DEPRECATED(cfg_pcu_dl_tbf_idle_time,
|
||||
cfg_pcu_dl_tbf_idle_time_cmd,
|
||||
"dl-tbf-idle-time <1-5000>",
|
||||
IDLE_TIME_STR "idle time in msec")
|
||||
{
|
||||
vty_out(vty, "%% 'dl-tbf-idle-time' is now deprecated: use 'timer X2031 <val>' instead%s", VTY_NEWLINE);
|
||||
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->dl_tbf_idle_msec = atoi(argv[0]);
|
||||
|
||||
if (osmo_tdef_set(bts->T_defs_pcu, -2031, atoi(argv[0]), OSMO_TDEF_MS) < 0)
|
||||
return CMD_WARNING;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
DEFUN(cfg_pcu_no_dl_tbf_idle_time,
|
||||
DEFUN_DEPRECATED(cfg_pcu_no_dl_tbf_idle_time,
|
||||
cfg_pcu_no_dl_tbf_idle_time_cmd,
|
||||
"no dl-tbf-idle-time",
|
||||
NO_STR IDLE_TIME_STR)
|
||||
{
|
||||
vty_out(vty, "%% 'no dl-tbf-idle-time' is now deprecated: use 'timer X2031 0' instead%s", VTY_NEWLINE);
|
||||
|
||||
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||
|
||||
bts->dl_tbf_idle_msec = 0;
|
||||
|
||||
if (osmo_tdef_set(bts->T_defs_pcu, -2031, 0, OSMO_TDEF_MS) < 0)
|
||||
return CMD_WARNING;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1235,11 +1235,13 @@ int gprs_rlcmac_dl_tbf::frames_since_last_drain(unsigned fn) const
|
|||
bool gprs_rlcmac_dl_tbf::keep_open(unsigned fn) const
|
||||
{
|
||||
int keep_time_frames;
|
||||
unsigned long dl_tbf_idle_msec;
|
||||
|
||||
if (bts_data()->dl_tbf_idle_msec == 0)
|
||||
dl_tbf_idle_msec = osmo_tdef_get(bts_data()->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);
|
||||
if (dl_tbf_idle_msec == 0)
|
||||
return false;
|
||||
|
||||
keep_time_frames = msecs_to_frames(bts_data()->dl_tbf_idle_msec);
|
||||
keep_time_frames = msecs_to_frames(dl_tbf_idle_msec);
|
||||
return frames_since_last_drain(fn) <= keep_time_frames;
|
||||
}
|
||||
|
||||
|
|
|
@ -156,6 +156,7 @@ static void setup_bts(BTS *the_bts, uint8_t ts_no, uint8_t cs = 1)
|
|||
bts->initial_cs_dl = cs;
|
||||
bts->initial_cs_ul = cs;
|
||||
osmo_tdef_set(bts->T_defs_pcu, -2030, 0, OSMO_TDEF_S);
|
||||
osmo_tdef_set(bts->T_defs_pcu, -2031, 0, OSMO_TDEF_S);
|
||||
trx = &bts->trx[0];
|
||||
|
||||
trx->pdch[ts_no].enable();
|
||||
|
@ -318,6 +319,7 @@ static void test_tbf_delayed_release()
|
|||
uint32_t fn = 0;
|
||||
uint8_t trx_no;
|
||||
uint32_t tlli = 0xffeeddcc;
|
||||
unsigned long dl_tbf_idle_msec;
|
||||
|
||||
uint8_t rbb[64/8];
|
||||
|
||||
|
@ -328,7 +330,7 @@ static void test_tbf_delayed_release()
|
|||
bts = the_bts.bts_data();
|
||||
|
||||
setup_bts(&the_bts, ts_no);
|
||||
bts->dl_tbf_idle_msec = 200;
|
||||
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
|
||||
|
||||
dl_tbf = create_dl_tbf(&the_bts, ms_class, 0, &trx_no);
|
||||
dl_tbf->update_ms(tlli, GPRS_RLCMAC_DL_TBF);
|
||||
|
@ -362,7 +364,8 @@ static void test_tbf_delayed_release()
|
|||
RCV_ACK(false, dl_tbf, rbb); /* Receive an ACK */
|
||||
|
||||
/* Timeout (make sure fn % 52 remains valid) */
|
||||
fn += 52 * ((msecs_to_frames(bts->dl_tbf_idle_msec + 100) + 51)/ 52);
|
||||
dl_tbf_idle_msec = osmo_tdef_get(bts->T_defs_pcu, -2031, OSMO_TDEF_MS, -1);
|
||||
fn += 52 * ((msecs_to_frames(dl_tbf_idle_msec + 100) + 51)/ 52);
|
||||
request_dl_rlc_block(dl_tbf, &fn);
|
||||
|
||||
OSMO_ASSERT(dl_tbf->state_is(GPRS_RLCMAC_FINISHED));
|
||||
|
@ -2529,7 +2532,7 @@ static void test_tbf_epdan_out_of_rx_window(void)
|
|||
bts = the_bts.bts_data();
|
||||
|
||||
setup_bts(&the_bts, ts_no);
|
||||
bts->dl_tbf_idle_msec = 200;
|
||||
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
|
||||
bts->egprs_enabled = 1;
|
||||
/* ARQ II */
|
||||
bts->dl_arq_type = EGPRS_ARQ2;
|
||||
|
@ -3064,7 +3067,7 @@ static void test_tbf_egprs_retx_dl(void)
|
|||
bts = the_bts.bts_data();
|
||||
bts->cs_downgrade_threshold = 0;
|
||||
setup_bts(&the_bts, ts_no);
|
||||
bts->dl_tbf_idle_msec = 200;
|
||||
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
|
||||
bts->egprs_enabled = 1;
|
||||
/* ARQ II */
|
||||
bts->dl_arq_type = EGPRS_ARQ2;
|
||||
|
@ -3093,7 +3096,7 @@ static void test_tbf_egprs_spb_dl(void)
|
|||
bts = the_bts.bts_data();
|
||||
bts->cs_downgrade_threshold = 0;
|
||||
setup_bts(&the_bts, ts_no);
|
||||
bts->dl_tbf_idle_msec = 200;
|
||||
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
|
||||
bts->egprs_enabled = 1;
|
||||
|
||||
/* ARQ I resegmentation support */
|
||||
|
@ -3125,7 +3128,7 @@ static void test_tbf_egprs_dl()
|
|||
bts = the_bts.bts_data();
|
||||
|
||||
setup_bts(&the_bts, ts_no);
|
||||
bts->dl_tbf_idle_msec = 200;
|
||||
OSMO_ASSERT(osmo_tdef_set(bts->T_defs_pcu, -2031, 200, OSMO_TDEF_MS) == 0);
|
||||
bts->egprs_enabled = 1;
|
||||
/* ARQ II */
|
||||
bts->dl_arq_type = EGPRS_ARQ2;
|
||||
|
|
Loading…
Reference in New Issue