Change in osmo-bts[master]: bts: Add VTY command to manually override Radio Link Timeout

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

laforge gerrit-no-reply at lists.osmocom.org
Mon Oct 5 18:42:30 UTC 2020


laforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-bts/+/20457 )

Change subject: bts: Add VTY command to manually override Radio Link Timeout
......................................................................

bts: Add VTY command to manually override Radio Link Timeout

There are some situations where it is useful to be able to change the
Radio Link Timeout at runtime, without restarting the BTS.

This adds a new (hidden) command for this:
	"bts <0-255> radio-link-timeout (oml|infinite|<4-64>)"

Change-Id: I64674a432cf7751b16d5d0b52f66766fa6e37028
---
M include/osmo-bts/bts.h
M src/common/bts.c
M src/common/l1sap.c
M src/common/oml.c
M src/common/vty.c
5 files changed, 65 insertions(+), 9 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/include/osmo-bts/bts.h b/include/osmo-bts/bts.h
index ffaeb57..ccbcf9a 100644
--- a/include/osmo-bts/bts.h
+++ b/include/osmo-bts/bts.h
@@ -283,7 +283,11 @@
 	} fn_stats;
 	/* Radio Link Timeout counter. -1 disables timeout for
 	 * lab/measurement purpose */
-	int radio_link_timeout;
+	struct {
+		int oml;		/* value communicated by BSC in OML */
+		int current;		/* actual currently applied value */
+		bool vty_override;	/* OML value overridden by VTY */
+	} radio_link_timeout;
 
 	int ul_power_target;		/* Uplink Rx power target */
 
diff --git a/src/common/bts.c b/src/common/bts.c
index c900428..c121609 100644
--- a/src/common/bts.c
+++ b/src/common/bts.c
@@ -324,7 +324,8 @@
 		bts->t200_ms[i] = oml_default_t200_ms[i];
 
 	/* default RADIO_LINK_TIMEOUT */
-	bts->radio_link_timeout = 32;
+	bts->radio_link_timeout.oml = 32;
+	bts->radio_link_timeout.current = bts->radio_link_timeout.oml;
 
 	/* Start with the site manager */
 	oml_mo_state_init(&bts->site_mgr.mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK);
diff --git a/src/common/l1sap.c b/src/common/l1sap.c
index ca1949a..c9ec9bf 100644
--- a/src/common/l1sap.c
+++ b/src/common/l1sap.c
@@ -1173,7 +1173,7 @@
 	struct gsm_bts *bts = lchan->ts->trx->bts;
 
 	/* Bypass radio link timeout if set to -1 */
-	if (bts->radio_link_timeout < 0)
+	if (bts->radio_link_timeout.current < 0)
 		return;
 
 	/* if link loss criterion already reached */
@@ -1197,11 +1197,11 @@
 		return;
 	}
 
-	if (lchan->s < bts->radio_link_timeout) {
+	if (lchan->s < bts->radio_link_timeout.current) {
 		/* count up radio link counter S */
 		int s = lchan->s + 2;
-		if (s > bts->radio_link_timeout)
-			s = bts->radio_link_timeout;
+		if (s > bts->radio_link_timeout.current)
+			s = bts->radio_link_timeout.current;
 		LOGPLCHAN(lchan, DMEAS, LOGL_DEBUG,
 			  "increasing radio link timeout counter S=%d -> %d\n",
 			  lchan->s, s);
@@ -1750,7 +1750,7 @@
 		}
 	}
 
-	lchan->s = lchan->ts->trx->bts->radio_link_timeout;
+	lchan->s = lchan->ts->trx->bts->radio_link_timeout.current;
 
 	rc = l1sap_chan_act_dact_modify(trx, chan_nr, PRIM_INFO_ACTIVATE, 0);
 	if (rc)
diff --git a/src/common/oml.c b/src/common/oml.c
index 14fc80f..9fca008 100644
--- a/src/common/oml.c
+++ b/src/common/oml.c
@@ -605,12 +605,16 @@
 		case 0xFF: /* Osmocom specific Extension of TS 12.21 */
 			LOGPFOH(DOML, LOGL_NOTICE, foh, "WARNING: Radio Link Timeout "
 				"explicitly disabled, only use this for lab testing!\n");
-			bts->radio_link_timeout = -1;
+			bts->radio_link_timeout.oml = -1;
+			if (!bts->radio_link_timeout.vty_override)
+				bts->radio_link_timeout.current = bts->radio_link_timeout.oml;
 			break;
 		case 0x01: /* Based on uplink SACCH (radio link timeout) */
 			if (TLVP_LEN(&tp, NM_ATT_CONN_FAIL_CRIT) >= 2 &&
 			    val[1] >= 4 && val[1] <= 64) {
-				bts->radio_link_timeout = val[1];
+				bts->radio_link_timeout.oml = val[1];
+				if (!bts->radio_link_timeout.vty_override)
+					bts->radio_link_timeout.current = bts->radio_link_timeout.oml;
 				break;
 			}
 			/* fall-through */
diff --git a/src/common/vty.c b/src/common/vty.c
index b662320..0d62a0e 100644
--- a/src/common/vty.c
+++ b/src/common/vty.c
@@ -855,6 +855,16 @@
 		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 @@
 		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 @@
 	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 @@
 	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);

-- 
To view, visit https://gerrit.osmocom.org/c/osmo-bts/+/20457
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Change-Id: I64674a432cf7751b16d5d0b52f66766fa6e37028
Gerrit-Change-Number: 20457
Gerrit-PatchSet: 2
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Vadim Yanitskiy <vyanitskiy at sysmocom.de>
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: pespin <pespin at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20201005/0435f4d2/attachment.htm>


More information about the gerrit-log mailing list