aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2020-09-16 00:56:19 +0200
committerNeels Hofmeyr <neels@hofmeyr.de>2020-09-17 16:58:58 +0200
commitaad766846cae50681dd6e52038992a7f48698c3c (patch)
tree7210ef43047d22cc1f08e3c9e7f1d144341e3690
parentc221b3b7b699905f7beeef6f804073d955f077e1 (diff)
clean up timer definitions: introduce groups, move some T to X
Backwards compatibly, introduce timer groups in OsmoBSC, and move some non-specified T timers to new X timers: T993111 -> X3111 T993210 -> X3210 T999 -> X4 Why X4? because there already is an X3 used elsewhere in Osmocom, and I find it less confusing if X-numbers don't repeat across programs. See https://osmocom.org/projects/cellular-infrastructure/wiki/List_of_Timer_numbers Drop unused timers from g_mgw_tdefs. Only X2427 has an actual effect. (libosmo-mgcp-client recently moved T2427001 to X2427.) Put libosmo-mgcp-client related timers to the 'mgw' group, like in osmo-msc. This makes the MGCP timeout configurable for the first time. Keep previous timer commands as DEFUN_HIDDEN, and also translate the moved T timers to X timers on-the-fly. All previous VTY commands still work, and new 'timer [(net|mgw)] ...' commands are added. timer.vty shows this. Remove the "_OPTIONAL" from the legacy "timer" and "show timer" commands, so that they don't ambiguously overload the new "timer [(net|mgw)] ..." commands. Related: OS#4539 Related: If097f52701fd81f29bcca1d252f4fb4fca8a04f7 (osmo-mgw) Change-Id: I4beec47502afa193dee343869c4be55dc6a4b536
-rw-r--r--doc/lchan.msc2
-rw-r--r--include/osmocom/bsc/gsm_data.h2
-rw-r--r--src/osmo-bsc/bsc_subscr_conn_fsm.c16
-rw-r--r--src/osmo-bsc/bsc_vty.c43
-rw-r--r--src/osmo-bsc/lchan_fsm.c2
-rw-r--r--src/osmo-bsc/net_init.c15
-rw-r--r--tests/timer.vty145
7 files changed, 150 insertions, 75 deletions
diff --git a/doc/lchan.msc b/doc/lchan.msc
index 9962c77a7..af9a59b52 100644
--- a/doc/lchan.msc
+++ b/doc/lchan.msc
@@ -189,7 +189,7 @@ msc {
ms => lchan [label="RSL RF Channel Release Ack"];
|||;
--- [label="IF release_in_error"];
- lchan abox lchan [label="LCHAN_ST_WAIT_\nAFTER_ERROR\n(timeout: T3111+2 s, T993111)"];
+ lchan abox lchan [label="LCHAN_ST_WAIT_\nAFTER_ERROR\n(timeout: T3111+2 s, X3111)"];
...;
lchan box lchan [label="timer expires"];
--- [label="END: release_in_error"];
diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h
index 5e2ceae69..90ab8eae7 100644
--- a/include/osmocom/bsc/gsm_data.h
+++ b/include/osmocom/bsc/gsm_data.h
@@ -894,6 +894,8 @@ struct gsm_bts_rejected {
time_t time;
};
+extern struct osmo_tdef_group bsc_tdef_group[];
+
struct gsm_network *gsm_network_init(void *ctx);
struct gsm_bts *gsm_bts_num(const struct gsm_network *net, int num);
diff --git a/src/osmo-bsc/bsc_subscr_conn_fsm.c b/src/osmo-bsc/bsc_subscr_conn_fsm.c
index b6ea59f48..63e54ba38 100644
--- a/src/osmo-bsc/bsc_subscr_conn_fsm.c
+++ b/src/osmo-bsc/bsc_subscr_conn_fsm.c
@@ -90,8 +90,8 @@ static const struct value_string gscon_fsm_event_names[] = {
};
struct osmo_tdef_state_timeout conn_fsm_timeouts[32] = {
- [ST_WAIT_CC] = { .T = 993210 },
- [ST_CLEARING] = { .T = 999 },
+ [ST_WAIT_CC] = { .T = -3210 },
+ [ST_CLEARING] = { .T = -4 },
};
/* Transition to a state, using the T timer defined in conn_fsm_timeouts.
@@ -330,7 +330,7 @@ static void gscon_fsm_init(struct osmo_fsm_inst *fi, uint32_t event, void *data)
}
gscon_bssmap_clear(conn, GSM0808_CAUSE_EQUIPMENT_FAILURE);
if (conn->fi->state != ST_CLEARING)
- osmo_fsm_inst_state_chg(fi, ST_CLEARING, 60, 999);
+ osmo_fsm_inst_state_chg(fi, ST_CLEARING, 60, -4);
return;
default:
OSMO_ASSERT(false);
@@ -350,7 +350,7 @@ static void gscon_fsm_wait_cc(struct osmo_fsm_inst *fi, uint32_t event, void *da
confirmed connection, then instead simply drop the connection */
LOGPFSML(fi, LOGL_INFO,
"Connection confirmed but lchan was dropped previously, clearing conn\n");
- osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, 999);
+ osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, -4);
gscon_bssmap_clear(conn, GSM0808_CAUSE_EQUIPMENT_FAILURE);
break;
}
@@ -692,7 +692,7 @@ void gscon_lchan_releasing(struct gsm_subscriber_connection *conn, struct gsm_lc
break;
default:
/* Ensure that the FSM is in ST_CLEARING. */
- osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, 999);
+ osmo_fsm_inst_state_chg(conn->fi, ST_CLEARING, 60, -4);
/* fall thru, omit an error log if already in ST_CLEARING */
case ST_CLEARING:
/* Request a Clear Command from the MSC. */
@@ -782,7 +782,7 @@ static void gscon_fsm_allstate(struct osmo_fsm_inst *fi, uint32_t event, void *d
conn->lchan->release.is_csfb = ccd->is_csfb;
/* MSC tells us to cleanly shut down */
if (conn->fi->state != ST_CLEARING)
- osmo_fsm_inst_state_chg(fi, ST_CLEARING, 60, 999);
+ osmo_fsm_inst_state_chg(fi, ST_CLEARING, 60, -4);
LOGPFSML(fi, LOGL_DEBUG, "Releasing all lchans (if any) after BSSMAP Clear Command\n");
gscon_release_lchans(conn, true, bsc_gsm48_rr_cause_from_gsm0808_cause(ccd->cause_0808));
/* FIXME: Release all terestrial resources in ST_CLEARING */
@@ -890,7 +890,7 @@ static int gscon_timer_cb(struct osmo_fsm_inst *fi)
struct gsm_subscriber_connection *conn = fi->priv;
switch (fi->T) {
- case 993210:
+ case -3210:
gscon_release_lchan(conn, conn->lchan, true, true, GSM48_RR_CAUSE_ABNORMAL_TIMER);
/* MSC has not responded/confirmed connection with CC, this
@@ -904,7 +904,7 @@ static int gscon_timer_cb(struct osmo_fsm_inst *fi)
* gscon_cleanup() above) */
osmo_fsm_inst_term(fi, OSMO_FSM_TERM_REGULAR, NULL);
break;
- case 999:
+ case -4:
/* The MSC has sent a BSSMAP Clear Command, we acknowledged that, but the conn was never
* disconnected. */
LOGPFSML(fi, LOGL_ERROR, "Long after a BSSMAP Clear Command, the conn is still not"
diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c
index ad07746b8..f58ce9c9c 100644
--- a/src/osmo-bsc/bsc_vty.c
+++ b/src/osmo-bsc/bsc_vty.c
@@ -1148,7 +1148,8 @@ static int config_write_net(struct vty *vty)
gsmnet->tz.hr, gsmnet->tz.mn, VTY_NEWLINE);
}
- osmo_tdef_vty_write(vty, gsmnet->T_defs, " timer ");
+ /* Timer introspection commands (generic osmo_tdef API) */
+ osmo_tdef_vty_groups_write(vty, " ");
{
uint16_t meas_port;
@@ -5595,26 +5596,49 @@ DEFUN(cfg_net_meas_feed_scenario, cfg_net_meas_feed_scenario_cmd,
return CMD_SUCCESS;
}
-DEFUN(show_timer, show_timer_cmd,
- "show timer " OSMO_TDEF_VTY_ARG_T_OPTIONAL,
+static void legacy_timers(struct vty *vty, const char **T_arg)
+{
+ if (!strcmp((*T_arg), "T993111") || !strcmp((*T_arg), "t993111")) {
+ vty_out(vty, "%% Legacy: timer T993111 is now X3111%s", VTY_NEWLINE);
+ (*T_arg) = "X3111";
+ } else if (!strcmp((*T_arg), "T993210") || !strcmp((*T_arg), "t993210")) {
+ vty_out(vty, "%% Legacy: timer T993210 is now X3210%s", VTY_NEWLINE);
+ (*T_arg) = "X3210";
+ } else if (!strcmp((*T_arg), "T999") || !strcmp((*T_arg), "t999")) {
+ vty_out(vty, "%% Legacy: timer T999 is now X4%s", VTY_NEWLINE);
+ (*T_arg) = "X4";
+ }
+}
+
+/* LEGACY TIMER COMMAND. The proper commands are added by osmo_tdef_vty_groups_init(), using explicit timer group
+ * naming. The old groupless timer command accesses the 'net' group only, but is still available. */
+DEFUN_HIDDEN(show_timer, show_timer_cmd,
+ "show timer " OSMO_TDEF_VTY_ARG_T,
SHOW_STR "Show timers\n"
OSMO_TDEF_VTY_DOC_T)
{
struct gsm_network *net = gsmnet_from_vty(vty);
- const char *T_arg = argc > 0 ? argv[0] : NULL;
+ const char *T_arg = argv[0];
+ if (T_arg)
+ legacy_timers(vty, &T_arg);
return osmo_tdef_vty_show_cmd(vty, net->T_defs, T_arg, NULL);
}
-DEFUN(cfg_net_timer, cfg_net_timer_cmd,
- "timer " OSMO_TDEF_VTY_ARG_SET_OPTIONAL,
+/* LEGACY TIMER COMMAND. The proper commands are added by osmo_tdef_vty_groups_init(), using explicit timer group
+ * naming. The old groupless timer command accesses the 'net' group only, but is still available. */
+DEFUN_HIDDEN(cfg_net_timer, cfg_net_timer_cmd,
+ "timer " OSMO_TDEF_VTY_ARG_T " " OSMO_TDEF_VTY_ARG_VAL_OPTIONAL,
"Configure or show timers\n"
OSMO_TDEF_VTY_DOC_SET)
{
struct gsm_network *net = gsmnet_from_vty(vty);
+ const char *mod_argv[argc];
+ memcpy(mod_argv, argv, sizeof(mod_argv));
+ legacy_timers(vty, &mod_argv[0]);
/* If any arguments are missing, redirect to 'show' */
if (argc < 2)
- return show_timer(self, vty, argc, argv);
- return osmo_tdef_vty_set_cmd(vty, net->T_defs, argv);
+ return show_timer(self, vty, argc, mod_argv);
+ return osmo_tdef_vty_set_cmd(vty, net->T_defs, mod_argv);
}
DEFUN(cfg_net_allow_unusable_timeslots, cfg_net_allow_unusable_timeslots_cmd,
@@ -6575,6 +6599,9 @@ int bsc_vty_init(struct gsm_network *network)
install_element(GSMNET_NODE, &cfg_net_timer_cmd);
install_element(GSMNET_NODE, &cfg_net_allow_unusable_timeslots_cmd);
+ /* Timer configuration commands (generic osmo_tdef API) */
+ osmo_tdef_vty_groups_init(GSMNET_NODE, bsc_tdef_group);
+
install_element_ve(&bsc_show_net_cmd);
install_element_ve(&show_bts_cmd);
install_element_ve(&show_bts_fail_rep_cmd);
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index 65d77c4ac..0470120dc 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -216,7 +216,7 @@ struct osmo_tdef_state_timeout lchan_fsm_timeouts[32] = {
[LCHAN_ST_WAIT_RLL_RTP_RELEASED] = { .T=3109 },
[LCHAN_ST_WAIT_BEFORE_RF_RELEASE] = { .T=3111 },
[LCHAN_ST_WAIT_RF_RELEASE_ACK] = { .T=3111 },
- [LCHAN_ST_WAIT_AFTER_ERROR] = { .T=993111 },
+ [LCHAN_ST_WAIT_AFTER_ERROR] = { .T=-3111 },
};
/* Transition to a state, using the T timer defined in lchan_fsm_timeouts.
diff --git a/src/osmo-bsc/net_init.c b/src/osmo-bsc/net_init.c
index 87b4d0b73..4b79712ce 100644
--- a/src/osmo-bsc/net_init.c
+++ b/src/osmo-bsc/net_init.c
@@ -37,7 +37,6 @@ static struct osmo_tdef gsm_network_T_defs[] = {
{ .T=3107, .default_val=5, .desc="(unused)" },
{ .T=3109, .default_val=5, .desc="RSL SACCH deactivation" },
{ .T=3111, .default_val=2, .desc="Wait time before RSL RF Channel Release" },
- { .T=993111, .default_val=4, .desc="Wait time after lchan was released in error (should be T3111 + 2s)" },
{ .T=3113, .default_val=7, .desc="Paging"},
{ .T=3115, .default_val=10, .desc="(unused)" },
{ .T=3117, .default_val=10, .desc="(unused)" },
@@ -46,14 +45,20 @@ static struct osmo_tdef gsm_network_T_defs[] = {
{ .T=3141, .default_val=10, .desc="(unused)" },
{ .T=3212, .default_val=5, .unit=OSMO_TDEF_CUSTOM,
.desc="Periodic Location Update timer, sent to MS (1 = 6 minutes)" },
- { .T=993210, .default_val=20, .desc="After L3 Complete, wait for MSC to confirm" },
- { .T=999, .default_val=60, .desc="After Clear Request, wait for MSC to Clear Command (sanity)" },
+ { .T=-4, .default_val=60, .desc="After Clear Request, wait for MSC to Clear Command (sanity)" },
+ { .T=-3111, .default_val=4, .desc="Wait time after lchan was released in error (should be T3111 + 2s)" },
+ { .T=-3210, .default_val=20, .desc="After L3 Complete, wait for MSC to confirm" },
{}
};
struct osmo_tdef g_mgw_tdefs[] = {
- { .T=-1, .default_val=4, .desc="MGCP response timeout" },
- { .T=-2, .default_val=30, .desc="RTP stream establishing timeout" },
+ { .T=-2427, .default_val=5, .desc="timeout for MGCP response from MGW" },
+ {}
+};
+
+struct osmo_tdef_group bsc_tdef_group[] = {
+ { .name = "net", .tdefs = gsm_network_T_defs, .desc = "GSM network" },
+ { .name = "mgw", .tdefs = g_mgw_tdefs, .desc = "MGW (Media Gateway) interface" },
{}
};
diff --git a/tests/timer.vty b/tests/timer.vty
index 05fccf1df..fe2d2d8fc 100644
--- a/tests/timer.vty
+++ b/tests/timer.vty
@@ -1,62 +1,68 @@
OsmoBSC> enable
OsmoBSC# show timer
-T7 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout (default: 10 s)
-T8 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout (default: 10 s)
-T10 = 6 s RR Assignment (default: 6 s)
-T101 = 10 s inter-BSC/MSC Handover incoming, BSSMAP HO Request to HO Accept (default: 10 s)
-T3101 = 3 s RR Immediate Assignment (default: 3 s)
-T3103 = 5 s Handover (default: 5 s)
-T3105 = 100 ms Physical Information (default: 100 ms)
-T3107 = 5 s (unused) (default: 5 s)
-T3109 = 5 s RSL SACCH deactivation (default: 5 s)
-T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
-T993111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
-T3113 = 7 s Paging (default: 7 s)
-T3115 = 10 s (unused) (default: 10 s)
-T3117 = 10 s (unused) (default: 10 s)
-T3119 = 10 s (unused) (default: 10 s)
-T3122 = 10 s Wait time after RR Immediate Assignment Reject (default: 10 s)
-T3141 = 10 s (unused) (default: 10 s)
-T3212 = 5 Periodic Location Update timer, sent to MS (1 = 6 minutes) (default: 5)
-T993210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
-T999 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+net: T7 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout (default: 10 s)
+net: T8 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout (default: 10 s)
+net: T10 = 6 s RR Assignment (default: 6 s)
+net: T101 = 10 s inter-BSC/MSC Handover incoming, BSSMAP HO Request to HO Accept (default: 10 s)
+net: T3101 = 3 s RR Immediate Assignment (default: 3 s)
+net: T3103 = 5 s Handover (default: 5 s)
+net: T3105 = 100 ms Physical Information (default: 100 ms)
+net: T3107 = 5 s (unused) (default: 5 s)
+net: T3109 = 5 s RSL SACCH deactivation (default: 5 s)
+net: T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
+net: T3113 = 7 s Paging (default: 7 s)
+net: T3115 = 10 s (unused) (default: 10 s)
+net: T3117 = 10 s (unused) (default: 10 s)
+net: T3119 = 10 s (unused) (default: 10 s)
+net: T3122 = 10 s Wait time after RR Immediate Assignment Reject (default: 10 s)
+net: T3141 = 10 s (unused) (default: 10 s)
+net: T3212 = 5 Periodic Location Update timer, sent to MS (1 = 6 minutes) (default: 5)
+net: X4 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+net: X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s)
OsmoBSC# show timer T3111
T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
OsmoBSC# # specifically test legacy timers that are moved to X timers
OsmoBSC# show timer T993111
-T993111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+% Legacy: timer T993111 is now X3111
+X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
OsmoBSC# show timer T993210
-T993210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+% Legacy: timer T993210 is now X3210
+X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
OsmoBSC# show timer T999
-T999 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+% Legacy: timer T999 is now X4
+X4 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
OsmoBSC# configure terminal
OsmoBSC(config)# network
OsmoBSC(config-net)# timer
-T7 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout (default: 10 s)
-T8 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout (default: 10 s)
-T10 = 6 s RR Assignment (default: 6 s)
-T101 = 10 s inter-BSC/MSC Handover incoming, BSSMAP HO Request to HO Accept (default: 10 s)
-T3101 = 3 s RR Immediate Assignment (default: 3 s)
-T3103 = 5 s Handover (default: 5 s)
-T3105 = 100 ms Physical Information (default: 100 ms)
-T3107 = 5 s (unused) (default: 5 s)
-T3109 = 5 s RSL SACCH deactivation (default: 5 s)
-T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
-T993111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
-T3113 = 7 s Paging (default: 7 s)
-T3115 = 10 s (unused) (default: 10 s)
-T3117 = 10 s (unused) (default: 10 s)
-T3119 = 10 s (unused) (default: 10 s)
-T3122 = 10 s Wait time after RR Immediate Assignment Reject (default: 10 s)
-T3141 = 10 s (unused) (default: 10 s)
-T3212 = 5 Periodic Location Update timer, sent to MS (1 = 6 minutes) (default: 5)
-T993210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
-T999 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+net: T7 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout (default: 10 s)
+net: T8 = 10 s inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout (default: 10 s)
+net: T10 = 6 s RR Assignment (default: 6 s)
+net: T101 = 10 s inter-BSC/MSC Handover incoming, BSSMAP HO Request to HO Accept (default: 10 s)
+net: T3101 = 3 s RR Immediate Assignment (default: 3 s)
+net: T3103 = 5 s Handover (default: 5 s)
+net: T3105 = 100 ms Physical Information (default: 100 ms)
+net: T3107 = 5 s (unused) (default: 5 s)
+net: T3109 = 5 s RSL SACCH deactivation (default: 5 s)
+net: T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
+net: T3113 = 7 s Paging (default: 7 s)
+net: T3115 = 10 s (unused) (default: 10 s)
+net: T3117 = 10 s (unused) (default: 10 s)
+net: T3119 = 10 s (unused) (default: 10 s)
+net: T3122 = 10 s Wait time after RR Immediate Assignment Reject (default: 10 s)
+net: T3141 = 10 s (unused) (default: 10 s)
+net: T3212 = 5 Periodic Location Update timer, sent to MS (1 = 6 minutes) (default: 5)
+net: X4 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+net: X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s)
+OsmoBSC(config-net)# # Using the legacy 'timer Txxx' still works:
OsmoBSC(config-net)# timer T3111
T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
OsmoBSC(config-net)# timer T3111 23
@@ -66,30 +72,65 @@ OsmoBSC(config-net)# timer T3111 default
OsmoBSC(config-net)# timer T3111
T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
+OsmoBSC(config-net)# # Using the new timer group commands also works:
+OsmoBSC(config-net)# timer net T3111
+net: T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
+OsmoBSC(config-net)# timer net T3111 42
+OsmoBSC(config-net)# timer net T3111
+net: T3111 = 42 s Wait time before RSL RF Channel Release (default: 2 s)
+OsmoBSC(config-net)# timer net T3111 default
+OsmoBSC(config-net)# timer net T3111
+net: T3111 = 2 s Wait time before RSL RF Channel Release (default: 2 s)
+OsmoBSC(config-net)# timer mgw
+mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s)
+OsmoBSC(config-net)# timer mgw X2427
+mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s)
+OsmoBSC(config-net)# timer mgw X2427 42
+OsmoBSC(config-net)# timer mgw X2427
+mgw: X2427 = 42 s timeout for MGCP response from MGW (default: 5 s)
+OsmoBSC(config-net)# timer mgw X2427 default
+OsmoBSC(config-net)# timer mgw X2427
+mgw: X2427 = 5 s timeout for MGCP response from MGW (default: 5 s)
+
OsmoBSC(config-net)# # specifically test legacy timers that are moved to X timers
OsmoBSC(config-net)# timer T993111
-T993111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+% Legacy: timer T993111 is now X3111
+X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
OsmoBSC(config-net)# timer T993111 1
+% Legacy: timer T993111 is now X3111
OsmoBSC(config-net)# timer T993111
-T993111 = 1 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+% Legacy: timer T993111 is now X3111
+X3111 = 1 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
OsmoBSC(config-net)# timer T993111 default
+% Legacy: timer T993111 is now X3111
OsmoBSC(config-net)# timer T993111
-T993111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
+% Legacy: timer T993111 is now X3111
+X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s)
OsmoBSC(config-net)# timer T993210
-T993210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+% Legacy: timer T993210 is now X3210
+X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
OsmoBSC(config-net)# timer T993210 2
+% Legacy: timer T993210 is now X3210
OsmoBSC(config-net)# timer T993210
-T993210 = 2 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+% Legacy: timer T993210 is now X3210
+X3210 = 2 s After L3 Complete, wait for MSC to confirm (default: 20 s)
OsmoBSC(config-net)# timer T993210 default
+% Legacy: timer T993210 is now X3210
OsmoBSC(config-net)# timer T993210
-T993210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
+% Legacy: timer T993210 is now X3210
+X3210 = 20 s After L3 Complete, wait for MSC to confirm (default: 20 s)
OsmoBSC(config-net)# timer T999
-T999 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+% Legacy: timer T999 is now X4
+X4 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
OsmoBSC(config-net)# timer T999 3
+% Legacy: timer T999 is now X4
OsmoBSC(config-net)# timer T999
-T999 = 3 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+% Legacy: timer T999 is now X4
+X4 = 3 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
OsmoBSC(config-net)# timer T999 default
+% Legacy: timer T999 is now X4
OsmoBSC(config-net)# timer T999
-T999 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)
+% Legacy: timer T999 is now X4
+X4 = 60 s After Clear Request, wait for MSC to Clear Command (sanity) (default: 60 s)