aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/vty.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/vty.c')
-rw-r--r--src/common/vty.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/common/vty.c b/src/common/vty.c
index b662320c..0d62a0e7 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -855,6 +855,16 @@ static void bts_dump_vty_features(struct vty *vty, const struct gsm_bts *bts)
vty_out(vty, " (not available)%s", VTY_NEWLINE);
}
+static const char *stringify_radio_link_timeout(int val)
+{
+ static char buf[32];
+ if (val == -1)
+ snprintf(buf, sizeof(buf), "%s", "infinite");
+ else
+ snprintf(buf, sizeof(buf), "%d SACCH blocks", val);
+ return buf;
+}
+
static void bts_dump_vty(struct vty *vty, const struct gsm_bts *bts)
{
const struct gsm_bts_trx *trx;
@@ -902,6 +912,12 @@ static void bts_dump_vty(struct vty *vty, const struct gsm_bts *bts)
bts->oml_link ? "connected" : "disconnected", VTY_NEWLINE);
vty_out(vty, " PH-RTS.ind FN advance average: %d, min: %d, max: %d%s",
bts_get_avg_fn_advance(bts), bts->fn_stats.min, bts->fn_stats.max, VTY_NEWLINE);
+ vty_out(vty, " Radio Link Timeout (OML): %s%s",
+ stringify_radio_link_timeout(bts->radio_link_timeout.oml), VTY_NEWLINE);
+ if (bts->radio_link_timeout.vty_override) {
+ vty_out(vty, " Radio Link Timeout (OVERRIDE): %s%s",
+ stringify_radio_link_timeout(bts->radio_link_timeout.current), VTY_NEWLINE);
+ }
llist_for_each_entry(trx, &bts->trx_list, list) {
const struct phy_instance *pinst = trx_phy_instance(trx);
@@ -963,6 +979,36 @@ DEFUN(test_send_failure_event_report, test_send_failure_event_report_cmd, "test
return CMD_SUCCESS;
}
+DEFUN_HIDDEN(radio_link_timeout, radio_link_timeout_cmd, "bts <0-0> radio-link-timeout (oml|infinite|<4-64>)",
+ "BTS Specific Commands\n" BTS_NR_STR "Manually override Radio Link Timeout\n"
+ "Use value provided by BSC via A-bis OML (Connection Failure Criterion)\n"
+ "Use infinite timeout (DANGEROUS: only use during testing!)\n"
+ "Number of lost SACCH blocks\n")
+{
+ const struct gsm_network *net = gsmnet_from_vty(vty);
+ int bts_nr = atoi(argv[0]);
+ struct gsm_bts *bts = gsm_bts_num(net, bts_nr);
+
+ if (!bts) {
+ vty_out(vty, "%% can't find BTS '%s'%s", argv[0], VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (!strcmp(argv[1], "oml")) {
+ bts->radio_link_timeout.current = bts->radio_link_timeout.oml;
+ bts->radio_link_timeout.vty_override = false;
+ } else if (!strcmp(argv[1], "infinite")) {
+ bts->radio_link_timeout.current = -1;
+ bts->radio_link_timeout.vty_override = true;
+ vty_out(vty, "%% INFINITE RADIO LINK TIMEOUT, USE ONLY FOR BTS RF TESTING%s", VTY_NEWLINE);
+ } else {
+ bts->radio_link_timeout.current = atoi(argv[1]);
+ bts->radio_link_timeout.vty_override = true;
+ }
+
+ return CMD_SUCCESS;
+}
+
static void trx_dump_vty(struct vty *vty, const struct gsm_bts_trx *trx)
{
vty_out(vty, "TRX %u of BTS %u is on ARFCN %u%s",
@@ -1756,6 +1802,7 @@ int bts_vty_init(struct gsm_bts *bts)
install_element(ENABLE_NODE, &bts_t_t_l_loopback_cmd);
install_element(ENABLE_NODE, &no_bts_t_t_l_loopback_cmd);
install_element(ENABLE_NODE, &test_send_failure_event_report_cmd);
+ install_element(ENABLE_NODE, &radio_link_timeout_cmd);
install_element(CONFIG_NODE, &cfg_phy_cmd);
install_node(&phy_node, config_write_phy);