From 6c2ff6ad47906c3b6c04df7524cf811350a55dd4 Mon Sep 17 00:00:00 2001 From: arehbein Date: Tue, 28 Nov 2023 00:55:03 +0100 Subject: [PATCH] Make BSSGP timing data configurable Also: Deprecate/hide old respective VTY command, while preserving backwards compatibility for BSSGP timing data configuration. Requires: libosmocore.git Ib3b22640a11eae152d66d62c0f47b953d80de945 Related: OS#5335 Change-Id: Id4779f033b5eb1742462d4efc28a0398645acfe6 --- include/osmocom/bsc/bts.h | 14 ++++- include/osmocom/bsc/vty.h | 3 +- src/osmo-bsc/bts_init.c | 33 ++++++++++- src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c | 23 ++++---- src/osmo-bsc/bts_vty.c | 31 ++++++++-- src/osmo-bsc/pcu_sock.c | 15 ++++- tests/bts_features.vty | 64 ++++++++++++++++++++- 7 files changed, 161 insertions(+), 22 deletions(-) diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index bbb3deed7..e23d421f7 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -340,6 +340,18 @@ struct gsm_bts_model { /* 3GPP TS 04.60 V8.27.0 (2005-09) */ #define GSM_RLCMACN3101_STRICT_LOWER_BOUND 8UL +#define GSM_BTS_TDEF_ID_BSSGP_T1 1 +#define GSM_BTS_TDEF_ID_BSSGP_T2 2 +#define GSM_BTS_TDEF_ID_BSSGP_T3 3 +#define GSM_BTS_TDEF_ID_BSSGP_T4 4 +#define GSM_BTS_TDEF_ID_BSSGP_T5 5 +#define GSM_BTS_TDEF_ID_BSSGP_T1_BLOCK_RETRIES (-41) +#define GSM_BTS_TDEF_ID_BSSGP_T1_UNBLOCK_RETRIES (-42) +#define GSM_BTS_TDEF_ID_BSSGP_T2_RESET_RETRIES (-43) +#define GSM_BTS_TDEF_ID_BSSGP_T3_SUSPEND_RETRIES (-44) +#define GSM_BTS_TDEF_ID_BSSGP_T4_RESUME_RETRIES (-45) +#define GSM_BTS_TDEF_ID_BSSGP_T5_CAP_UPDATE_RETRIES (-46) + struct gsm_gprs_cell { struct gsm_abis_mo mo; uint16_t bvci; @@ -351,7 +363,7 @@ struct gsm_gprs_cell { enum gsm_gprs_bts_tdef_groups { OSMO_BSC_BTS_TDEF_GROUPS_RLC = 0, OSMO_BSC_BTS_TDEF_GROUPS_NS, - /* TODO: Add additional groups here (BSSGP) */ + OSMO_BSC_BTS_TDEF_GROUPS_BSSGP, _NUM_OSMO_BSC_BTS_TDEF_GROUPS }; extern struct osmo_tdef_group bts_gprs_timer_template_groups[_NUM_OSMO_BSC_BTS_TDEF_GROUPS + 1]; diff --git a/include/osmocom/bsc/vty.h b/include/osmocom/bsc/vty.h index c3ea776b6..d7e140d48 100644 --- a/include/osmocom/bsc/vty.h +++ b/include/osmocom/bsc/vty.h @@ -103,7 +103,8 @@ enum bsc_vty_cmd_attr { #define BTS_VTY_RLC_DESC_STR "RLC (Radio Link Control)" #define BTS_VTY_NS_STR "ns" #define BTS_VTY_NS_DESC_STR "NS (Network Service)" -/* Add additional group strings for vty command generation here */ +#define BTS_VTY_BSSGP_STR "bssgp" +#define BTS_VTY_BSSGP_DESC_STR "BSSGP (Base Station System GPRS Protocol)" #define BTS_VTY_SHOW_TIMER_STR BTS_SHOW_TIMER_STR_NONEWLINE " & for this BTS\n" /*! Defines for per-BTS string commands */ diff --git a/src/osmo-bsc/bts_init.c b/src/osmo-bsc/bts_init.c index ed29c6a87..adc5916b5 100644 --- a/src/osmo-bsc/bts_init.c +++ b/src/osmo-bsc/bts_init.c @@ -91,13 +91,40 @@ static struct osmo_tdef bts_gprs_ns_timer_templates[] = { {} }; +static struct osmo_tdef bts_gprs_bssgp_timer_templates[] = { + { .T = 1, .default_val = 3, + .max_val = UINT8_MAX, .desc = "T1 (3GPP TS 48.018): Guards the (un)blocking procedures" }, + { .T = GSM_BTS_TDEF_ID_BSSGP_T1_BLOCK_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for blocking procedures guarded by T1", .unit = OSMO_TDEF_CUSTOM }, + { .T = GSM_BTS_TDEF_ID_BSSGP_T1_UNBLOCK_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for unblocking procedures guarded by T1", .unit = OSMO_TDEF_CUSTOM }, + { .T = 2, .default_val = 3, + .max_val = UINT8_MAX, .desc = "T2 (3GPP TS 48.018): Guards the reset procedure"}, + { .T = GSM_BTS_TDEF_ID_BSSGP_T2_RESET_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for reset procedures guarded by T2", .unit = OSMO_TDEF_CUSTOM }, + { .T = 3, .default_val = 1000, + .max_val = UINT8_MAX * 100, .desc = "T3 (3GPP TS 48.018): Guards the suspend procedure", .unit = OSMO_TDEF_MS }, + { .T = GSM_BTS_TDEF_ID_BSSGP_T3_SUSPEND_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for suspend procedures guarded by T3", .unit = OSMO_TDEF_CUSTOM }, + { .T = 4, .default_val = 1000, + .max_val = UINT8_MAX * 100, .desc = "T4 (3GPP TS 48.018): Guards the resume procedure", .unit = OSMO_TDEF_MS }, + { .T = GSM_BTS_TDEF_ID_BSSGP_T4_RESUME_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for resume procedures guarded by T4", .unit = OSMO_TDEF_CUSTOM }, + { .T = 5, .default_val = 10, .max_val = UINT8_MAX, + .desc = "T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure", .unit = OSMO_TDEF_CUSTOM }, + { .T = GSM_BTS_TDEF_ID_BSSGP_T5_CAP_UPDATE_RETRIES, .default_val = 3, + .max_val = UINT8_MAX, .desc = "Retries for capability update procedures guarded by T5", .unit = OSMO_TDEF_CUSTOM }, + {} +}; + /* This is only used by bts_vty.c to init the default values for the templates */ struct osmo_tdef_group bts_gprs_timer_template_groups[_NUM_OSMO_BSC_BTS_TDEF_GROUPS + 1] = { [OSMO_BSC_BTS_TDEF_GROUPS_RLC] = { .name = BTS_VTY_RLC_STR, .tdefs = bts_gprs_rlc_timer_templates, .desc = BTS_VTY_RLC_DESC_STR }, [OSMO_BSC_BTS_TDEF_GROUPS_NS] = { .name = BTS_VTY_NS_STR, .tdefs = bts_gprs_ns_timer_templates, .desc = BTS_VTY_NS_DESC_STR }, - /* Additional per-BTS timer groups here, set as above using 'enum gprs_bts_tdef_groups' */ + [OSMO_BSC_BTS_TDEF_GROUPS_BSSGP] = { + .name = BTS_VTY_BSSGP_STR, .tdefs = bts_gprs_bssgp_timer_templates, .desc = BTS_VTY_BSSGP_DESC_STR }, {} }; @@ -111,6 +138,10 @@ void bts_gprs_timer_groups_init(struct gsm_bts *bts) /* Init per-BTS NS timers */ bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_NS].tdefs = talloc_memdup(bts, bts_gprs_ns_timer_templates, sizeof(bts_gprs_ns_timer_templates)); OSMO_ASSERT(bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_NS].tdefs); + /* Init per-BTS BSSGP timers */ + bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_BSSGP].tdefs = + talloc_memdup(bts, bts_gprs_bssgp_timer_templates, sizeof(bts_gprs_bssgp_timer_templates)); + OSMO_ASSERT(bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_BSSGP].tdefs); } /* Init default values for all per-BTS timer templates */ diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c index 3b1145104..3d58393e8 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c @@ -206,19 +206,20 @@ struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm) }; msgb_tl16v_put(msgb, NM_ATT_IPACC_NS_CFG, sizeof(ns_cfg), (const uint8_t *)&ns_cfg); + g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_BSSGP]; osmo_static_assert(ARRAY_SIZE(bts->gprs.cell.timer) == 11, cell_timer_array_wrong_size); bssgp_cfg = (struct abis_nm_ipacc_att_bssgp_cfg){ - .t1_s = bts->gprs.cell.timer[0], - .t1_blocking_retries = bts->gprs.cell.timer[1], - .t1_unblocking_retries = bts->gprs.cell.timer[2], - .t2_s = bts->gprs.cell.timer[3], - .t2_retries = bts->gprs.cell.timer[4], - .t3_100ms = bts->gprs.cell.timer[5], - .t3_retries = bts->gprs.cell.timer[6], - .t4_100ms = bts->gprs.cell.timer[7], - .t4_retries = bts->gprs.cell.timer[8], - .t5_s = bts->gprs.cell.timer[9], - .t5_retries = bts->gprs.cell.timer[10], + .t1_s = osmo_tdef_get(g->tdefs, 1, OSMO_TDEF_S, -1), + .t1_blocking_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T1_BLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1), + .t1_unblocking_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T1_UNBLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1), + .t2_s = osmo_tdef_get(g->tdefs, 2, OSMO_TDEF_S, -1), + .t2_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T2_RESET_RETRIES, OSMO_TDEF_CUSTOM, -1), + .t3_100ms = osmo_tdef_get(g->tdefs, 3, OSMO_TDEF_MS, -1)/100, + .t3_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T3_SUSPEND_RETRIES, OSMO_TDEF_CUSTOM, -1), + .t4_100ms = osmo_tdef_get(g->tdefs, 4, OSMO_TDEF_MS, -1)/100, + .t4_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T4_RESUME_RETRIES, OSMO_TDEF_CUSTOM, -1), + .t5_s = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T5, OSMO_TDEF_S, -1), + .t5_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T5_CAP_UPDATE_RETRIES, OSMO_TDEF_CUSTOM, -1), }; msgb_tl16v_put(msgb, NM_ATT_IPACC_BSSGP_CFG, sizeof(bssgp_cfg), (const uint8_t *)&bssgp_cfg); diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c index 5c56e6297..ba38c0ed5 100644 --- a/src/osmo-bsc/bts_vty.c +++ b/src/osmo-bsc/bts_vty.c @@ -1653,9 +1653,11 @@ DEFUN_ATTR(cfg_bts_pag_free, cfg_bts_pag_free_cmd, return CMD_SUCCESS; } +/* If not zero, the tdef will store 'val * factor', where 'val' is the value read from vty (needed for backwards compat. with deprecated commands) */ struct tdef_data { int tdef_id; enum osmo_tdef_unit unit; + unsigned int factor; }; /* Indices here correspond to those in gprs_ns_timer_str. Each row contains information for setting the respective tdef */ @@ -1698,6 +1700,21 @@ DEFUN_ATTR_USRATTR(cfg_bts_gprs_ns_timer, return CMD_SUCCESS; } +/* Indices here correspond to those in gprs_bssgp_cfg_strs. Each row contains information for setting the respective tdef */ +struct tdef_data gprs_bssgp_timer_tdef_data[11] = { + [0] = { .tdef_id = 1, .unit = OSMO_TDEF_S}, + [1] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T1_BLOCK_RETRIES, .unit = OSMO_TDEF_CUSTOM }, + [2] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T1_UNBLOCK_RETRIES, .unit = OSMO_TDEF_CUSTOM}, + [3] = { .tdef_id = 2, .unit = OSMO_TDEF_S}, + [4] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T2_RESET_RETRIES, .unit = OSMO_TDEF_CUSTOM}, + [5] = { .tdef_id = 3, .unit = OSMO_TDEF_MS, .factor = 100 }, + [6] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T3_SUSPEND_RETRIES, .unit = OSMO_TDEF_CUSTOM }, + [7] = { .tdef_id = 4, .unit = OSMO_TDEF_MS, .factor = 100 }, + [8] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T4_RESUME_RETRIES, .unit = OSMO_TDEF_CUSTOM }, + [9] = { .tdef_id = 5, .unit = OSMO_TDEF_S }, + [10] = { .tdef_id = GSM_BTS_TDEF_ID_BSSGP_T5_CAP_UPDATE_RETRIES, .unit = OSMO_TDEF_CUSTOM } +}; + #define BSSGP_TIMERS "(blocking-timer|blocking-retries|unblocking-retries|reset-timer|reset-retries|suspend-timer|suspend-retries|resume-timer|resume-retries|capability-update-timer|capability-update-retries)" #define BSSGP_TIMERS_HELP \ "Tbvc-block timeout\n" \ @@ -1721,17 +1738,21 @@ DEFUN_USRATTR(cfg_bts_gprs_cell_timer, BSSGP_TIMERS_HELP "Timer Value\n") { struct gsm_bts *bts = vty->index; - int idx = get_string_value(gprs_bssgp_cfg_strs, argv[0]); - /* TODO (BSSGP timer patch): If argument is one of BSSGP Timers strings, then translate to - * tdef index. Otherwise get tdef entry */ - int val = atoi(argv[1]); + int idx = get_string_value(gprs_bssgp_cfg_strs, argv[0]), val = atoi(argv[1]); + const struct tdef_data *tdef_params; + const struct osmo_tdef_group *bts_bssgp = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_BSSGP]; + + vty_out(vty, "This command is deprecated; use '%s' instead%s", cfg_gprs_timer_cmd.string, VTY_NEWLINE); GPRS_CHECK_ENABLED(bts); - if (idx < 0 || idx >= ARRAY_SIZE(bts->gprs.cell.timer)) + if (idx < 0 || idx >= ARRAY_SIZE(gprs_bssgp_timer_tdef_data)) return CMD_WARNING; + tdef_params = &gprs_bssgp_timer_tdef_data[idx]; bts->gprs.cell.timer[idx] = val; + if (osmo_tdef_set(bts_bssgp->tdefs, tdef_params->tdef_id, val * tdef_params->factor ? : 1, tdef_params->unit) < 0) + return CMD_WARNING; return CMD_SUCCESS; } diff --git a/src/osmo-bsc/pcu_sock.c b/src/osmo-bsc/pcu_sock.c index d735b53cb..1675281ef 100644 --- a/src/osmo-bsc/pcu_sock.c +++ b/src/osmo-bsc/pcu_sock.c @@ -219,7 +219,20 @@ static int pcu_tx_info_ind(struct gsm_bts *bts) /* Communicating TNS Alive/having it con->tdefs,igurable for backwards compatibility */ info_ind->nse_timer[5] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE, OSMO_TDEF_S, -1); info_ind->nse_timer[6] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES, OSMO_TDEF_CUSTOM, -1); - memcpy(info_ind->cell_timer, bts->gprs.cell.timer, 11); + + /* BSSGP */ + g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_BSSGP]; + info_ind->cell_timer[0] = osmo_tdef_get(g->tdefs, 1, OSMO_TDEF_S, -1); + info_ind->cell_timer[1] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T1_BLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->cell_timer[2] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T1_UNBLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->cell_timer[3] = osmo_tdef_get(g->tdefs, 2, OSMO_TDEF_S, -1); + info_ind->cell_timer[4] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T2_RESET_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->cell_timer[5] = osmo_tdef_get(g->tdefs, 3, OSMO_TDEF_MS, -1); + info_ind->cell_timer[6] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T3_SUSPEND_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->cell_timer[7] = osmo_tdef_get(g->tdefs, 4, OSMO_TDEF_MS, -1); + info_ind->cell_timer[8] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T4_RESUME_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->cell_timer[9] = osmo_tdef_get(g->tdefs, 5, OSMO_TDEF_S, -1); + info_ind->cell_timer[10] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_BSSGP_T5_CAP_UPDATE_RETRIES, OSMO_TDEF_CUSTOM, -1); /* cell attributes */ g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_RLC]; diff --git a/tests/bts_features.vty b/tests/bts_features.vty index 68d0ad236..d2b49e7e5 100644 --- a/tests/bts_features.vty +++ b/tests/bts_features.vty @@ -82,6 +82,30 @@ ns: X24 = 3 Reset procedure retries (default: 3, range: [0 .. 255]) ns: X25 = 30 s Tns-test: Periodicity of the NS-VC test procedure (default: 30 s, range: [0 .. 255]) ns: X26 = 3 s Tns-alive: Guards the NS-VC test procedure (default: 3 s, range: [0 .. 255]) ns: X27 = 10 NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure (default: 10, range: [0 .. 255]) +bssgp: T1 = 3 s T1 (3GPP TS 48.018): Guards the (un)blocking procedures (default: 3 s, range: [0 .. 255]) +bssgp: X41 = 3 Retries for blocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: X42 = 3 Retries for unblocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: T2 = 3 s T2 (3GPP TS 48.018): Guards the reset procedure (default: 3 s, range: [0 .. 255]) +bssgp: X43 = 3 Retries for reset procedures guarded by T2 (default: 3, range: [0 .. 255]) +bssgp: T3 = 1000 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X44 = 3 Retries for suspend procedures guarded by T3 (default: 3, range: [0 .. 255]) +bssgp: T4 = 1000 ms T4 (3GPP TS 48.018): Guards the resume procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X45 = 3 Retries for resume procedures guarded by T4 (default: 3, range: [0 .. 255]) +bssgp: T5 = 10 T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure (default: 10, range: [0 .. 255]) +bssgp: X46 = 3 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) + +OsmoBSC(config-net-bts)# gprs show timer bssgp +bssgp: T1 = 3 s T1 (3GPP TS 48.018): Guards the (un)blocking procedures (default: 3 s, range: [0 .. 255]) +bssgp: X41 = 3 Retries for blocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: X42 = 3 Retries for unblocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: T2 = 3 s T2 (3GPP TS 48.018): Guards the reset procedure (default: 3 s, range: [0 .. 255]) +bssgp: X43 = 3 Retries for reset procedures guarded by T2 (default: 3, range: [0 .. 255]) +bssgp: T3 = 1000 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X44 = 3 Retries for suspend procedures guarded by T3 (default: 3, range: [0 .. 255]) +bssgp: T4 = 1000 ms T4 (3GPP TS 48.018): Guards the resume procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X45 = 3 Retries for resume procedures guarded by T4 (default: 3, range: [0 .. 255]) +bssgp: T5 = 10 T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure (default: 10, range: [0 .. 255]) +bssgp: X46 = 3 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) OsmoBSC(config-net-bts)# gprs show timer rlc X3101 rlc: X3101 = 10 N3101: Maximum USFs without response from the MS (default: 10, range: [9 .. 255]) @@ -107,6 +131,17 @@ ns: X24 = 3 Reset procedure retries (default: 3, range: [0 .. 255]) ns: X25 = 30 s Tns-test: Periodicity of the NS-VC test procedure (default: 30 s, range: [0 .. 255]) ns: X26 = 3 s Tns-alive: Guards the NS-VC test procedure (default: 3 s, range: [0 .. 255]) ns: X27 = 10 NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure (default: 10, range: [0 .. 255]) +bssgp: T1 = 3 s T1 (3GPP TS 48.018): Guards the (un)blocking procedures (default: 3 s, range: [0 .. 255]) +bssgp: X41 = 3 Retries for blocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: X42 = 3 Retries for unblocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: T2 = 3 s T2 (3GPP TS 48.018): Guards the reset procedure (default: 3 s, range: [0 .. 255]) +bssgp: X43 = 3 Retries for reset procedures guarded by T2 (default: 3, range: [0 .. 255]) +bssgp: T3 = 1000 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X44 = 3 Retries for suspend procedures guarded by T3 (default: 3, range: [0 .. 255]) +bssgp: T4 = 1000 ms T4 (3GPP TS 48.018): Guards the resume procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X45 = 3 Retries for resume procedures guarded by T4 (default: 3, range: [0 .. 255]) +bssgp: T5 = 10 T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure (default: 10, range: [0 .. 255]) +bssgp: X46 = 3 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) OsmoBSC(config-net-bts)# gprs timer ns ns: X21 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) @@ -156,6 +191,31 @@ OsmoBSC(config-net-bts)# gprs timer ns X21 19 OsmoBSC(config-net-bts)# gprs timer ns X21 ns: X21 = 19 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +OsmoBSC(config-net-bts)# gprs timer bssgp X46 31 +OsmoBSC(config-net-bts)# gprs timer bssgp X46 +bssgp: X46 = 31 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) + +OsmoBSC(config-net-bts)# gprs timer bssgp +bssgp: T1 = 3 s T1 (3GPP TS 48.018): Guards the (un)blocking procedures (default: 3 s, range: [0 .. 255]) +bssgp: X41 = 3 Retries for blocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: X42 = 3 Retries for unblocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bssgp: T2 = 3 s T2 (3GPP TS 48.018): Guards the reset procedure (default: 3 s, range: [0 .. 255]) +bssgp: X43 = 3 Retries for reset procedures guarded by T2 (default: 3, range: [0 .. 255]) +bssgp: T3 = 1000 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X44 = 3 Retries for suspend procedures guarded by T3 (default: 3, range: [0 .. 255]) +bssgp: T4 = 1000 ms T4 (3GPP TS 48.018): Guards the resume procedure (default: 1000 ms, range: [0 .. 25500]) +bssgp: X45 = 3 Retries for resume procedures guarded by T4 (default: 3, range: [0 .. 255]) +bssgp: T5 = 10 T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure (default: 10, range: [0 .. 255]) +bssgp: X46 = 31 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) + +OsmoBSC(config-net-bts)# ### Test legacy compatibility (unit conversion) +OsmoBSC(config-net-bts)# gprs mode gprs +OsmoBSC(config-net-bts)# gprs cell timer suspend-timer 255 +This command is deprecated; use 'gprs timer [(rlc|ns|bssgp)] [TNNNN] [(<0-2147483647>|default)]' instead +OsmoBSC(config-net-bts)# gprs timer bssgp T3 +bssgp: T3 = 25500 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) OsmoBSC(config-net-bts)# exit -OsmoBSC(config-net)# exit -OsmoBSC(config)# exit +OsmoBSC(config-net)# bts 0 +OsmoBSC(config-net-bts)# gprs timer bssgp T3 25500 +OsmoBSC(config-net-bts)# gprs timer bssgp T3 +bssgp: T3 = 25500 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500])