From 6b6714ba1397e53f070073d67841547dcedf5af0 Mon Sep 17 00:00:00 2001 From: Matan Perelman Date: Tue, 30 Jan 2024 16:08:32 +0200 Subject: ctrl: Split bts_trx_ts_ctrl from bts_trx_ctrl Besides from making the ts ctrl interface follow the convention of being in its own file, it will be used in the next patch to add a ctrl interface for lchan. Change-Id: I9840bddd4eae409bc8373912d54b6bbfc9fc1c1a --- include/osmocom/bsc/ctrl.h | 1 + src/osmo-bsc/Makefile.am | 1 + src/osmo-bsc/bts_trx_ctrl.c | 98 ------------------------------------- src/osmo-bsc/bts_trx_ts_ctrl.c | 106 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 98 deletions(-) create mode 100644 src/osmo-bsc/bts_trx_ts_ctrl.c diff --git a/include/osmocom/bsc/ctrl.h b/include/osmocom/bsc/ctrl.h index 86d1bdae4..0d6c8a0e8 100644 --- a/include/osmocom/bsc/ctrl.h +++ b/include/osmocom/bsc/ctrl.h @@ -11,6 +11,7 @@ struct ctrl_handle *bsc_controlif_setup(struct gsm_network *net, uint16_t port); /* Used internally in different ctrl source code files: */ int bsc_bts_ctrl_cmds_install(void); int bsc_bts_trx_ctrl_cmds_install(void); +int bsc_bts_trx_ts_ctrl_cmds_install(void); void ctrl_generate_bts_location_state_trap(struct gsm_bts *bts, struct bsc_msc_data *msc); void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct bsc_msc_data *msc_data); diff --git a/src/osmo-bsc/Makefile.am b/src/osmo-bsc/Makefile.am index 661188ec9..e577c95dd 100644 --- a/src/osmo-bsc/Makefile.am +++ b/src/osmo-bsc/Makefile.am @@ -46,6 +46,7 @@ libbsc_la_SOURCES = \ bts.c \ bts_trx.c \ bts_trx_ctrl.c \ + bts_trx_ts_ctrl.c \ bts_ericsson_rbs2000.c \ bts_init.c \ bts_ipaccess_nanobts.c \ diff --git a/src/osmo-bsc/bts_trx_ctrl.c b/src/osmo-bsc/bts_trx_ctrl.c index 258203c72..d5e8f5a83 100644 --- a/src/osmo-bsc/bts_trx_ctrl.c +++ b/src/osmo-bsc/bts_trx_ctrl.c @@ -19,109 +19,11 @@ * */ -#include -#include - #include #include -#include #include -#include -#include #include -#include -#include - -/********************* - * TS_NODE - *********************/ - -static int verify_ts_hopping_arfcn_add(struct ctrl_cmd *cmd, const char *value, void *_data) -{ - int64_t arfcn; - enum gsm_band unused; - if (osmo_str_to_int64(&arfcn, value, 10, 0, 1024) < 0) - return 1; - if (gsm_arfcn2band_rc(arfcn, &unused) < 0) { - return 1; - } - return 0; -} -static int set_ts_hopping_arfcn_add(struct ctrl_cmd *cmd, void *data) -{ - struct gsm_bts_trx_ts *ts = cmd->node; - int arfcn = atoi(cmd->value); - - bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ONE); - - /* Update Cell Allocation (list of all the frequencies allocated to a cell) */ - if (generate_cell_chan_alloc(ts->trx->bts) != 0) { - bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ZERO); /* roll-back */ - cmd->reply = "Failed to re-generate Cell Allocation"; - return CTRL_CMD_ERROR; - } - - cmd->reply = "OK"; - return CTRL_CMD_REPLY; -} -/* Parameter format: "" */ -CTRL_CMD_DEFINE_WO(ts_hopping_arfcn_add, "hopping-arfcn-add"); - -static int verify_ts_hopping_arfcn_del(struct ctrl_cmd *cmd, const char *value, void *_data) -{ - int64_t arfcn; - enum gsm_band unused; - if (strcmp(value, "all") == 0) - return 0; - if (osmo_str_to_int64(&arfcn, value, 10, 0, 1024) < 0) - return 1; - if (gsm_arfcn2band_rc(arfcn, &unused) < 0) { - return 1; - } - return 0; -} -static int set_ts_hopping_arfcn_del(struct ctrl_cmd *cmd, void *data) -{ - struct gsm_bts_trx_ts *ts = cmd->node; - bool all = (strcmp(cmd->value, "all") == 0); - int arfcn; - - if (all) { - bitvec_zero(&ts->hopping.arfcns); - } else { - arfcn = atoi(cmd->value); - bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ZERO); - } - - /* Update Cell Allocation (list of all the frequencies allocated to a cell) */ - if (generate_cell_chan_alloc(ts->trx->bts) != 0) { - if (!all) - bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ONE); /* roll-back */ - cmd->reply = "Failed to re-generate Cell Allocation"; - return CTRL_CMD_ERROR; - } - - cmd->reply = "OK"; - return CTRL_CMD_REPLY; -} -/* Parameter format: "(|all)" */ -CTRL_CMD_DEFINE_WO(ts_hopping_arfcn_del, "hopping-arfcn-del"); - - -static int bsc_bts_trx_ts_ctrl_cmds_install(void) -{ - int rc = 0; - - rc |= ctrl_cmd_install(CTRL_NODE_TS, &cmd_ts_hopping_arfcn_add); - rc |= ctrl_cmd_install(CTRL_NODE_TS, &cmd_ts_hopping_arfcn_del); - - return rc; -} - -/********************* - * TRX_NODE - *********************/ static int get_trx_rf_locked(struct ctrl_cmd *cmd, void *data) { diff --git a/src/osmo-bsc/bts_trx_ts_ctrl.c b/src/osmo-bsc/bts_trx_ts_ctrl.c new file mode 100644 index 000000000..dc8aaf42e --- /dev/null +++ b/src/osmo-bsc/bts_trx_ts_ctrl.c @@ -0,0 +1,106 @@ +/* + * (C) 2013-2015 by Holger Hans Peter Freyther + * (C) 2013-2022 by sysmocom s.f.m.c. GmbH + * + * All Rights Reserved + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +#include + +#include +#include +#include + +static int verify_ts_hopping_arfcn_add(struct ctrl_cmd *cmd, const char *value, void *_data) +{ + int64_t arfcn; + enum gsm_band unused; + if (osmo_str_to_int64(&arfcn, value, 10, 0, 1024) < 0) + return 1; + if (gsm_arfcn2band_rc(arfcn, &unused) < 0) + return 1; + return 0; +} +static int set_ts_hopping_arfcn_add(struct ctrl_cmd *cmd, void *data) +{ + struct gsm_bts_trx_ts *ts = cmd->node; + int arfcn = atoi(cmd->value); + + bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ONE); + + /* Update Cell Allocation (list of all the frequencies allocated to a cell) */ + if (generate_cell_chan_alloc(ts->trx->bts) != 0) { + bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ZERO); /* roll-back */ + cmd->reply = "Failed to re-generate Cell Allocation"; + return CTRL_CMD_ERROR; + } + + cmd->reply = "OK"; + return CTRL_CMD_REPLY; +} +/* Parameter format: "" */ +CTRL_CMD_DEFINE_WO(ts_hopping_arfcn_add, "hopping-arfcn-add"); + +static int verify_ts_hopping_arfcn_del(struct ctrl_cmd *cmd, const char *value, void *_data) +{ + int64_t arfcn; + enum gsm_band unused; + if (strcmp(value, "all") == 0) + return 0; + if (osmo_str_to_int64(&arfcn, value, 10, 0, 1024) < 0) + return 1; + if (gsm_arfcn2band_rc(arfcn, &unused) < 0) + return 1; + return 0; +} +static int set_ts_hopping_arfcn_del(struct ctrl_cmd *cmd, void *data) +{ + struct gsm_bts_trx_ts *ts = cmd->node; + bool all = (strcmp(cmd->value, "all") == 0); + int arfcn; + + if (all) { + bitvec_zero(&ts->hopping.arfcns); + } else { + arfcn = atoi(cmd->value); + bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ZERO); + } + + /* Update Cell Allocation (list of all the frequencies allocated to a cell) */ + if (generate_cell_chan_alloc(ts->trx->bts) != 0) { + if (!all) + bitvec_set_bit_pos(&ts->hopping.arfcns, arfcn, ONE); /* roll-back */ + cmd->reply = "Failed to re-generate Cell Allocation"; + return CTRL_CMD_ERROR; + } + + cmd->reply = "OK"; + return CTRL_CMD_REPLY; +} +/* Parameter format: "(|all)" */ +CTRL_CMD_DEFINE_WO(ts_hopping_arfcn_del, "hopping-arfcn-del"); + + +int bsc_bts_trx_ts_ctrl_cmds_install(void) +{ + int rc = 0; + + rc |= ctrl_cmd_install(CTRL_NODE_TS, &cmd_ts_hopping_arfcn_add); + rc |= ctrl_cmd_install(CTRL_NODE_TS, &cmd_ts_hopping_arfcn_del); + + return rc; +} -- cgit v1.2.3