diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index 0788b234e..b10aa48b7 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -336,6 +336,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; @@ -347,7 +359,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/bsc_vty.c b/src/osmo-bsc/bsc_vty.c index c08ac5179..7fb65cca5 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -320,10 +320,9 @@ DEFUN(show_bts_fail_rep, show_bts_fail_rep_cmd, "show bts <0-255> fail-rep [rese return CMD_SUCCESS; } -/* TODO: Add other options for group argument bssgp '[(rlc|bssgp|ns)]' when adding additional timer groups. - * (Assume that with two args, the first is always the group. The second is always the timer) */ DEFUN(show_bts_rlc_timer, show_bts_rlc_timer_cmd, - "show bts <0-255> gprs timer [(" BTS_VTY_RLC_STR "|" BTS_VTY_NS_STR ")] " OSMO_TDEF_VTY_ARG_T_OPTIONAL, + "show bts <0-255> gprs timer " + "[(" BTS_VTY_RLC_STR "|" BTS_VTY_NS_STR "|" BTS_VTY_BSSGP_STR ")] " OSMO_TDEF_VTY_ARG_T_OPTIONAL, SHOW_STR BTS_STR BTS_NUM_STR @@ -331,6 +330,7 @@ DEFUN(show_bts_rlc_timer, show_bts_rlc_timer_cmd, BTS_SHOW_TIMER_STR BTS_VTY_RLC_DESC_STR "\n" BTS_VTY_NS_DESC_STR "\n" + BTS_VTY_BSSGP_DESC_STR "\n" OSMO_TDEF_VTY_DOC_T) { struct gsm_network *net = gsmnet_from_vty(vty); diff --git a/src/osmo-bsc/bts_init.c b/src/osmo-bsc/bts_init.c index 981351d9e..5e01c048a 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 }, {} }; @@ -114,6 +141,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 3d12bc25c..2c026fc2d 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 3354e2407..61b3f863a 100644 --- a/src/osmo-bsc/bts_vty.c +++ b/src/osmo-bsc/bts_vty.c @@ -1655,9 +1655,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 */ @@ -1700,6 +1702,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" \ @@ -1723,17 +1740,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; } @@ -1916,7 +1937,7 @@ DEFUN_USRATTR(cfg_bts_gprs_egprs_pkt_chan_req, /* Adapted from libosmocore.git:src/vty/tdef_vty.c. cmdstr/helpstr args set by bts_vty_tdef_cmds_init() * The group argument is optional here (if omitted, all timer groups will be searched) */ DEFUN(show_gprs_timer, show_gprs_timer_cmd, NULL, NULL) - /* show gprs timer [(rlc|ns)] [TNNNN] */ + /* show gprs timer [(rlc|ns|bssgp)] [TNNNN] */ { const char *group_arg = argc >= 1 ? argv[0] : NULL; const char *T_arg = argc >= 2 ? argv[1] : NULL; @@ -1935,7 +1956,7 @@ DEFUN(show_gprs_timer, show_gprs_timer_cmd, NULL, NULL) /* Adapted from libosmocore.git:src/vty/tdef_vty.c. cmdstr/helpstr args set by bts_vty_tdef_cmds_init(). * The group argument is optional here (if omitted, all timer groups will be searched) */ DEFUN(cfg_gprs_timer, cfg_gprs_timer_cmd, NULL, NULL) - /* gprs timer [(rlc|ns)] [TNNNN] [(<0-2147483647>|default)] */ + /* gprs timer [(rlc|ns|bssgp)] [TNNNN] [(<0-2147483647>|default)] */ { const char **timer_args; struct osmo_tdef_group *g = NULL; diff --git a/src/osmo-bsc/pcu_sock.c b/src/osmo-bsc/pcu_sock.c index f2890660e..0dc274b90 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 0acafa679..b5a5b644d 100644 --- a/tests/bts_features.vty +++ b/tests/bts_features.vty @@ -86,6 +86,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)# show gprs timer rlc T3101 rlc: T3101 = 10 N3101: Maximum USFs without response from the MS (default: 10, range: [9 .. 255]) @@ -111,6 +122,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)# #### Show/set timer for this BTS OsmoBSC(config-net-bts)# gprs timer rlc T3142 @@ -145,6 +167,10 @@ 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)# exit OsmoBSC(config-net)# exit OsmoBSC(config)# exit @@ -168,6 +194,17 @@ bts-0-ns: X24 = 3 Reset procedure retries (default: 3, range: [0 .. 255]) bts-0-ns: X25 = 30 s Tns-test: Periodicity of the NS-VC test procedure (default: 30 s, range: [0 .. 255]) bts-0-ns: X26 = 3 s Tns-alive: Guards the NS-VC test procedure (default: 3 s, range: [0 .. 255]) bts-0-ns: X27 = 10 NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure (default: 10, range: [0 .. 255]) +bts-0-bssgp: T1 = 3 s T1 (3GPP TS 48.018): Guards the (un)blocking procedures (default: 3 s, range: [0 .. 255]) +bts-0-bssgp: X41 = 3 Retries for blocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bts-0-bssgp: X42 = 3 Retries for unblocking procedures guarded by T1 (default: 3, range: [0 .. 255]) +bts-0-bssgp: T2 = 3 s T2 (3GPP TS 48.018): Guards the reset procedure (default: 3 s, range: [0 .. 255]) +bts-0-bssgp: X43 = 3 Retries for reset procedures guarded by T2 (default: 3, range: [0 .. 255]) +bts-0-bssgp: T3 = 1000 ms T3 (3GPP TS 48.018): Guards the suspend procedure (default: 1000 ms, range: [0 .. 25500]) +bts-0-bssgp: X44 = 3 Retries for suspend procedures guarded by T3 (default: 3, range: [0 .. 255]) +bts-0-bssgp: T4 = 1000 ms T4 (3GPP TS 48.018): Guards the resume procedure (default: 1000 ms, range: [0 .. 25500]) +bts-0-bssgp: X45 = 3 Retries for resume procedures guarded by T4 (default: 3, range: [0 .. 255]) +bts-0-bssgp: T5 = 10 T5 (3GPP TS 48.018): Guards the Radio Access Capability Update procedure (default: 10, range: [0 .. 255]) +bts-0-bssgp: X46 = 3 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) OsmoBSC# show bts 2 gprs timer rlc T3142 bts-2-rlc: T3142 = 5 s Used during packet access on CCCH/while in dedicated mode. Started after the receipt of IMMEDIATE ASSIGNMENT REJECT or DTM REJECT or EC IMMEDIATE ASSIGNMENT REJECT (default: 20 s, range: [0 .. 255]) @@ -175,6 +212,9 @@ bts-2-rlc: T3142 = 5 s Used during packet access on CCCH/while in dedicated mode OsmoBSC# show bts 2 gprs timer ns X21 bts-2-ns: X21 = 19 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +OsmoBSC# show bts 2 gprs timer bssgp X46 +bts-2-bssgp: X46 = 31 Retries for capability update procedures guarded by T5 (default: 3, range: [0 .. 255]) + OsmoBSC# ## Test gprs mode check OsmoBSC# configure terminal OsmoBSC(config)# network @@ -198,3 +238,18 @@ OsmoBSC(config)# exit OsmoBSC# disable OsmoBSC> show bts 2 gprs timer rlc T3142 bts-2-rlc: T3142 = 5 s Used during packet access on CCCH/while in dedicated mode. Started after the receipt of IMMEDIATE ASSIGNMENT REJECT or DTM REJECT or EC IMMEDIATE ASSIGNMENT REJECT (default: 20 s, range: [0 .. 255]) + +OsmoBSC> # Test legacy compatibility (unit conversion) +OsmoBSC> enable +OsmoBSC# configure terminal +OsmoBSC(config)# network +OsmoBSC(config-net)# bts 2 +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)# 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])