diff options
author | Michael Iedema <michael@kapsulate.com> | 2022-06-14 04:53:23 -0700 |
---|---|---|
committer | Michael Iedema <michael@kapsulate.com> | 2022-06-15 06:06:26 -0700 |
commit | 3ef30f342447ef3d6db6cf4d851829588050d36e (patch) | |
tree | f7a9ff76a31c856ffc04470cd4de7e18cf80d8cf /src | |
parent | 927c052136546c63c3e0891c1dc0734337ddd9b6 (diff) |
Expand VTY option which controls use of TCH for signalling
For statistical clarity and site tuning, it is sometimes
desirable to completely disable the use of TCH for signaling.
In the existing version of this VTY command, there is no way to
accomplish this. We can only restrict TCH for signaling non-voice
related actions.
This patch deprecates 'allow-tch-for-signalling (0|1)' and
adds 'tch-signalling-policy (never|emergency|voice|always)' to
provide more options.
Change-Id: I4459941ddad4e4a3bec8409b180d9a23a735e640
Diffstat (limited to 'src')
-rw-r--r-- | src/osmo-bsc/abis_rsl.c | 6 | ||||
-rw-r--r-- | src/osmo-bsc/bts.c | 2 | ||||
-rw-r--r-- | src/osmo-bsc/bts_vty.c | 42 |
3 files changed, 43 insertions, 7 deletions
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index d37fac8e2..f6215d954 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -2178,7 +2178,11 @@ void abis_rsl_chan_rqd_queue_poll(struct gsm_bts *bts) * in the code below, all other channel requests will get an SDCCH first * (if possible). */ - if (gsm_chreq_reason_is_voicecall(rqd->reason) || bts->chan_alloc_allow_tch_for_signalling) { + if (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_ALWAYS || + (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_VOICE && + gsm_chreq_reason_is_voicecall(rqd->reason)) || + (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_EMERG && + rqd->reason == GSM_CHREQ_REASON_EMERG)) { if (!lchan) { LOG_BTS(bts, DRSL, LOGL_NOTICE, "CHAN RQD[%s]: no resources for %s 0x%x, retrying with %s\n", get_value_string(gsm_chreq_descs, rqd->reason), gsm_lchant_name(GSM_LCHAN_SDCCH), diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c index d0adb2a3f..89895ca3b 100644 --- a/src/osmo-bsc/bts.c +++ b/src/osmo-bsc/bts.c @@ -295,7 +295,7 @@ struct gsm_bts *gsm_bts_alloc(struct gsm_network *net, struct gsm_bts_sm *bts_sm bts->neigh_list_manual_mode = NL_MODE_AUTOMATIC; bts->early_classmark_allowed_3g = true; /* 3g Early Classmark Sending controlled by bts->early_classmark_allowed param */ bts->si_unused_send_empty = true; - bts->chan_alloc_allow_tch_for_signalling = true; + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_ALWAYS; bts->si_common.cell_sel_par.cell_resel_hyst = 2; /* 4 dB */ bts->si_common.cell_sel_par.rxlev_acc_min = 0; bts->si_common.si2quater_neigh_list.arfcn = bts->si_common.data.earfcn_list; diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c index ba4215aaf..2ae9d9bf1 100644 --- a/src/osmo-bsc/bts_vty.c +++ b/src/osmo-bsc/bts_vty.c @@ -565,6 +565,31 @@ DEFUN_ATTR(cfg_bts_chan_alloc_interf, return CMD_SUCCESS; } +DEFUN_ATTR(cfg_bts_chan_alloc_tch_signalling_policy, + cfg_bts_chan_alloc_tch_signalling_policy_cmd, + "channel allocator tch-signalling-policy (never|emergency|voice|always)", + "Channel Allocator\n" "Channel Allocator\n" + "Configure when TCH/H or TCH/F channels can be used to serve signalling if SDCCHs are exhausted\n" + "Never allow TCH for signalling purposes\n" + "Only allow TCH for signalling purposes when establishing an emergency call\n" + "Allow TCH for signalling purposes when establishing any voice call\n" + "Always allow TCH for signalling purposes (default)\n", + CMD_ATTR_IMMEDIATE) +{ + struct gsm_bts *bts = vty->index; + + if (!strcmp(argv[0], "never")) + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_NEVER; + else if (!strcmp(argv[0], "emergency")) + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_EMERG; + else if (!strcmp(argv[0], "voice")) + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_VOICE; + else + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_ALWAYS; + + return CMD_SUCCESS; +} + DEFUN_ATTR(cfg_bts_chan_alloc_allow_tch_for_signalling, cfg_bts_chan_alloc_allow_tch_for_signalling_cmd, "channel allocator allow-tch-for-signalling (0|1)", @@ -572,14 +597,16 @@ DEFUN_ATTR(cfg_bts_chan_alloc_allow_tch_for_signalling, "Configure whether TCH/H or TCH/F channels can be used to serve non-call-related signalling if SDCCHs are exhausted\n" "Forbid use of TCH for non-call-related signalling purposes\n" "Allow use of TCH for non-call-related signalling purposes (default)\n", - CMD_ATTR_IMMEDIATE) + CMD_ATTR_IMMEDIATE|CMD_ATTR_DEPRECATED) { struct gsm_bts *bts = vty->index; + vty_out(vty, "%% 'allow-tch-for-signalling' is deprecated, use 'tch-signalling-policy' instead.%s", VTY_NEWLINE); + if (!strcmp(argv[0], "0")) - bts->chan_alloc_allow_tch_for_signalling = false; + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_VOICE; else - bts->chan_alloc_allow_tch_for_signalling = true; + bts->chan_alloc_tch_signalling_policy = BTS_TCH_SIGNALLING_ALWAYS; return CMD_SUCCESS; } @@ -4185,8 +4212,12 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) VTY_NEWLINE); if (bts->chan_alloc_avoid_interf) vty_out(vty, " channel allocator avoid-interference 1%s", VTY_NEWLINE); - if (!bts->chan_alloc_allow_tch_for_signalling) - vty_out(vty, " channel allocator allow-tch-for-signalling 0%s", VTY_NEWLINE); + if (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_NEVER) + vty_out(vty, " channel allocator tch-signalling-policy never%s", VTY_NEWLINE); + else if (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_EMERG) + vty_out(vty, " channel allocator tch-signalling-policy emergency%s", VTY_NEWLINE); + else if (bts->chan_alloc_tch_signalling_policy == BTS_TCH_SIGNALLING_VOICE) + vty_out(vty, " channel allocator tch-signalling-policy voice%s", VTY_NEWLINE); vty_out(vty, " rach tx integer %u%s", bts->si_common.rach_control.tx_integer, VTY_NEWLINE); vty_out(vty, " rach max transmission %u%s", @@ -4509,6 +4540,7 @@ int bts_vty_init(void) install_element(BTS_NODE, &cfg_bts_oml_e1_tei_cmd); install_element(BTS_NODE, &cfg_bts_challoc_cmd); install_element(BTS_NODE, &cfg_bts_chan_alloc_interf_cmd); + install_element(BTS_NODE, &cfg_bts_chan_alloc_tch_signalling_policy_cmd); install_element(BTS_NODE, &cfg_bts_chan_alloc_allow_tch_for_signalling_cmd); install_element(BTS_NODE, &cfg_bts_rach_tx_integer_cmd); install_element(BTS_NODE, &cfg_bts_rach_max_trans_cmd); |