nitb: Move the rf-lock commands from osmo-bsc to libbsc

The bts.0.rf-state and rf_locked command have been moved
from the osmo-bsc binary to libbsc. All tests continue to
pass.
This commit is contained in:
Holger Hans Peter Freyther 2015-02-10 21:37:16 +01:00
parent dc50388c41
commit 9edd06d350
2 changed files with 83 additions and 86 deletions

View File

@ -19,6 +19,7 @@
*
*/
#include <errno.h>
#include <time.h>
#include <osmocom/ctrl/control_cmd.h>
#include <openbsc/ipaccess.h>
@ -26,6 +27,8 @@
#include <openbsc/abis_nm.h>
#include <openbsc/debug.h>
#include <openbsc/chan_alloc.h>
#include <openbsc/osmo_bsc_rf.h>
#include <openbsc/osmo_msc_data.h>
#define CTRL_CMD_VTY_STRING(cmdname, cmdstr, dtype, element) \
CTRL_HELPER_GET_STRING(cmdname, dtype, element) \
@ -337,6 +340,84 @@ static int set_bts_gprs_mode(struct ctrl_cmd *cmd, void *data)
CTRL_CMD_DEFINE(bts_gprs_mode, "gprs-mode");
static int get_bts_rf_state(struct ctrl_cmd *cmd, void *data)
{
const char *oper, *admin, *policy;
struct gsm_bts *bts = cmd->node;
if (!bts) {
cmd->reply = "bts not found.";
return CTRL_CMD_ERROR;
}
oper = osmo_bsc_rf_get_opstate_name(osmo_bsc_rf_get_opstate_by_bts(bts));
admin = osmo_bsc_rf_get_adminstate_name(osmo_bsc_rf_get_adminstate_by_bts(bts));
policy = osmo_bsc_rf_get_policy_name(osmo_bsc_rf_get_policy_by_bts(bts));
cmd->reply = talloc_asprintf(cmd, "%s,%s,%s", oper, admin, policy);
if (!cmd->reply) {
cmd->reply = "OOM.";
return CTRL_CMD_ERROR;
}
return CTRL_CMD_REPLY;
}
CTRL_CMD_DEFINE_RO(bts_rf_state, "rf_state");
static int get_net_rf_lock(struct ctrl_cmd *cmd, void *data)
{
cmd->reply = "get only works for the individual trx properties.";
return CTRL_CMD_ERROR;
}
#define TIME_FORMAT_RFC2822 "%a, %d %b %Y %T %z"
static int set_net_rf_lock(struct ctrl_cmd *cmd, void *data)
{
int locked = atoi(cmd->value);
struct gsm_network *net = cmd->node;
time_t now = time(NULL);
char now_buf[64];
struct osmo_bsc_rf *rf;
if (!net) {
cmd->reply = "net not found.";
return CTRL_CMD_ERROR;
}
rf = net->bsc_data->rf_ctrl;
if (!rf) {
cmd->reply = "RF Ctrl is not enabled in the BSC Configuration";
return CTRL_CMD_ERROR;
}
talloc_free(rf->last_rf_lock_ctrl_command);
strftime(now_buf, sizeof(now_buf), TIME_FORMAT_RFC2822, gmtime(&now));
rf->last_rf_lock_ctrl_command =
talloc_asprintf(rf, "rf_locked %u (%s)", locked, now_buf);
osmo_bsc_rf_schedule_lock(rf, locked == 1 ? '0' : '1');
cmd->reply = talloc_asprintf(cmd, "%u", locked);
if (!cmd->reply) {
cmd->reply = "OOM.";
return CTRL_CMD_ERROR;
}
return CTRL_CMD_REPLY;
}
static int verify_net_rf_lock(struct ctrl_cmd *cmd, const char *value, void *data)
{
int locked = atoi(cmd->value);
if ((locked != 0) && (locked != 1))
return 1;
return 0;
}
CTRL_CMD_DEFINE(net_rf_lock, "rf_locked");
/* TRX related commands below here */
CTRL_HELPER_GET_INT(trx_max_power, struct gsm_bts_trx, max_power_red);
@ -388,6 +469,7 @@ int bsc_base_ctrl_cmds_install(void)
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_long_name);
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_apply_config);
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_mcc_mnc_apply);
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_rf_lock);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_lac);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_ci);
@ -396,6 +478,7 @@ int bsc_base_ctrl_cmds_install(void)
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_chan_load);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_oml_conn);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_gprs_mode);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rf_state);
rc |= ctrl_cmd_install(CTRL_NODE_TRX, &cmd_trx_max_power);
rc |= ctrl_cmd_install(CTRL_NODE_TRX, &cmd_trx_arfcn);

