diff options
-rw-r--r-- | src/bts.h | 1 | ||||
-rw-r--r-- | src/pcu_vty.c | 27 | ||||
-rw-r--r-- | src/tbf.cpp | 4 |
3 files changed, 31 insertions, 1 deletions
@@ -141,6 +141,7 @@ struct gprs_rlcmac_bts { uint8_t force_two_phase; uint8_t alpha, gamma; uint32_t dl_tbf_idle_msec; /* hold time for idle DL TBFs */ + uint32_t ms_idle_sec; /* TBF handling, make private or move into TBFController */ /* list of uplink TBFs */ diff --git a/src/pcu_vty.c b/src/pcu_vty.c index a08ec368..9490664f 100644 --- a/src/pcu_vty.c +++ b/src/pcu_vty.c @@ -483,6 +483,31 @@ DEFUN(cfg_pcu_no_dl_tbf_idle_time, return CMD_SUCCESS; } +#define MS_IDLE_TIME_STR "keep an idle MS object alive for the time given\n" +DEFUN(cfg_pcu_ms_idle_time, + cfg_pcu_ms_idle_time_cmd, + "ms-idle-time <1-7200>", + MS_IDLE_TIME_STR "idle time in sec") +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->ms_idle_sec = atoi(argv[0]); + + return CMD_SUCCESS; +} + +DEFUN(cfg_pcu_no_ms_idle_time, + cfg_pcu_no_ms_idle_time_cmd, + "no ms-idle-time", + NO_STR MS_IDLE_TIME_STR) +{ + struct gprs_rlcmac_bts *bts = bts_main_data(); + + bts->ms_idle_sec = 0; + + return CMD_SUCCESS; +} + DEFUN(show_tbf, show_tbf_cmd, "show tbf all", @@ -555,6 +580,8 @@ int pcu_vty_init(const struct log_info *cat) install_element(PCU_NODE, &cfg_pcu_gamma_cmd); install_element(PCU_NODE, &cfg_pcu_dl_tbf_idle_time_cmd); install_element(PCU_NODE, &cfg_pcu_no_dl_tbf_idle_time_cmd); + install_element(PCU_NODE, &cfg_pcu_ms_idle_time_cmd); + install_element(PCU_NODE, &cfg_pcu_no_ms_idle_time_cmd); install_element_ve(&show_bts_stats_cmd); install_element_ve(&show_tbf_cmd); diff --git a/src/tbf.cpp b/src/tbf.cpp index 53f1ae13..8501b161 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -126,8 +126,10 @@ void gprs_rlcmac_tbf::update_ms(uint32_t tlli, enum gprs_rlcmac_tbf_direction di { if (!ms()) { GprsMs *new_ms = bts->ms_store().get_ms(tlli); - if (!new_ms) + if (!new_ms) { new_ms = bts->ms_store().create_ms(tlli, dir); + new_ms->set_timeout(bts->bts_data()->ms_idle_sec); + } if (dir == GPRS_RLCMAC_UL_TBF) new_ms->set_ta(m_ta); |