matanp has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-bsc/+/32520 )


Change subject: ctrl: Add setting access control class
......................................................................

ctrl: Add setting access control class

Change-Id: I7abbf0adc3798e9224834a68d7cdce4bbe03c9a3
---
M src/osmo-bsc/bts_ctrl.c
1 file changed, 86 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/20/32520/1

diff --git a/src/osmo-bsc/bts_ctrl.c b/src/osmo-bsc/bts_ctrl.c
index f4058b2..447d61b 100644
--- a/src/osmo-bsc/bts_ctrl.c
+++ b/src/osmo-bsc/bts_ctrl.c
@@ -876,6 +876,81 @@

 CTRL_CMD_DEFINE_RO(bts_rach_access_control_class, 
"si3-rach-access-control-classes");

+static int verify_access_control_class(struct ctrl_cmd *cmd, const char *value)
+{
+       int acc;
+
+       if (strcmp(value, "emergency") == 0)
+               return 0;
+
+       acc = atoi(value);
+
+       if (acc < 0 || acc > 15) {
+               cmd->reply = "Value is out of range";
+               return 1;
+       } else if (acc == 10) {
+               cmd->reply = "Access control class 10 does not exist, consider 
using \"emergency\" instead";
+               return 1;
+       }
+
+       return 0;
+}
+
+static int set_access_control_class(struct ctrl_cmd *cmd, bool allow)
+{
+       int acc;
+       struct gsm_bts *bts = cmd->node;
+
+       if (strcmp(cmd->value, "emergency") == 0) {
+               if (allow)
+                       bts->si_common.rach_control.t2 &= ~0x4;
+               else
+                       bts->si_common.rach_control.t2 |= 0x4;
+               return CTRL_CMD_REPLY;
+       }
+
+       acc = atoi(cmd->value);
+       if (acc < 8)
+               if (allow)
+                       bts->si_common.rach_control.t3 &= ~(0x1 << acc);
+               else
+                       bts->si_common.rach_control.t3 |= (0x1 << acc);
+       else
+               if (allow)
+                       bts->si_common.rach_control.t2 &= ~(0x1 << (acc - 8));
+               else
+                       bts->si_common.rach_control.t2 |= (0x1 << (acc - 8));
+
+       if (acc < 10)
+               acc_mgr_perm_subset_changed(&bts->acc_mgr, 
&bts->si_common.rach_control);
+
+       return CTRL_CMD_REPLY;
+}
+
+static int verify_bts_rach_access_control_class_bar(struct ctrl_cmd *cmd, 
const char *value, void *_data)
+{
+       return verify_access_control_class(cmd, value);
+}
+
+static int set_bts_rach_access_control_class_bar(struct ctrl_cmd *cmd, void 
*data)
+{
+       return set_access_control_class(cmd, false);
+}
+
+CTRL_CMD_DEFINE_WO(bts_rach_access_control_class_bar, 
"si3-rach-access-control-class bar");
+
+static int verify_bts_rach_access_control_class_allow(struct ctrl_cmd *cmd, 
const char *value, void *_data)
+{
+       return verify_access_control_class(cmd, value);
+}
+
+static int set_bts_rach_access_control_class_allow(struct ctrl_cmd *cmd, void 
*data)
+{
+       return set_access_control_class(cmd, true);
+}
+
+CTRL_CMD_DEFINE_WO(bts_rach_access_control_class_allow, 
"si3-rach-access-control-class allow");
+
 int bsc_bts_ctrl_cmds_install(void)
 {
        int rc = 0;
@@ -902,6 +977,8 @@
        rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_penalty_time);
        rc |= ctrl_cmd_install(CTRL_NODE_BTS, 
&cmd_bts_cell_reselection_hysteresis);
        rc |= ctrl_cmd_install(CTRL_NODE_BTS, 
&cmd_bts_rach_access_control_class);
+       rc |= ctrl_cmd_install(CTRL_NODE_BTS, 
&cmd_bts_rach_access_control_class_bar);
+       rc |= ctrl_cmd_install(CTRL_NODE_BTS, 
&cmd_bts_rach_access_control_class_allow);

        rc |= neighbor_ident_ctrl_init();


--
To view, visit https://gerrit.osmocom.org/c/osmo-bsc/+/32520
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: I7abbf0adc3798e9224834a68d7cdce4bbe03c9a3
Gerrit-Change-Number: 32520
Gerrit-PatchSet: 1
Gerrit-Owner: matanp <[email protected]>
Gerrit-MessageType: newchange

Reply via email to