aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2013-03-10 11:49:35 +0100
committerIvan Kluchnikov <kluchnikovi@gmail.com>2014-05-06 17:21:59 +0400
commit151cef503149511311de09c519a7e4037775db57 (patch)
tree76bc95cb8c406d4c6421f33a863a3e360981c876 /openbsc
parent0105a6b3408c67237726f500b807ae046995551d (diff)
Add option to set RADIO LINK TIMEOUT value via VTY
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/gsm_04_08.h14
-rw-r--r--openbsc/src/libbsc/bsc_init.c3
-rw-r--r--openbsc/src/libbsc/bsc_vty.c17
-rw-r--r--openbsc/src/libcommon/gsm_data.c2
4 files changed, 33 insertions, 3 deletions
diff --git a/openbsc/include/openbsc/gsm_04_08.h b/openbsc/include/openbsc/gsm_04_08.h
index 93348d1a8..d94c5582f 100644
--- a/openbsc/include/openbsc/gsm_04_08.h
+++ b/openbsc/include/openbsc/gsm_04_08.h
@@ -24,6 +24,20 @@ static inline struct msgb *gsm48_msgb_alloc(void)
"GSM 04.08");
}
+static inline int get_radio_link_timeout(struct gsm48_cell_options *cell_options)
+{
+ return (cell_options->radio_link_timeout + 1) << 2;
+}
+
+static inline void set_radio_link_timeout(struct gsm48_cell_options *cell_options, int value)
+{
+ if (value < 4)
+ value = 4;
+ if (value > 64)
+ value = 64;
+ cell_options->radio_link_timeout = (value >> 2) - 1;
+}
+
/* config options controlling the behaviour of the lower leves */
void gsm0408_allow_everyone(int allow);
void gsm0408_clear_request(struct gsm_subscriber_connection *conn, uint32_t cause);
diff --git a/openbsc/src/libbsc/bsc_init.c b/openbsc/src/libbsc/bsc_init.c
index 8fd72cf46..55b577b54 100644
--- a/openbsc/src/libbsc/bsc_init.c
+++ b/openbsc/src/libbsc/bsc_init.c
@@ -434,9 +434,6 @@ static int bootstrap_bts(struct gsm_bts *bts)
return -EINVAL;
}
- /* some defaults for our system information */
- bts->si_common.cell_options.radio_link_timeout = 7; /* 12 */
-
/* allow/disallow DTXu */
if (bts->network->dtx_enabled)
bts->si_common.cell_options.dtx = 0;
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index 9129059e5..bccfe585e 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -543,6 +543,9 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
vty_out(vty, " periodic location update %u%s",
bts->si_common.chan_desc.t3212 * 6, VTY_NEWLINE);
+ vty_out(vty, " radio-link-timeout %d%s",
+ get_radio_link_timeout(&bts->si_common.cell_options),
+ VTY_NEWLINE);
vty_out(vty, " channel allocator %s%s",
bts->chan_alloc_reverse ? "descending" : "ascending",
VTY_NEWLINE);
@@ -2232,6 +2235,19 @@ DEFUN(cfg_bts_no_per_loc_upd, cfg_bts_no_per_loc_upd_cmd,
struct gsm_bts *bts = vty->index;
bts->si_common.chan_desc.t3212 = 0;
+
+ return CMD_SUCCESS;
+}
+
+DEFUN(cfg_bts_radio_link_timeout, cfg_bts_radio_link_timeout_cmd,
+ "radio-link-timeout <4-64>",
+ "Radio link timeout criterion (BTS side)\n"
+ "Radio link timeout value (lost SACCH block)\n")
+{
+ struct gsm_bts *bts = vty->index;
+
+ set_radio_link_timeout(&bts->si_common.cell_options, atoi(argv[0]));
+
return CMD_SUCCESS;
}
@@ -3357,6 +3373,7 @@ int bsc_vty_init(const struct log_info *cat)
install_element(BTS_NODE, &cfg_bts_temp_ofs_inf_cmd);
install_element(BTS_NODE, &cfg_bts_penalty_time_cmd);
install_element(BTS_NODE, &cfg_bts_penalty_time_rsvd_cmd);
+ install_element(BTS_NODE, &cfg_bts_radio_link_timeout_cmd);
install_element(BTS_NODE, &cfg_bts_gprs_mode_cmd);
install_element(BTS_NODE, &cfg_bts_gprs_ns_timer_cmd);
install_element(BTS_NODE, &cfg_bts_gprs_rac_cmd);
diff --git a/openbsc/src/libcommon/gsm_data.c b/openbsc/src/libcommon/gsm_data.c
index 5f7e32e73..9ad5f3b7b 100644
--- a/openbsc/src/libcommon/gsm_data.c
+++ b/openbsc/src/libcommon/gsm_data.c
@@ -407,6 +407,8 @@ struct gsm_bts *gsm_bts_alloc_register(struct gsm_network *net, enum gsm_bts_typ
bts->si_common.chan_desc.bs_pa_mfrms = RSL_BS_PA_MFRMS_5; /* paging frames */
bts->si_common.chan_desc.bs_ag_blks_res = 1; /* reserved AGCH blocks */
bts->si_common.chan_desc.t3212 = 5; /* Use 30 min periodic update interval as sane default */
+ set_radio_link_timeout(&bts->si_common.cell_options, 32);
+ /* Use RADIO LINK TIMEOUT of 32 seconds */
llist_add_tail(&bts->list, &net->bts_list);