aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2023-09-26 18:39:51 +0200
committerosmith <osmith@sysmocom.de>2023-09-28 17:04:23 +0000
commitdea8aa8e6181f0ce0b793aa7b124ba4869227c4a (patch)
treeef6bf0eb052f2031d98a26772158d20ac1296220
parenteb5ac9dca443e2db1e657dd8018dfc0ab2c1992e (diff)
vty: make NCC Permitted (SI2) configurable
-rw-r--r--src/osmo-bsc/bts_vty.c77
-rw-r--r--tests/bts_features.vty31
2 files changed, 108 insertions, 0 deletions
diff --git a/src/osmo-bsc/bts_vty.c b/src/osmo-bsc/bts_vty.c
index 6602ad1ed..3af7296f4 100644
--- a/src/osmo-bsc/bts_vty.c
+++ b/src/osmo-bsc/bts_vty.c
@@ -1405,6 +1405,61 @@ DEFUN_USRATTR(cfg_bts_penalty_time_rsvd,
return CMD_SUCCESS;
}
+#define NCC_STR "Network Colour Code\n"
+#define NCC_PERMITTED_STR "Set permitted NCCs\n"
+
+DEFUN_USRATTR(cfg_bts_ncc_permitted_all,
+ cfg_bts_ncc_permitted_all_cmd,
+ X(BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK),
+ "ncc-permitted all\n",
+ NCC_PERMITTED_STR
+ "Permit all NCCs (default)\n")
+{
+ struct gsm_bts *bts = vty->index;
+
+ bts->si_common.ncc_permitted = 0xff;
+ return CMD_SUCCESS;
+}
+
+DEFUN_USRATTR(cfg_bts_ncc_permitted,
+ cfg_bts_ncc_permitted_cmd,
+ X(BSC_VTY_ATTR_RESTART_ABIS_RSL_LINK),
+ "ncc-permitted <1-8> [<1-8>] [<1-8>] [<1-8>] [<1-8>] [<1-8>] [<1-8>]\n",
+ NCC_PERMITTED_STR
+ NCC_STR NCC_STR NCC_STR NCC_STR NCC_STR NCC_STR NCC_STR)
+{
+ struct gsm_bts *bts = vty->index;
+ int i;
+ int ncc_prev = -1;
+
+ if (argc == 1 && !strcmp(argv[0], "all")) {
+ bts->si_common.ncc_permitted = 0xff;
+ return CMD_SUCCESS;
+ }
+
+ bts->si_common.ncc_permitted = 0x00;
+
+ /* Check if NCCs are in order (like get_amr_from_arg) */
+ for (i = 0; i < argc; i++) {
+ int ncc = atoi(argv[i]);
+ if (ncc_prev > ncc) {
+ vty_out(vty, "%% NCCs must be listed in order%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ if (ncc_prev == ncc) {
+ vty_out(vty, "%% NCCs must be unique%s", VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+ ncc_prev = ncc;
+ }
+
+ for (i = 0; i < argc; i++)
+ bts->si_common.ncc_permitted |= 1 << (atoi(argv[i]) - 1);
+
+ return CMD_SUCCESS;
+}
+
DEFUN_USRATTR(cfg_bts_radio_link_timeout,
cfg_bts_radio_link_timeout_cmd,
X(BSC_VTY_ATTR_RESTART_ABIS_OML_LINK),
@@ -4343,6 +4398,24 @@ static void config_write_power_ctrl(struct vty *vty, unsigned int indent,
#undef cfg_out
+static void config_write_bts_ncc_permitted(struct vty *vty, const char *prefix, const struct gsm_bts *bts)
+{
+ int i;
+ uint8_t ncc_permitted = bts->si_common.ncc_permitted;
+
+ if (ncc_permitted == 0xff)
+ return;
+
+ vty_out(vty, "%sncc-permitted", prefix);
+
+ for (i = 0; i < 8; i++) {
+ if ((ncc_permitted & (1 << i)))
+ vty_out(vty, " %d", i + 1);
+ }
+
+ vty_out(vty, "%s", VTY_NEWLINE);
+}
+
static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
{
int i;
@@ -4722,6 +4795,8 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts)
config_write_power_ctrl(vty, 2, bts, &bts->bs_power_ctrl);
config_write_power_ctrl(vty, 2, bts, &bts->ms_power_ctrl);
+ config_write_bts_ncc_permitted(vty, " ", bts);
+
config_write_bts_model(vty, bts);
}
@@ -4904,6 +4979,8 @@ int bts_vty_init(void)
install_element(BTS_NODE, &cfg_bts_immediate_assignment_cmd);
install_element(BTS_NODE, &cfg_bts_nch_position_cmd);
install_element(BTS_NODE, &cfg_bts_no_nch_position_cmd);
+ install_element(BTS_NODE, &cfg_bts_ncc_permitted_all_cmd);
+ install_element(BTS_NODE, &cfg_bts_ncc_permitted_cmd);
neighbor_ident_vty_init();
/* See also handover commands added on bts level from handover_vty.c */
diff --git a/tests/bts_features.vty b/tests/bts_features.vty
index 3768a4d52..1ab803901 100644
--- a/tests/bts_features.vty
+++ b/tests/bts_features.vty
@@ -25,3 +25,34 @@ OsmoBSC(config-net-bts-trx-ts)# hopping enabled 1
OsmoBSC(config-net-bts-trx-ts)# exit
OsmoBSC(config-net-bts-trx)# exit
OsmoBSC(config-net-bts)# exit
+
+OsmoBSC(config-net)# exit
+OsmoBSC(config)# exit
+
+OsmoBSC# ### test ncc-permitted
+OsmoBSC# show running-config
+... !ncc-permitted
+OsmoBSC# configure terminal
+OsmoBSC(config)# network
+OsmoBSC(config-net)# bts 0
+OsmoBSC(config-net-bts)# ncc-permitted 3 2
+% NCCs must be listed in order
+OsmoBSC(config-net-bts)# ncc-permitted 2 2
+% NCCs must be unique
+OsmoBSC(config-net-bts)# ncc-permitted 2 3 4 5 6 7 8
+OsmoBSC(config-net-bts)# exit
+OsmoBSC(config-net)# exit
+OsmoBSC(config)# exit
+OsmoBSC# show running-config
+...
+ ncc-permitted 2 3 4 5 6 7 8
+...
+OsmoBSC# configure terminal
+OsmoBSC(config)# network
+OsmoBSC(config-net)# bts 0
+OsmoBSC(config-net-bts)# ncc-permitted all
+OsmoBSC(config-net-bts)# exit
+OsmoBSC(config-net)# exit
+OsmoBSC(config)# exit
+OsmoBSC# show running-config
+... !ncc-permitted