arehbein has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/31880 )
Change subject: Make NSE timing data configurable ......................................................................
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 --- M include/osmocom/bsc/bts.h M include/osmocom/bsc/bts_sm.h M include/osmocom/bsc/pcuif_proto.h M src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c M src/osmo-bsc/bts_sm.c M src/osmo-bsc/bts_vty.c M src/osmo-bsc/net_init.c M src/osmo-bsc/pcu_sock.c M tests/nanobts_omlattr/nanobts_omlattr_test.c M tests/nanobts_omlattr/nanobts_omlattr_test.ok M tests/timer.vty 11 files changed, 203 insertions(+), 29 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/80/31880/1
diff --git a/include/osmocom/bsc/bts.h b/include/osmocom/bsc/bts.h index ed69bd4..94fb5fc 100644 --- a/include/osmocom/bsc/bts.h +++ b/include/osmocom/bsc/bts.h @@ -322,6 +322,15 @@ #define GSM_BTS_TDEF_ID_COUNTDOWN_VALUE_NEG26 (-26) #define GSM_BTS_TDEF_ID_UL_TBF_EXT_NEG27 (-27) #define GSM_BTS_TDEF_ID_DL_TBF_EXT_NEG28 (-28) + +#define GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29 (-29) +#define GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30 (-30) +#define GSM_BTS_TDEF_ID_TNS_RESET_NEG31 (-31) +#define GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32 (-32) +#define GSM_BTS_TDEF_ID_TNS_TEST_NEG33 (-33) +#define GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34 (-34) +#define GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35 (-35) + #define GSM_BTS_TDEF_ID_N3101_NEG3169 (-3169) #define GSM_BTS_TDEF_ID_N3103_NEG3170 (-3170) #define GSM_BTS_TDEF_ID_N3105_NEG3171 (-3171) diff --git a/include/osmocom/bsc/bts_sm.h b/include/osmocom/bsc/bts_sm.h index 7ed7aba..9814544 100644 --- a/include/osmocom/bsc/bts_sm.h +++ b/include/osmocom/bsc/bts_sm.h @@ -25,6 +25,7 @@ #include <unistd.h> #include <stdint.h>
+#include <osmocom/bsc/pcuif_proto.h> #include "osmocom/bsc/gsm_data.h"
struct gsm_bts; @@ -32,7 +33,7 @@ struct gsm_gprs_nse { struct gsm_abis_mo mo; uint16_t nsei; - uint8_t timer[7]; + uint8_t timer[_NUM_PCU_IF_NSE_TIMER_OFFSETS]; };
struct gsm_gprs_nsvc { diff --git a/include/osmocom/bsc/pcuif_proto.h b/include/osmocom/bsc/pcuif_proto.h index bf05b01..8a41fc6 100644 --- a/include/osmocom/bsc/pcuif_proto.h +++ b/include/osmocom/bsc/pcuif_proto.h @@ -145,6 +145,18 @@ struct gsm_pcu_if_info_trx_ts ts[8]; } __attribute__ ((packed));
+enum gsm_pcu_if_info_ind_nse_timer_offsets { + PCU_IF_TNS_BLOCK_OFFSET = 0, + PCU_IF_TNS_BLOCK_RETRIES_OFFSET, + PCU_IF_TNS_RESET_OFFSET, + PCU_IF_TNS_RESET_RETRIES_OFFSET, + PCU_IF_TNS_TEST_OFFSET, + PCU_IF_TNS_ALIVE_OFFSET, + PCU_IF_TNS_ALIVE_RETRIES_OFFSET, + PCU_IF_TSNS_PROV_OFFSET, + _NUM_PCU_IF_NSE_TIMER_OFFSETS +}; + struct gsm_pcu_if_info_ind { uint32_t version; uint32_t flags; @@ -156,7 +168,7 @@ uint16_t lac, rac; /* NSE */ uint16_t nsei; - uint8_t nse_timer[7]; + uint8_t nse_timer[_NUM_PCU_IF_NSE_TIMER_OFFSETS]; uint8_t cell_timer[11]; /* cell */ uint16_t cell_id; diff --git a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c index a5252d7..d7f459d 100644 --- a/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c +++ b/src/osmo-bsc/bts_ipaccess_nanobts_omlattr.c @@ -114,6 +114,7 @@ struct msgb *msgb; uint8_t buf[256]; struct gsm_bts *bts = gsm_bts_sm_get_bts(bts_sm); + struct osmo_tdef *tdefs = bts->network->T_defs; msgb = msgb_alloc(1024, "nanobts_attr_bts"); if (!msgb) return NULL; @@ -124,9 +125,25 @@ msgb_tl16v_put(msgb, NM_ATT_IPACC_NSEI, 2, buf);
/* all timers in seconds */ - OSMO_ASSERT(ARRAY_SIZE(bts_sm->gprs.nse.timer) < sizeof(buf)); - memcpy(buf, bts_sm->gprs.nse.timer, ARRAY_SIZE(bts_sm->gprs.nse.timer)); - msgb_tl16v_put(msgb, NM_ATT_IPACC_NS_CFG, 7, buf); + OSMO_ASSERT(_NUM_PCU_IF_NSE_TIMER_OFFSETS < sizeof(buf)); + buf[PCU_IF_TNS_BLOCK_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29, OSMO_TDEF_S, -1); + buf[PCU_IF_TNS_BLOCK_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30, OSMO_TDEF_CUSTOM, -1); + buf[PCU_IF_TNS_RESET_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_RESET_NEG31, OSMO_TDEF_S, -1); + buf[PCU_IF_TNS_RESET_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32, OSMO_TDEF_CUSTOM, -1); + buf[PCU_IF_TNS_TEST_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_TEST_NEG33, OSMO_TDEF_S, -1); + /* Communicating TNS Alive/having it configurable for backwards compatibility + * (3GPP TS 48.016 fixes its value at 3, see sect. 11, Table 11.1) */ + buf[PCU_IF_TNS_ALIVE_OFFSET] = bts_sm->gprs.nse.timer[PCU_IF_TNS_ALIVE_OFFSET]; + buf[PCU_IF_TNS_ALIVE_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34, OSMO_TDEF_CUSTOM, -1); + buf[PCU_IF_TSNS_PROV_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35, OSMO_TDEF_S, -1); + msgb_tl16v_put(msgb, NM_ATT_IPACC_NS_CFG, _NUM_PCU_IF_NSE_TIMER_OFFSETS, buf);
/* all timers in seconds */ buf[0] = 3; /* blockimg timer (T1) */ diff --git a/src/osmo-bsc/bts_sm.c b/src/osmo-bsc/bts_sm.c index f82b851..d6cbac6 100644 --- a/src/osmo-bsc/bts_sm.c +++ b/src/osmo-bsc/bts_sm.c @@ -27,8 +27,6 @@ #include <osmocom/bsc/nm_common_fsm.h> #include <osmocom/bsc/pcuif_proto.h>
-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; @@ -50,9 +48,21 @@ return 0; }
+/* Set the timer default value for target INT_VAR, log an error and return NULL if timer is not found */ +#define SET_TIMER_DEFAULT_SAFE(INT_VAR, STRUCT_OSMO_TDEF_PTR, TDEF_ID) do {\ + if (osmo_tdef_get_entry(STRUCT_OSMO_TDEF_PTR, TDEF_ID)) {\ + INT_VAR = osmo_tdef_get_entry(STRUCT_OSMO_TDEF_PTR, TDEF_ID)->default_val;\ + } else {\ + LOGP(DPCU, LOGL_ERROR, "Timer not found (id: %d)\n", TDEF_ID);\ + return NULL;\ + };\ +} while (0) + struct gsm_bts_sm *gsm_bts_sm_alloc(struct gsm_network *net, uint8_t bts_num) { struct gsm_bts_sm *bts_sm = talloc_zero(net, struct gsm_bts_sm); + uint8_t * const nse_timers = bts_sm->gprs.nse.timer; + struct osmo_tdef *tdefs = net->T_defs; struct gsm_bts *bts; int i; if (!bts_sm) @@ -77,8 +87,6 @@ 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; @@ -92,8 +100,25 @@ 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)); + + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_BLOCK_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29); + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_BLOCK_RETRIES_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30); + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_RESET_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_RESET_NEG31); + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_RESET_RETRIES_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32); + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_TEST_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_TEST_NEG33); + /* Communicating TNS Alive/having it configurable for backwards compatibility + * (3GPP TS 48.016 fixes its value at 3, see sect. 11, Table 11.1) */ + nse_timers[PCU_IF_TNS_ALIVE_OFFSET] = 3; + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TNS_ALIVE_RETRIES_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34); + SET_TIMER_DEFAULT_SAFE(nse_timers[PCU_IF_TSNS_PROV_OFFSET], tdefs, + GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35); + 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 08166ca..8c58ccb 100644 --- a/src/osmo-bsc/bts_vty.c +++ b/src/osmo-bsc/bts_vty.c @@ -44,6 +44,7 @@ #include <osmocom/bsc/debug.h> #include <osmocom/bsc/paging.h> #include <osmocom/bsc/pcu_if.h> +#include <osmocom/bsc/pcuif_proto.h> #include <osmocom/bsc/handover_vty.h> #include <osmocom/bsc/gsm_04_08_rr.h> #include <osmocom/bsc/neighbor_ident.h> @@ -57,18 +58,36 @@
#define X(x) (1 << x)
+extern struct osmo_tdef gsm_network_T_defs[]; + /* FIXME: this should go to some common file */ static const struct value_string gprs_ns_timer_strs[] = { - { 0, "tns-block" }, - { 1, "tns-block-retries" }, - { 2, "tns-reset" }, - { 3, "tns-reset-retries" }, - { 4, "tns-test" }, - { 5, "tns-alive" }, - { 6, "tns-alive-retries" }, + { PCU_IF_TNS_BLOCK_OFFSET, "tns-block" }, + { PCU_IF_TNS_BLOCK_RETRIES_OFFSET, "tns-block-retries" }, + { PCU_IF_TNS_RESET_OFFSET, "tns-reset" }, + { PCU_IF_TNS_RESET_RETRIES_OFFSET, "tns-reset-retries" }, + { PCU_IF_TNS_TEST_OFFSET, "tns-test" }, + { PCU_IF_TNS_ALIVE_OFFSET, "tns-alive" }, + { PCU_IF_TNS_ALIVE_RETRIES_OFFSET, "tns-alive-retries" }, { 0, NULL } };
+#define TDEF_DATA_ID_IDX 1 +#define TDEF_DATA_UNIT_IDX 2 +static const int gprs_ns_timer_tdef_data[][3] = { + { PCU_IF_TNS_BLOCK_OFFSET, GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29 }, + { PCU_IF_TNS_BLOCK_RETRIES_OFFSET, GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30, + OSMO_TDEF_CUSTOM }, + { PCU_IF_TNS_RESET_OFFSET, GSM_BTS_TDEF_ID_TNS_RESET_NEG31 }, + { PCU_IF_TNS_RESET_RETRIES_OFFSET, GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32, + OSMO_TDEF_CUSTOM }, + { PCU_IF_TNS_TEST_OFFSET, GSM_BTS_TDEF_ID_TNS_TEST_NEG33 }, + /* PCU_IF_TNS_ALIVE_OFFSET will never be used */ + { PCU_IF_TNS_ALIVE_OFFSET, 0xdeadbeef, 0xdeadbeef }, + { PCU_IF_TNS_ALIVE_RETRIES_OFFSET, GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34, + OSMO_TDEF_CUSTOM }, +}; + static const struct value_string gprs_bssgp_cfg_strs[] = { { 0, "blocking-timer" }, { 1, "blocking-retries" }, @@ -1554,10 +1573,13 @@ return CMD_SUCCESS; }
-DEFUN_USRATTR(cfg_bts_gprs_ns_timer, +DEFUN_ATTR_USRATTR(cfg_bts_gprs_ns_timer, cfg_bts_gprs_ns_timer_cmd, + CMD_ATTR_HIDDEN & CMD_ATTR_DEPRECATED, X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK), "gprs ns timer " NS_TIMERS " <0-255>", + "Deprecated command; timing parameters are now\n" + "configurable like regular timers (for more, run 'show timers')\n" GPRS_TEXT "Network Service\n" "Network Service Timer\n" NS_TIMERS_HELP "Timer Value\n") @@ -1565,14 +1587,24 @@ struct gsm_bts *bts = vty->index; int idx = get_string_value(gprs_ns_timer_strs, argv[0]); int val = atoi(argv[1]); + const int *tdef_data_row; + int tdef_id;
GPRS_CHECK_ENABLED(bts);
- if (idx < 0 || idx >= ARRAY_SIZE(bts->site_mgr->gprs.nse.timer)) + if (idx < 0 || idx > sizeof(gprs_ns_timer_tdef_data)/ + sizeof(gprs_ns_timer_tdef_data[0])) return CMD_WARNING;
- bts->site_mgr->gprs.nse.timer[idx] = val; - + if (idx == PCU_IF_TNS_ALIVE_OFFSET) { + bts->site_mgr->gprs.nse.timer[idx] = val; + } else { + tdef_data_row = gprs_ns_timer_tdef_data[idx]; + tdef_id = tdef_data_row[TDEF_DATA_ID_IDX]; + if (osmo_tdef_set(gsm_network_T_defs, tdef_id, val, + tdef_data_row[TDEF_DATA_UNIT_IDX]) < 0) + return CMD_WARNING; + } return CMD_SUCCESS; }
diff --git a/src/osmo-bsc/net_init.c b/src/osmo-bsc/net_init.c index 5116199..ef6e029 100644 --- a/src/osmo-bsc/net_init.c +++ b/src/osmo-bsc/net_init.c @@ -30,7 +30,7 @@ #include <osmocom/bsc/bts.h> #include <osmocom/bsc/paging.h>
-static struct osmo_tdef gsm_network_T_defs[] = { +struct osmo_tdef gsm_network_T_defs[] = { { .T = 4, .default_val = 5, .desc = "Timeout to receive BSSMAP RESET ACKNOWLEDGE from the MSC" }, { .T = 7, .default_val = 10, .desc = "inter-BSC/MSC Handover outgoing, BSSMAP HO Required to HO Command timeout" }, { .T = 8, .default_val = 10, .desc = "inter-BSC/MSC Handover outgoing, BSSMAP HO Command to final Clear timeout" }, @@ -94,6 +94,20 @@ .unit = OSMO_TDEF_MS, .max_val = 500 * 10 }, { .T = GSM_BTS_TDEF_ID_DL_TBF_EXT_NEG28, .default_val = NM_PAR_DL_TBF_EXT_DEFAULT_MSEC, .desc = "Extended downlink TBF", .unit = OSMO_TDEF_MS, .max_val = 500 * 10 }, + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29, .default_val = 3, .min_val = 1, .max_val = 120, + .desc = "Tns-block: Guards the blocking and unblocking procedures" }, + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30, .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_NEG31, .default_val = 3, .min_val = 1, .max_val = 120, + .desc = "Tns-reset: Guards the reset procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32, .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_NEG33, .default_val = 30, .min_val = 1, .max_val = 60, + .desc = "Tns-test: Periodicity of the NS-VC test procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34, .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 }, + { .T = GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35, .default_val = 3, .min_val = 1, .max_val = 10, + .desc = "Tsns-prov: Guards the SNS procedures" }, { .T = -3105, .default_val = GSM_NY1_DEFAULT, .unit = OSMO_TDEF_CUSTOM, .desc = "Ny1: Maximum number of Physical Information (re)transmissions" }, { .T = -3111, .default_val = 4, .desc = "Wait time after lchan was released in error (should be T3111 + 2s)" }, diff --git a/src/osmo-bsc/pcu_sock.c b/src/osmo-bsc/pcu_sock.c index c54123e..98e1ffc 100644 --- a/src/osmo-bsc/pcu_sock.c +++ b/src/osmo-bsc/pcu_sock.c @@ -198,7 +198,23 @@
/* NSE */ info_ind->nsei = bts_sm->gprs.nse.nsei; - memcpy(info_ind->nse_timer, bts_sm->gprs.nse.timer, 7); + // memcpy(info_ind->nse_timer, bts_sm->gprs.nse.timer, _NUM_PCU_IF_NSE_TIMER_OFFSETS); + info_ind->nse_timer[PCU_IF_TNS_BLOCK_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29, OSMO_TDEF_S, -1); + info_ind->nse_timer[PCU_IF_TNS_BLOCK_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30, OSMO_TDEF_CUSTOM, -1); + info_ind->nse_timer[PCU_IF_TNS_RESET_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_RESET_NEG31, OSMO_TDEF_S, -1); + info_ind->nse_timer[PCU_IF_TNS_RESET_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32, OSMO_TDEF_CUSTOM, -1); + info_ind->nse_timer[PCU_IF_TNS_TEST_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_TEST_NEG33, OSMO_TDEF_S, -1); + /* Communicating TNS Alive/having it configurable for backwards compatibility */ + info_ind->nse_timer[PCU_IF_TNS_ALIVE_OFFSET] = bts_sm->gprs.nse.timer[PCU_IF_TNS_ALIVE_OFFSET]; + info_ind->nse_timer[PCU_IF_TNS_ALIVE_RETRIES_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34, OSMO_TDEF_CUSTOM, -1); + info_ind->nse_timer[PCU_IF_TSNS_PROV_OFFSET] = + osmo_tdef_get(tdefs, GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35, OSMO_TDEF_S, -1); memcpy(info_ind->cell_timer, bts->gprs.cell.timer, 11);
/* cell attributes */ diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.c b/tests/nanobts_omlattr/nanobts_omlattr_test.c index 463b364..658705e 100644 --- a/tests/nanobts_omlattr/nanobts_omlattr_test.c +++ b/tests/nanobts_omlattr/nanobts_omlattr_test.c @@ -148,6 +148,20 @@ .unit = OSMO_TDEF_CUSTOM}, { .T = GSM_BTS_TDEF_ID_N3105_NEG3171, .default_val = 8, .desc = "N3105: Maximum allocated data blocks without RLC/MAC control reply from MS", .unit = OSMO_TDEF_CUSTOM }, + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK_NEG29, .default_val = 3, .min_val = 1, .max_val = 120, + .desc = "Tns-block: Guards the blocking and unblocking procedures" }, + { .T = GSM_BTS_TDEF_ID_TNS_BLOCK_RETRIES_NEG30, .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_NEG31, .default_val = 3, .min_val = 1, .max_val = 120, + .desc = "Tns-reset: Guards the reset procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_RESET_RETRIES_NEG32, .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_NEG33, .default_val = 30, .min_val = 1, .max_val = 60, + .desc = "Tns-test: Periodicity of the NS-VC test procedure" }, + { .T = GSM_BTS_TDEF_ID_TNS_ALIVE_RETRIES_NEG34, .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 }, + { .T = GSM_BTS_TDEF_ID_TSNS_PROV_NEG_35, .default_val = 3, .min_val = 1, .max_val = 10, + .desc = "Tsns-prov: Guards the SNS procedures" }, {} };
@@ -212,9 +226,16 @@
/* 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, + uint8_t attr_nse_expected[] = { + /* NM_ATT_IPACC_NS_CFG */ + 0x9d, 0x00, 0x02, 0x00, 0x65, 0xa0, + /* LEN1, LEN2 */ + 0x00, 0x08, + /* TNS BLK, TNS BLK RE, TNS_RST, TNS_RST_RE, TNS_TEST */ + 0x03, 0x03, 0x03, 0x03, 0x1e, + /* TNS ALIVE, TNS ALIVE_RE, TSNS PROV */ + 0x03, 0x0a, 0x03, + 0xa1, 0x00, 0x0b, 0x03, 0x03, 0x03, 0x03, 0x03, 0x0a, 0x03, 0x0a, 0x03, 0x0a, 0x03 }; diff --git a/tests/nanobts_omlattr/nanobts_omlattr_test.ok b/tests/nanobts_omlattr/nanobts_omlattr_test.ok index 5f90769..4a5e67d 100644 --- a/tests/nanobts_omlattr/nanobts_omlattr_test.ok +++ b/tests/nanobts_omlattr/nanobts_omlattr_test.ok @@ -4,8 +4,8 @@ ok.
Testing nanobts_gen_set_nse_attr()... -result= 9d00020065a00007030303031e030aa1000b03030303030a030a030a03 -expected=9d00020065a00007030303031e030aa1000b03030303030a030a030a03 +result= 9d00020065a00008030303031e030a03a1000b03030303030a030a030a03 +expected=9d00020065a00008030303031e030a03a1000b03030303030a030a030a03 ok.
Testing nanobts_gen_set_cell_attr()... diff --git a/tests/timer.vty b/tests/timer.vty index 8772d5a..774404b 100644 --- a/tests/timer.vty +++ b/tests/timer.vty @@ -42,6 +42,13 @@ net: X26 = 15 CV: Countdown value/remaining blocks to transmit (default: 15, range: [0 .. 255]) net: X27 = 2500 ms Extended uplink TBF (default: 2500 ms, range: [0 .. 5000]) net: X28 = 2500 ms Extended downlink TBF (default: 2500 ms, range: [0 .. 5000]) +net: X29 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [1 .. 120]) +net: X30 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +net: X31 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [1 .. 120]) +net: X32 = 3 Reset procedure retries (default: 3, range: [0 .. 255]) +net: X33 = 30 s Tns-test: Periodicity of the NS-VC test procedure (default: 30 s, range: [1 .. 60]) +net: X34 = 10 NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure (default: 10, range: [0 .. 255]) +net: X35 = 3 s Tsns-prov: Guards the SNS procedures (default: 3 s, range: [1 .. 10]) net: X3105 = 17 Ny1: Maximum number of Physical Information (re)transmissions (default: 17) net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s) net: X3113 = 60 s Maximum Paging Request Transmit Delay Threshold: If the estimated transmit delay of the messages in the paging queue surpasses this threshold, then new incoming paging requests will if possible replace a request in retransmission state from the queue or otherwise be discarded, hence limiting the size of the queue and maximum delay of its scheduled requests. X3113 also serves as the upper boundary for dynamic T3113 when estimating the expected maximum delay to get a response (default: 60 s) @@ -109,6 +116,13 @@ net: X26 = 15 CV: Countdown value/remaining blocks to transmit (default: 15, range: [0 .. 255]) net: X27 = 2500 ms Extended uplink TBF (default: 2500 ms, range: [0 .. 5000]) net: X28 = 2500 ms Extended downlink TBF (default: 2500 ms, range: [0 .. 5000]) +net: X29 = 3 s Tns-block: Guards the blocking and unblocking procedures (default: 3 s, range: [1 .. 120]) +net: X30 = 3 NS-BLOCK-RETRIES: Blocking procedure retries (default: 3, range: [0 .. 255]) +net: X31 = 3 s Tns-reset: Guards the reset procedure (default: 3 s, range: [1 .. 120]) +net: X32 = 3 Reset procedure retries (default: 3, range: [0 .. 255]) +net: X33 = 30 s Tns-test: Periodicity of the NS-VC test procedure (default: 30 s, range: [1 .. 60]) +net: X34 = 10 NS-ALIVE-RETRIES: Retries for the the NS-VC test procedure (default: 10, range: [0 .. 255]) +net: X35 = 3 s Tsns-prov: Guards the SNS procedures (default: 3 s, range: [1 .. 10]) net: X3105 = 17 Ny1: Maximum number of Physical Information (re)transmissions (default: 17) net: X3111 = 4 s Wait time after lchan was released in error (should be T3111 + 2s) (default: 4 s) net: X3113 = 60 s Maximum Paging Request Transmit Delay Threshold: If the estimated transmit delay of the messages in the paging queue surpasses this threshold, then new incoming paging requests will if possible replace a request in retransmission state from the queue or otherwise be discarded, hence limiting the size of the queue and maximum delay of its scheduled requests. X3113 also serves as the upper boundary for dynamic T3113 when estimating the expected maximum delay to get a response (default: 60 s)