From 42b2002a10fb742d95ba94cb1e1030691ef7b456 Mon Sep 17 00:00:00 2001 From: arehbein Date: Tue, 28 Nov 2023 00:45:15 +0100 Subject: [PATCH] Make NSE timing data configurable Also: Deprecate/hide old respective VTY command, while preserving backwards compatibility for NSE timing data configuration. Related: OS#5335 Change-Id: Ie46ec5cb7095bc1dfe3effd0e76d6ccfd6bd2f3f --- include/osmocom/bsc/bts.h | 12 +++++- include/osmocom/bsc/bts_sm.h | 1 - include/osmocom/bsc/vty.h | 2 + src/osmo-bsc/bsc_vty.c | 5 ++- src/osmo-bsc/bts_init.c | 23 +++++++++++ src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c | 16 ++++---- src/osmo-bsc/bts_sm.c | 7 +--- src/osmo-bsc/bts_vty.c | 43 ++++++++++++++------ src/osmo-bsc/pcu_sock.c | 40 ++++++++++-------- tests/bts_features.vty | 37 +++++++++++++++++ tests/gprs_params.vty | 7 ---- tests/nanobts_omlattr/nanobts_omlattr_test.c | 17 +++++--- 12 files changed, 150 insertions(+), 60 deletions(-) diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index 539ed36ad..0788b234e 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -324,6 +324,14 @@ struct gsm_bts_model { #define GSM_BTS_TDEF_ID_COUNTDOWN_VALUE (-1) #define GSM_BTS_TDEF_ID_UL_TBF_EXT (-2) #define GSM_BTS_TDEF_ID_DL_TBF_DELAYED (-3) +/* NS */ +#define GSM_BTS_TDEF_ID_TNS_BLOCK (-21) +#define GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES (-22) +#define GSM_BTS_TDEF_ID_TNS_RESET (-23) +#define GSM_BTS_TDEF_ID_TNS_RESET_RETRIES (-24) +#define GSM_BTS_TDEF_ID_TNS_TEST (-25) +#define GSM_BTS_TDEF_ID_TNS_ALIVE (-26) +#define GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES (-27) /* 3GPP TS 04.60 V8.27.0 (2005-09) */ #define GSM_RLCMACN3101_STRICT_LOWER_BOUND 8UL @@ -338,10 +346,10 @@ struct gsm_gprs_cell { /* Used for indexing tdef group arrays */ enum gsm_gprs_bts_tdef_groups { OSMO_BSC_BTS_TDEF_GROUPS_RLC = 0, - /* TODO: Add additional groups here (BSSGP, NS) */ + OSMO_BSC_BTS_TDEF_GROUPS_NS, + /* TODO: Add additional groups here (BSSGP) */ _NUM_OSMO_BSC_BTS_TDEF_GROUPS }; -extern const size_t bts_gprs_rlc_timer_templates_bytes; extern struct osmo_tdef_group bts_gprs_timer_template_groups[_NUM_OSMO_BSC_BTS_TDEF_GROUPS + 1]; /* One BTS */ diff --git a/include/osmocom/bsc/bts_sm.h b/include/osmocom/bsc/bts_sm.h index e25b8dac0..a38ba4687 100644 --- a/include/osmocom/bsc/bts_sm.h +++ b/include/osmocom/bsc/bts_sm.h @@ -32,7 +32,6 @@ struct gsm_bts; struct gsm_gprs_nse { struct gsm_abis_mo mo; uint16_t nsei; - uint8_t timer[7]; }; struct gsm_gprs_nsvc { diff --git a/include/osmocom/bsc/vty.h b/include/osmocom/bsc/vty.h index bda270034..c3ea776b6 100644 --- a/include/osmocom/bsc/vty.h +++ b/include/osmocom/bsc/vty.h @@ -101,6 +101,8 @@ enum bsc_vty_cmd_attr { /* Defines for per-BTS string commands */ #define BTS_VTY_RLC_STR "rlc" #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_SHOW_TIMER_STR BTS_SHOW_TIMER_STR_NONEWLINE " & for this BTS\n" diff --git a/src/osmo-bsc/bsc_vty.c b/src/osmo-bsc/bsc_vty.c index 39a35d967..c08ac5179 100644 --- a/src/osmo-bsc/bsc_vty.c +++ b/src/osmo-bsc/bsc_vty.c @@ -320,16 +320,17 @@ 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, ns '[(rlc|bssgp|ns)]' when adding additional timer groups. +/* 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 "] " OSMO_TDEF_VTY_ARG_T_OPTIONAL, + "show bts <0-255> gprs timer [(" BTS_VTY_RLC_STR "|" BTS_VTY_NS_STR ")] " OSMO_TDEF_VTY_ARG_T_OPTIONAL, SHOW_STR BTS_STR BTS_NUM_STR "GPRS Packet Network\n" BTS_SHOW_TIMER_STR BTS_VTY_RLC_DESC_STR "\n" + BTS_VTY_NS_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 97cdb79a4..981351d9e 100644 --- a/src/osmo-bsc/bts_init.c +++ b/src/osmo-bsc/bts_init.c @@ -73,10 +73,30 @@ static struct osmo_tdef bts_gprs_rlc_timer_templates[] = { {} }; +static struct osmo_tdef bts_gprs_ns_timer_templates[] = { + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK, .default_val = 3, .min_val = 0, .max_val = UINT8_MAX, + .desc = "Tns-block: Guards the blocking and unblocking procedures" }, + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES, .default_val = 3, .min_val = 0, .max_val = UINT8_MAX, + .desc = "NS-BLOCK-RETRIES: Blocking procedure retries", .unit = OSMO_TDEF_CUSTOM }, + { .T = GSM_BTS_TDEF_ID_TNS_RESET, .default_val = 3, .min_val = 0, .max_val = UINT8_MAX, + .desc = "Tns-reset: Guards the reset procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_RESET_RETRIES, .default_val = 3, .min_val = 0, .max_val = UINT8_MAX, + .desc = "Reset procedure retries", .unit = OSMO_TDEF_CUSTOM }, + { .T = GSM_BTS_TDEF_ID_TNS_TEST, .default_val = 30, .min_val = 0, .max_val = UINT8_MAX, + .desc = "Tns-test: Periodicity of the NS-VC test procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_ALIVE, .default_val = 3, .min_val = 0, .max_val = UINT8_MAX, + .desc = "Tns-alive: Guards the NS-VC test procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES, .default_val = 10, .min_val = 0, .max_val = UINT8_MAX, + .desc = "NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure", .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' */ {} }; @@ -91,6 +111,9 @@ void bts_gprs_timer_groups_init(struct gsm_bts *bts) bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_RLC].tdefs = talloc_memdup(bts, bts_gprs_rlc_timer_templates, sizeof(bts_gprs_rlc_timer_templates)); OSMO_ASSERT(bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_RLC].tdefs); + /* 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 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 6fdcfa774..3d12bc25c 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c @@ -184,6 +184,7 @@ struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm) struct abis_nm_ipacc_att_ns_cfg ns_cfg; struct abis_nm_ipacc_att_bssgp_cfg bssgp_cfg; struct gsm_bts *bts = gsm_bts_sm_get_bts(bts_sm); + const struct osmo_tdef_group *g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_NS]; msgb = msgb_alloc(1024, __func__); if (!msgb) @@ -194,15 +195,14 @@ struct msgb *nanobts_gen_set_nse_attr(struct gsm_bts_sm *bts_sm) buf[1] = bts_sm->gprs.nse.nsei & 0xff; msgb_tl16v_put(msgb, NM_ATT_IPACC_NSEI, 2, buf); - osmo_static_assert(ARRAY_SIZE(bts_sm->gprs.nse.timer) == 7, nse_timer_array_wrong_size); ns_cfg = (struct abis_nm_ipacc_att_ns_cfg){ - .un_blocking_timer = bts_sm->gprs.nse.timer[0], - .un_blocking_retries = bts_sm->gprs.nse.timer[1], - .reset_timer = bts_sm->gprs.nse.timer[2], - .reset_retries = bts_sm->gprs.nse.timer[3], - .test_timer = bts_sm->gprs.nse.timer[4], - .alive_timer = bts_sm->gprs.nse.timer[5], - .alive_retries = bts_sm->gprs.nse.timer[6], + .un_blocking_timer = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK, OSMO_TDEF_S, -1), + .un_blocking_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1), + .reset_timer = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_RESET, OSMO_TDEF_S, -1), + .reset_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_RESET_RETRIES, OSMO_TDEF_CUSTOM, -1), + .test_timer = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_TEST, OSMO_TDEF_S, -1), + .alive_timer = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE, OSMO_TDEF_S, -1), + .alive_retries = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES, OSMO_TDEF_CUSTOM, -1), }; msgb_tl16v_put(msgb, NM_ATT_IPACC_NS_CFG, sizeof(ns_cfg), (const uint8_t *)&ns_cfg); diff --git a/src/osmo-bsc/bts_sm.c b/src/osmo-bsc/bts_sm.c index ca572f146..8a9634ba3 100644 --- a/src/osmo-bsc/bts_sm.c +++ b/src/osmo-bsc/bts_sm.c @@ -26,8 +26,6 @@ #include #include -static const uint8_t bts_nse_timer_default[] = { 3, 3, 3, 3, 30, 3, 10 }; - static int gsm_bts_sm_talloc_destructor(struct gsm_bts_sm *bts_sm) { int i; @@ -76,8 +74,6 @@ struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, uint8_t bts_num) LOGL_INFO, NULL); osmo_fsm_inst_update_id_f(bts_sm->gprs.nse.mo.fi, "nse%d", bts_num); gsm_mo_init(&bts_sm->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff); - memcpy(&bts_sm->gprs.nse.timer, bts_nse_timer_default, - sizeof(bts_sm->gprs.nse.timer)); for (i = 0; i < ARRAY_SIZE(bts_sm->gprs.nsvc); i++) { bts_sm->gprs.nsvc[i].bts = bts; @@ -91,8 +87,7 @@ struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, uint8_t bts_num) gsm_mo_init(&bts_sm->gprs.nsvc[i].mo, bts, NM_OC_GPRS_NSVC, bts->nr, i, 0xff); } - memcpy(&bts_sm->gprs.nse.timer, bts_nse_timer_default, - sizeof(bts_sm->gprs.nse.timer)); + gsm_mo_init(&bts_sm->gprs.nse.mo, bts, NM_OC_GPRS_NSE, bts->nr, 0xff, 0xff); diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c index d10bae779..3354e2407 100644 --- a/src/osmo-bsc/bts_vty.c +++ b/src/osmo-bsc/bts_vty.c @@ -1655,8 +1655,27 @@ DEFUN_ATTR(cfg_bts_pag_free, cfg_bts_pag_free_cmd, return CMD_SUCCESS; } -DEFUN_USRATTR(cfg_bts_gprs_ns_timer, +struct tdef_data { + int tdef_id; + enum osmo_tdef_unit unit; +}; + +/* Indices here correspond to those in gprs_ns_timer_str. Each row contains information for setting the respective tdef */ +static const struct tdef_data gprs_ns_timer_tdef_data[7] = { + [0] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_BLOCK, .unit = OSMO_TDEF_S }, + [1] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES, .unit = OSMO_TDEF_CUSTOM }, + [2] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_RESET, .unit = OSMO_TDEF_S }, + [3] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_RESET_RETRIES, .unit = OSMO_TDEF_CUSTOM }, + [4] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_TEST, .unit = OSMO_TDEF_S}, + [5] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_ALIVE, .unit = OSMO_TDEF_S}, + [6] = { .tdef_id = GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES, .unit = OSMO_TDEF_CUSTOM }, +}; + +static struct cmd_element cfg_gprs_timer_cmd; + +DEFUN_ATTR_USRATTR(cfg_bts_gprs_ns_timer, cfg_bts_gprs_ns_timer_cmd, + CMD_ATTR_DEPRECATED, X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK), "gprs ns timer " NS_TIMERS " <0-255>", GPRS_TEXT "Network Service\n" @@ -1664,16 +1683,20 @@ DEFUN_USRATTR(cfg_bts_gprs_ns_timer, NS_TIMERS_HELP "Timer Value\n") { struct gsm_bts *bts = vty->index; - int idx = get_string_value(gprs_ns_timer_strs, argv[0]); - int val = atoi(argv[1]); + int idx = get_string_value(gprs_ns_timer_strs, argv[0]), val = atoi(argv[1]); + struct tdef_data tdef_params; + const struct osmo_tdef_group *bts_ns = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_NS]; + + 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->site_mgr->gprs.nse.timer)) + if (idx < 0 || idx >= ARRAY_SIZE(gprs_ns_timer_tdef_data)) return CMD_WARNING; - bts->site_mgr->gprs.nse.timer[idx] = val; - + tdef_params = gprs_ns_timer_tdef_data[idx]; + if (osmo_tdef_set(bts_ns->tdefs, tdef_params.tdef_id, val, tdef_params.unit) < 0) + return CMD_WARNING; return CMD_SUCCESS; } @@ -1893,7 +1916,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)] [TNNNN] */ + /* show gprs timer [(rlc|ns)] [TNNNN] */ { const char *group_arg = argc >= 1 ? argv[0] : NULL; const char *T_arg = argc >= 2 ? argv[1] : NULL; @@ -1912,7 +1935,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] [TNNNN] [(<0-2147483647>|default)] */ + /* gprs timer [(rlc|ns)] [TNNNN] [(<0-2147483647>|default)] */ { const char **timer_args; struct osmo_tdef_group *g = NULL; @@ -4342,10 +4365,6 @@ static void config_write_bts_gprs(struct vty *vty, struct gsm_bts *bts) bts->gprs.cell.timer[i], VTY_NEWLINE); vty_out(vty, " gprs nsei %u%s", bts_sm->gprs.nse.nsei, VTY_NEWLINE); - for (i = 0; i < ARRAY_SIZE(bts_sm->gprs.nse.timer); i++) - vty_out(vty, " gprs ns timer %s %u%s", - get_value_string(gprs_ns_timer_strs, i), - bts_sm->gprs.nse.timer[i], VTY_NEWLINE); for (i = 0; i < ARRAY_SIZE(bts_sm->gprs.nsvc); i++) { const struct gsm_gprs_nsvc *nsvc = &bts_sm->gprs.nsvc[i]; struct osmo_sockaddr_str remote; diff --git a/src/osmo-bsc/pcu_sock.c b/src/osmo-bsc/pcu_sock.c index 099641936..f2890660e 100644 --- a/src/osmo-bsc/pcu_sock.c +++ b/src/osmo-bsc/pcu_sock.c @@ -179,7 +179,7 @@ static int pcu_tx_info_ind(struct gsm_bts *bts) struct gsm_pcu_if *pcu_prim; struct gsm_pcu_if_info_ind *info_ind; struct gprs_rlc_cfg *rlcc; - const struct osmo_tdef_group *rlctg = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_RLC]; + const struct osmo_tdef_group *g; struct gsm_bts_sm *bts_sm; struct gsm_gprs_nsvc *nsvc; struct gsm_bts_trx *trx; @@ -209,29 +209,35 @@ static int pcu_tx_info_ind(struct gsm_bts *bts) info_ind->rac = bts->gprs.rac; /* NSE */ + g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_NS]; info_ind->nsei = bts_sm->gprs.nse.nsei; - memcpy(info_ind->nse_timer, bts_sm->gprs.nse.timer, 7); + info_ind->nse_timer[0] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK, OSMO_TDEF_S, -1); + info_ind->nse_timer[1] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->nse_timer[2] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_RESET, OSMO_TDEF_S, -1); + info_ind->nse_timer[3] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_RESET_RETRIES, OSMO_TDEF_CUSTOM, -1); + info_ind->nse_timer[4] = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_TNS_TEST, OSMO_TDEF_S, -1); + /* 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); /* cell attributes */ + g = &bts->timer_groups[OSMO_BSC_BTS_TDEF_GROUPS_RLC]; info_ind->bsic = bts->bsic; info_ind->cell_id = bts->cell_identity; info_ind->repeat_time = rlcc->paging.repeat_time; info_ind->repeat_count = rlcc->paging.repeat_count; info_ind->bvci = bts->gprs.cell.bvci; - info_ind->t3142 = osmo_tdef_get(rlctg->tdefs, 3142, OSMO_TDEF_S, -1); - info_ind->t3169 = osmo_tdef_get(rlctg->tdefs, 3169, OSMO_TDEF_S, -1); - info_ind->t3191 = osmo_tdef_get(rlctg->tdefs, 3191, OSMO_TDEF_S, -1); - info_ind->t3193_10ms = osmo_tdef_get(rlctg->tdefs, 3193, OSMO_TDEF_MS, -1)/10; - info_ind->t3195 = osmo_tdef_get(rlctg->tdefs, 3195, OSMO_TDEF_S, -1); - info_ind->n3101 = - osmo_tdef_get(rlctg->tdefs, 3101, OSMO_TDEF_CUSTOM, -1); - info_ind->n3103 = - osmo_tdef_get(rlctg->tdefs, 3103, OSMO_TDEF_CUSTOM, -1); - info_ind->n3105 = - osmo_tdef_get(rlctg->tdefs, 3105, OSMO_TDEF_CUSTOM, -1); - info_ind->cv_countdown = - osmo_tdef_get(rlctg->tdefs, GSM_BTS_TDEF_ID_COUNTDOWN_VALUE, OSMO_TDEF_CUSTOM, -1); + info_ind->t3142 = osmo_tdef_get(g->tdefs, 3142, OSMO_TDEF_S, -1); + info_ind->t3169 = osmo_tdef_get(g->tdefs, 3169, OSMO_TDEF_S, -1); + info_ind->t3191 = osmo_tdef_get(g->tdefs, 3191, OSMO_TDEF_S, -1); + info_ind->t3193_10ms = osmo_tdef_get(g->tdefs, 3193, OSMO_TDEF_MS, -1)/10; + info_ind->t3195 = osmo_tdef_get(g->tdefs, 3195, OSMO_TDEF_S, -1); + info_ind->n3101 = osmo_tdef_get(g->tdefs, 3101, OSMO_TDEF_CUSTOM, -1); + info_ind->n3103 = osmo_tdef_get(g->tdefs, 3103, OSMO_TDEF_CUSTOM, -1); + info_ind->n3105 = osmo_tdef_get(g->tdefs, 3105, OSMO_TDEF_CUSTOM, -1); + info_ind->cv_countdown = osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_COUNTDOWN_VALUE, + OSMO_TDEF_CUSTOM, -1); if (rlcc->cs_mask & (1 << GPRS_CS1)) info_ind->flags |= PCU_IF_FLAG_CS1; if (rlcc->cs_mask & (1 << GPRS_CS2)) @@ -262,10 +268,10 @@ static int pcu_tx_info_ind(struct gsm_bts *bts) } /* TODO: isn't dl_tbf_ext wrong?: * 10 and no ntohs */ info_ind->dl_tbf_ext = - osmo_tdef_get(rlctg->tdefs, GSM_BTS_TDEF_ID_DL_TBF_DELAYED, OSMO_TDEF_MS, -1); + osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_DL_TBF_DELAYED, OSMO_TDEF_MS, -1); /* TODO: isn't ul_tbf_ext wrong?: * 10 and no ntohs */ info_ind->ul_tbf_ext = - osmo_tdef_get(rlctg->tdefs, GSM_BTS_TDEF_ID_UL_TBF_EXT, OSMO_TDEF_MS, -1); + osmo_tdef_get(g->tdefs, GSM_BTS_TDEF_ID_UL_TBF_EXT, OSMO_TDEF_MS, -1); info_ind->initial_cs = rlcc->initial_cs; info_ind->initial_mcs = rlcc->initial_mcs; diff --git a/tests/bts_features.vty b/tests/bts_features.vty index 5f650b98b..0acafa679 100644 --- a/tests/bts_features.vty +++ b/tests/bts_features.vty @@ -79,6 +79,13 @@ rlc: X3 = 2500 ms A delayed release of the downlink TBF is when the release of t rlc: T3101 = 10 N3101: Maximum USFs without response from the MS (default: 10, range: [9 .. 255]) rlc: T3103 = 4 N3103: Maximum PACKET UPLINK ACK/NACK messages within a TBF unacknowledged by MS (default: 4, range: [0 .. 255]) rlc: T3105 = 8 N3105: Maximum allocated data blocks without RLC/MAC control reply from MS (default: 8, range: [0 .. 255]) +ns: X21 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +ns: X22 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +ns: X23 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [0 .. 255]) +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]) 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]) @@ -97,6 +104,13 @@ rlc: X3 = 2500 ms A delayed release of the downlink TBF is when the release of t rlc: T3101 = 10 N3101: Maximum USFs without response from the MS (default: 10, range: [9 .. 255]) rlc: T3103 = 4 N3103: Maximum PACKET UPLINK ACK/NACK messages within a TBF unacknowledged by MS (default: 4, range: [0 .. 255]) rlc: T3105 = 8 N3105: Maximum allocated data blocks without RLC/MAC control reply from MS (default: 8, range: [0 .. 255]) +ns: X21 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +ns: X22 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +ns: X23 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [0 .. 255]) +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]) OsmoBSC(config-net-bts)# #### Show/set timer for this BTS OsmoBSC(config-net-bts)# gprs timer rlc T3142 @@ -118,6 +132,19 @@ OsmoBSC(config-net-bts)# gprs timer rlc T3142 5 OsmoBSC(config-net-bts)# gprs timer rlc T3142 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(config-net-bts)# show gprs timer ns +ns: X21 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +ns: X22 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +ns: X23 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [0 .. 255]) +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]) + +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)# exit OsmoBSC(config-net)# exit OsmoBSC(config)# exit @@ -134,10 +161,20 @@ bts-0-rlc: X3 = 2500 ms A delayed release of the downlink TBF is when the releas bts-0-rlc: T3101 = 10 N3101: Maximum USFs without response from the MS (default: 10, range: [9 .. 255]) bts-0-rlc: T3103 = 4 N3103: Maximum PACKET UPLINK ACK/NACK messages within a TBF unacknowledged by MS (default: 4, range: [0 .. 255]) bts-0-rlc: T3105 = 8 N3105: Maximum allocated data blocks without RLC/MAC control reply from MS (default: 8, range: [0 .. 255]) +bts-0-ns: X21 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [0 .. 255]) +bts-0-ns: X22 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +bts-0-ns: X23 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [0 .. 255]) +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]) 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# 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# ## Test gprs mode check OsmoBSC# configure terminal OsmoBSC(config)# network diff --git a/tests/gprs_params.vty b/tests/gprs_params.vty index e0c8b39e0..88fe15008 100644 --- a/tests/gprs_params.vty +++ b/tests/gprs_params.vty @@ -34,13 +34,6 @@ OsmoBSC(config-net-bts)# show running-config gprs cell timer capability-update-timer 10 gprs cell timer capability-update-retries 3 gprs nsei 0 - gprs ns timer tns-block 3 - gprs ns timer tns-block-retries 3 - gprs ns timer tns-reset 3 - gprs ns timer tns-reset-retries 3 - gprs ns timer tns-test 30 - gprs ns timer tns-alive 3 - gprs ns timer tns-alive-retries 10 gprs nsvc 0 nsvci 0 gprs nsvc 0 local udp port 0 gprs nsvc 1 nsvci 0 diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.c b/tests/nanobts_omlattr/nanobts_omlattr_test.c index 907225cef..5ddcd7306 100644 --- a/tests/nanobts_omlattr/nanobts_omlattr_test.c +++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c @@ -201,11 +201,18 @@ int main(int argc, char **argv) /* Parameters needed to test nanobts_gen_set_nse_attr() */ bts->site_mgr->gprs.nse.nsei = 101; - uint8_t attr_nse_expected[] = - { 0x9d, 0x00, 0x02, 0x00, 0x65, 0xa0, 0x00, 0x07, 0x03, 0x03, 0x03, - 0x03, 0x1e, 0x03, 0x0a, 0xa1, 0x00, 0x0b, 0x03, 0x03, 0x03, - 0x03, 0x03, 0x0a, 0x03, - 0x0a, 0x03, 0x0a, 0x03 + uint8_t attr_nse_expected[] = { + /* NM_ATT_IPACC_NS_CFG */ + 0x9d, 0x00, 0x02, 0x00, 0x65, 0xa0, + /* LEN1, LEN2 */ + 0x00, 0x07, + /* TNS BLK, TNS BLK RE, TNS_RST, TNS_RST_RE, TNS_TEST */ + 0x03, 0x03, 0x03, 0x03, 0x1e, + /* TNS ALIVE, TNS ALIVE_RE */ + 0x03, 0x0a, + 0xa1, 0x00, 0x0b, 0x03, 0x03, 0x03, + 0x03, 0x03, 0x0a, 0x03, + 0x0a, 0x03, 0x0a, 0x03 }; /* Parameters needed to test nanobts_gen_set_cell_attr() */