From 55a954bba14f1625d3bb0ca80bdb501998c06309 Mon Sep 17 00:00:00 2001 From: Stefan Sperling Date: Wed, 3 Jan 2018 16:59:44 +0100 Subject: Support control connection status query for a particular MSC. Add a new control command 'msc.N.connection_status' which can be used to query the connection status of a particular MSC with number N. Keep the old control command 'msc_connection_status', which always queries MSC 0, for backwards compatibility. Change-Id: Ibd41474a1be80e782b19ec337c856b5efc593fa8 Related: OS#2729 --- src/osmo-bsc/osmo_bsc_ctrl.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'src/osmo-bsc') diff --git a/src/osmo-bsc/osmo_bsc_ctrl.c b/src/osmo-bsc/osmo_bsc_ctrl.c index 4460288e6..fc7908656 100644 --- a/src/osmo-bsc/osmo_bsc_ctrl.c +++ b/src/osmo-bsc/osmo_bsc_ctrl.c @@ -19,6 +19,7 @@ */ #include +#include #include #include #include @@ -57,10 +58,27 @@ void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct bsc_msc_connection *msc_con talloc_free(trap); } -CTRL_CMD_DEFINE_RO(msc_connection_status, "msc_connection_status"); -static int msc_connection_status = 0; - +CTRL_CMD_DEFINE_RO(msc_connection_status, "connection_status"); static int get_msc_connection_status(struct ctrl_cmd *cmd, void *data) +{ + struct bsc_msc_data *msc = (struct bsc_msc_data *)cmd->node; + if (msc == NULL) { + cmd->reply = "msc not found"; + return CTRL_CMD_ERROR; + } + + if (msc->msc_con->is_connected) + cmd->reply = "connected"; + else + cmd->reply = "disconnected"; + return CTRL_CMD_REPLY; +} + +/* Backwards compat. */ +CTRL_CMD_DEFINE_RO(msc0_connection_status, "msc_connection_status"); +static int msc_connection_status = 0; /* XXX unused */ + +static int get_msc0_connection_status(struct ctrl_cmd *cmd, void *data) { struct gsm_network *gsmnet = data; struct bsc_msc_data *msc = osmo_msc_data_find(gsmnet, 0); @@ -96,7 +114,7 @@ static int msc_connection_status_trap_cb(unsigned int subsys, unsigned int signa cmd->id = "0"; cmd->variable = "msc_connection_status"; - get_msc_connection_status(cmd, NULL); + get_msc0_connection_status(cmd, NULL); ctrl_cmd_send_to_all(gsmnet->ctrl, cmd); @@ -627,7 +645,10 @@ int bsc_ctrl_cmds_install(struct gsm_network *net) rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_timezone); if (rc) goto end; - rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_msc_connection_status); + rc = ctrl_cmd_install(CTRL_NODE_MSC, &cmd_msc_connection_status); + if (rc) + goto end; + rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_msc0_connection_status); if (rc) goto end; rc = osmo_signal_register_handler(SS_MSC, &msc_connection_status_trap_cb, net); -- cgit v1.2.3