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
This commit is contained in:
Neels Hofmeyr 2020-09-16 00:56:19 +02:00 committed by laforge
parent 9d71f9619a
commit 638eb99286
7 changed files with 150 additions and 75 deletions

View File

@ -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"];

View File

@ -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);

View File

@ -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"

View File

@ -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;
@ -5583,26 +5584,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,
@ -6563,6 +6587,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);

View File

@ -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.

View File

@ -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" },
{}
};

View File

@ -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)