matanp has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-bsc/+/33587 )
Change subject: ctrl: Support adding si2quater uarfcn neighbor
......................................................................
ctrl: Support adding si2quater uarfcn neighbor
Change-Id: I8116175b5dff1ee4bbff0dc3b4f93890ce4c975b
---
M src/osmo-bsc/bts_ctrl.c
1 file changed, 90 insertions(+), 1 deletion(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/87/33587/1
diff --git a/src/osmo-bsc/bts_ctrl.c b/src/osmo-bsc/bts_ctrl.c
index ad287fe..2589668 100644
--- a/src/osmo-bsc/bts_ctrl.c
+++ b/src/osmo-bsc/bts_ctrl.c
@@ -777,7 +777,86 @@
"si2quater-neighbor-list del uarfcn");
/* TODO: si2quater neighbor management: add EARFCN */
-/* TODO: si2quater neighbor management: add UARFCN */
+
+static int verify_bts_si2quater_neighbor_list_add_uarfcn(struct ctrl_cmd *cmd, const char
*value, void *_data)
+{
+ char *uarfcn_str, *scramble_str, *diversity_str, *saveptr, *tmp;
+ int uarfcn, scramble;
+
+ tmp = talloc_strdup(cmd, value);
+ if (!tmp)
+ return 1;
+
+ uarfcn_str = strtok_r(tmp, ",", &saveptr);
+ scramble_str = strtok_r(NULL, ",", &saveptr);
+ diversity_str = strtok_r(NULL, "\0", &saveptr);
+
+ if (!uarfcn_str || osmo_str_to_int(&uarfcn, uarfcn_str, 10, 0, 16383) < 0) {
+ cmd->reply = "Failed to parse neighbor UARFCN value";
+ return 1;
+ }
+
+ if (!scramble_str || osmo_str_to_int(&scramble, scramble_str, 10, 0, 511) < 0) {
+ cmd->reply = "Failed to parse neighbor scrambling code";
+ return 1;
+ }
+
+ if (!diversity_str || ((strcmp(diversity_str, "1") != 0) &&
(strcmp(diversity_str, "0") != 0))) {
+ cmd->reply = "Failed to parse neighbor diversity bit";
+ return 1;
+ }
+
+ return 0;
+}
+
+/* si2quater neighbor management: add an UARFCN
+ * Format: bts.<0-255>.si2quater-neighbor-list.add.uarfcn
<UARFCN>,<scrambling code>,<diversity bit>
+ * UARFCN is in range 0..16383, scrambling code is in range 0..511 */
+static int set_bts_si2quater_neighbor_list_add_uarfcn(struct ctrl_cmd *cmd, void *data)
+{
+ struct gsm_bts *bts = (struct gsm_bts *)cmd->node;
+ char *uarfcn_str, *scramble_str, *diversity_str, *saveptr, *tmp;
+ int uarfcn, scramble;
+ bool diversity;
+
+ tmp = talloc_strdup(cmd, cmd->value);
+ if (!tmp) {
+ cmd->reply = "OOM";
+ return CTRL_CMD_ERROR;
+ }
+
+ uarfcn_str = strtok_r(tmp, ",", &saveptr);
+ scramble_str = strtok_r(NULL, ",", &saveptr);
+ diversity_str = strtok_r(NULL, "\0", &saveptr);
+
+
+ if (!uarfcn_str || osmo_str_to_int(&uarfcn, uarfcn_str, 10, 0, 16383) < 0) {
+ cmd->reply = "Failed to parse neighbor UARFCN value";
+ return CTRL_CMD_ERROR;
+ }
+
+ if (!scramble_str || osmo_str_to_int(&scramble, scramble_str, 10, 0, 511) < 0) {
+ cmd->reply = "Failed to parse neighbor scrambling code";
+ return CTRL_CMD_ERROR;
+ }
+
+ diversity = strcmp(diversity_str, "1") == 0;
+
+ switch (bts_uarfcn_add(bts, uarfcn, scramble, diversity)) {
+ case -ENOMEM:
+ cmd->reply = "max number of UARFCNs reached";
+ return CTRL_CMD_ERROR;
+ case -ENOSPC:
+ cmd->reply = "not enough space in SI2quater";
+ return CTRL_CMD_ERROR;
+ }
+
+ cmd->reply = "OK";
+ return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE_WO(bts_si2quater_neighbor_list_add_uarfcn,
+ "si2quater-neighbor-list add uarfcn");
static int verify_bts_cell_reselection_offset(struct ctrl_cmd *cmd, const char *value,
void *_data)
{
@@ -1097,6 +1176,7 @@
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_neighbor_list_mode);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_si2quater_neighbor_list_del_earfcn);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_si2quater_neighbor_list_del_uarfcn);
+ rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_si2quater_neighbor_list_add_uarfcn);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_cell_reselection_offset);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_cell_reselection_penalty_time);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_cell_reselection_hysteresis);
--
To view, visit
https://gerrit.osmocom.org/c/osmo-bsc/+/33587
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I8116175b5dff1ee4bbff0dc3b4f93890ce4c975b
Gerrit-Change-Number: 33587
Gerrit-PatchSet: 1
Gerrit-Owner: matanp <matan1008(a)gmail.com>
Gerrit-MessageType: newchange