[PATCH] osmo-bsc[master]: Support control connection status query for a particular MSC.

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Stefan Sperling gerrit-no-reply at lists.osmocom.org
Wed Jan 3 16:10:26 UTC 2018


Review at  https://gerrit.osmocom.org/5630

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
---
M src/libbsc/bsc_ctrl_lookup.c
M src/osmo-bsc/osmo_bsc_ctrl.c
2 files changed, 53 insertions(+), 7 deletions(-)


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

diff --git a/src/libbsc/bsc_ctrl_lookup.c b/src/libbsc/bsc_ctrl_lookup.c
index d1d9b0a..febf484 100644
--- a/src/libbsc/bsc_ctrl_lookup.c
+++ b/src/libbsc/bsc_ctrl_lookup.c
@@ -1,4 +1,4 @@
-/* SNMP-like status interface. Look-up of BTS/TRX
+/* SNMP-like status interface. Look-up of BTS/TRX/MSC
  *
  * (C) 2010-2011 by Daniel Willmann <daniel at totalueberwachung.de>
  * (C) 2010-2011 by On-Waves
@@ -27,10 +27,11 @@
 #include <osmocom/ctrl/control_if.h>
 #include <osmocom/bsc/debug.h>
 #include <osmocom/bsc/gsm_data.h>
+#include <osmocom/bsc/bsc_msc_data.h>
 
 extern vector ctrl_node_vec;
 
-/*! \brief control interface lookup function for bsc/bts gsm_data
+/*! \brief control interface lookup function for bsc/bts/msc gsm_data
  * \param[in] data Private data passed to controlif_setup()
  * \param[in] vline Vector of the line holding the command string
  * \param[out] node_type type (CTRL_NODE_) that was determined
@@ -44,6 +45,7 @@
 	struct gsm_bts *bts = NULL;
 	struct gsm_bts_trx *trx = NULL;
 	struct gsm_bts_trx_ts *ts = NULL;
+	struct bsc_msc_data *msc = NULL;
 	char *token = vector_slot(vline, *i);
 	long num;
 
@@ -89,6 +91,18 @@
 			goto err_missing;
 		*node_data = ts;
 		*node_type = CTRL_NODE_TS;
+	} else if (!strcmp(token, "msc")) {
+		if (*node_type != CTRL_NODE_ROOT || !net)
+			goto err_missing;
+		(*i)++;
+		if (!ctrl_parse_get_num(vline, *i, &num))
+			goto err_index;
+
+		msc = osmo_msc_data_find(net, num);
+		if (!msc)
+			goto err_missing;
+		*node_data = msc;
+		*node_type = CTRL_NODE_MSC;
 	} else
 		return 0;
 
diff --git a/src/osmo-bsc/osmo_bsc_ctrl.c b/src/osmo-bsc/osmo_bsc_ctrl.c
index 4460288..8228c08 100644
--- a/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -57,10 +57,39 @@
 	talloc_free(trap);
 }
 
-CTRL_CMD_DEFINE_RO(msc_connection_status, "msc_connection_status");
-static int msc_connection_status = 0;
-
+CTRL_CMD_DEFINE(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;
+}
+
+static int set_msc_connection_status(struct ctrl_cmd *cmd, void *data)
+{
+	cmd->reply = "Read Only attribute";
+	return CTRL_CMD_ERROR;
+}
+
+static int verify_msc_connection_status(struct ctrl_cmd *cmd, const char *value, void *data)
+{
+	cmd->reply = "Read Only attribute";
+	return 1;
+}
+
+/* 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 +125,7 @@
 	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 +656,10 @@
 	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);

-- 
To view, visit https://gerrit.osmocom.org/5630
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibd41474a1be80e782b19ec337c856b5efc593fa8
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Stefan Sperling <ssperling at sysmocom.de>



More information about the gerrit-log mailing list