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
This commit is contained in:
parent
11ee3a5f24
commit
42b2002a10
|
@ -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 */
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#include <osmocom/bsc/debug.h>
|
||||
#include <osmocom/bsc/nm_common_fsm.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;
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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() */
|
||||
|
|
Loading…
Reference in New Issue