View File

@ -36,8 +36,6 @@
#include <time.h>
#include <unistd.h>
#define TIME_FORMAT_RFC2822 "%a, %d %b %Y %T %z"
void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct bsc_msc_connection *msc_con)
{
struct ctrl_cmd *trap;
@ -475,84 +473,6 @@ err:
return 1;
}
CTRL_CMD_DEFINE_RO(bts_rf_state, "rf_state");
static int get_bts_rf_state(struct ctrl_cmd *cmd, void *data)
{
const char *oper, *admin, *policy;
struct gsm_bts *bts = cmd->node;
if (!bts) {
cmd->reply = "bts not found.";
return CTRL_CMD_ERROR;
}
oper = osmo_bsc_rf_get_opstate_name(osmo_bsc_rf_get_opstate_by_bts(bts));
admin = osmo_bsc_rf_get_adminstate_name(osmo_bsc_rf_get_adminstate_by_bts(bts));
policy = osmo_bsc_rf_get_policy_name(osmo_bsc_rf_get_policy_by_bts(bts));
cmd->reply = talloc_asprintf(cmd, "%s,%s,%s", oper, admin, policy);
if (!cmd->reply) {
cmd->reply = "OOM.";
return CTRL_CMD_ERROR;
}
return CTRL_CMD_REPLY;
}
CTRL_CMD_DEFINE(net_rf_lock, "rf_locked");
static int get_net_rf_lock(struct ctrl_cmd *cmd, void *data)
{
cmd->reply = "get only works for the individual trx properties.";
return CTRL_CMD_ERROR;
}
static int set_net_rf_lock(struct ctrl_cmd *cmd, void *data)
{
int locked = atoi(cmd->value);
struct gsm_network *net = cmd->node;
time_t now = time(NULL);
char now_buf[64];
struct osmo_bsc_rf *rf;
if (!net) {
cmd->reply = "net not found.";
return CTRL_CMD_ERROR;
}
rf = net->bsc_data->rf_ctrl;
if (!rf) {
cmd->reply = "RF Ctrl is not enabled in the BSC Configuration";
return CTRL_CMD_ERROR;
}
talloc_free(rf->last_rf_lock_ctrl_command);
strftime(now_buf, sizeof(now_buf), TIME_FORMAT_RFC2822, gmtime(&now));
rf->last_rf_lock_ctrl_command =
talloc_asprintf(rf, "rf_locked %u (%s)", locked, now_buf);
osmo_bsc_rf_schedule_lock(rf, locked == 1 ? '0' : '1');
cmd->reply = talloc_asprintf(cmd, "%u", locked);
if (!cmd->reply) {
cmd->reply = "OOM.";
return CTRL_CMD_ERROR;
}
return CTRL_CMD_REPLY;
}
static int verify_net_rf_lock(struct ctrl_cmd *cmd, const char *value, void *data)
{
int locked = atoi(cmd->value);
if ((locked != 0) && (locked != 1))
return 1;
return 0;
}
CTRL_CMD_DEFINE(net_notification, "notification");
static int get_net_notification(struct ctrl_cmd *cmd, void *data)
{
@ -730,18 +650,12 @@ int bsc_ctrl_cmds_install(struct gsm_network *net)
int rc;
rc = bsc_base_ctrl_cmds_install();
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_rf_state);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_loc);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_timezone);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_rf_lock);
if (rc)
goto end;
rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_msc_connection_status);