aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorIvan Kluchnikov <kluchnikovi@gmail.com>2014-04-14 14:45:16 +0400
committerIvan Kluchnikov <kluchnikovi@gmail.com>2014-05-06 15:40:30 +0400
commit68be1aa3d637e5870cb1ea06ef47b5fb4774e063 (patch)
tree55ebe0ae69b7536599d9ea21b5c40756ae919c74 /openbsc/src
parente9ae4559ca7c4d0914050cdada279d7afa04deb4 (diff)
nitb: Add ctrl commands to get paging counters, state of oml link and SMS queue status
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/libbsc/bsc_ctrl_commands.c87
-rw-r--r--openbsc/src/libmsc/sms_queue.c12
2 files changed, 99 insertions, 0 deletions
diff --git a/openbsc/src/libbsc/bsc_ctrl_commands.c b/openbsc/src/libbsc/bsc_ctrl_commands.c
index e55dd82ae..aecd6cf5c 100644
--- a/openbsc/src/libbsc/bsc_ctrl_commands.c
+++ b/openbsc/src/libbsc/bsc_ctrl_commands.c
@@ -24,6 +24,7 @@
#include <openbsc/gsm_data.h>
#include <openbsc/abis_nm.h>
#include <openbsc/chan_alloc.h>
+#include <openbsc/sms_queue.h>
#include <openbsc/debug.h>
#define CTRL_CMD_VTY_STRING(cmdname, cmdstr, dtype, element) \
@@ -376,6 +377,89 @@ static int get_net_lchan(struct ctrl_cmd *cmd, void *data)
CTRL_CMD_DEFINE(net_lchan, "lchan");
+CTRL_HELPER_VERIFY_STATUS(net_paging);
+CTRL_HELPER_SET_STATUS(net_paging);
+
+static int get_net_paging(struct ctrl_cmd *cmd, void *data)
+{
+ struct gsm_network *net = cmd->node;
+ struct gsm_bts *bts;
+ int bts_nr;
+
+ if (!strcmp(cmd->variable,"paging"))
+ cmd->reply = talloc_strdup(cmd, "\n");
+
+ for (bts_nr = 0; bts_nr < net->num_bts; bts_nr++) {
+ bts = gsm_bts_num(net, bts_nr);
+ cmd->reply = talloc_asprintf_append(cmd->reply,
+ "paging.pending_requests.bts.%u,%u\n", bts_nr,
+ paging_pending_requests_nr(bts));
+ cmd->reply = talloc_asprintf_append(cmd->reply,
+ "paging.available_slots.bts.%u,%u\n", bts_nr,
+ bts->paging.available_slots);
+ }
+
+ if (!cmd->reply) {
+ cmd->reply = "OOM";
+ return CTRL_CMD_ERROR;
+ }
+
+ return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE(net_paging, "paging");
+
+
+CTRL_HELPER_VERIFY_STATUS(net_oml_link);
+CTRL_HELPER_SET_STATUS(net_oml_link);
+
+static int get_net_oml_link(struct ctrl_cmd *cmd, void *data)
+{
+ struct gsm_network *net = cmd->node;
+ struct gsm_bts *bts;
+ int bts_nr;
+
+ if (!strcmp(cmd->variable,"oml_link"))
+ cmd->reply = talloc_strdup(cmd, "\n");
+
+ for (bts_nr = 0; bts_nr < net->num_bts; bts_nr++) {
+ bts = gsm_bts_num(net, bts_nr);
+ cmd->reply = talloc_asprintf_append(cmd->reply,
+ "oml_link.bts.%u,%u\n", bts_nr, bts->oml_link ? 1 : 0);
+ }
+
+ if (!cmd->reply) {
+ cmd->reply = "OOM";
+ return CTRL_CMD_ERROR;
+ }
+
+ return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE(net_oml_link, "oml_link");
+
+CTRL_HELPER_VERIFY_STATUS(net_smsqueue);
+CTRL_HELPER_SET_STATUS(net_smsqueue);
+
+static int get_net_smsqueue(struct ctrl_cmd *cmd, void *data)
+{
+ struct gsm_network *net = cmd->node;
+
+ if (!strcmp(cmd->variable,"smsqueue"))
+ cmd->reply = talloc_strdup(cmd, "\n");
+
+ sms_queue_pending_stat(net, cmd);
+
+ if (!cmd->reply) {
+ cmd->reply = "OOM";
+ return CTRL_CMD_ERROR;
+ }
+
+ return CTRL_CMD_REPLY;
+}
+
+CTRL_CMD_DEFINE(net_smsqueue, "smsqueue");
+
/* BTS related commands below here */
static int verify_bts_band(struct ctrl_cmd *cmd, const char *value, void *data)
{
@@ -460,6 +544,9 @@ int bsc_base_ctrl_cmds_install(void)
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_mcc_mnc_apply);
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_channels_load);
rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_lchan);
+ rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_paging);
+ rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_oml_link);
+ rc |= ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_net_smsqueue);
rc |= ctrl_cmd_install(CTRL_NODE_BTS, &cmd_bts_band);
diff --git a/openbsc/src/libmsc/sms_queue.c b/openbsc/src/libmsc/sms_queue.c
index 536bfdd14..e63870146 100644
--- a/openbsc/src/libmsc/sms_queue.c
+++ b/openbsc/src/libmsc/sms_queue.c
@@ -40,6 +40,7 @@
#include <osmocom/core/talloc.h>
#include <osmocom/vty/vty.h>
+#include <openbsc/control_cmd.h>
/*
* One pending SMS that we wait for.
@@ -493,6 +494,17 @@ static int sms_sms_cb(unsigned int subsys, unsigned int signal,
return 0;
}
+/* Ctrl interface helper function */
+int sms_queue_pending_stat(struct gsm_network *net, struct ctrl_cmd *cmd)
+{
+ cmd->reply = talloc_asprintf_append(cmd->reply, "smsqueue.max_pending,%u\n",
+ net->sms_queue->max_pending);
+ cmd->reply = talloc_asprintf_append(cmd->reply, "smsqueue.pending,%u\n",
+ net->sms_queue->pending);
+
+ return 0;
+}
+
/* VTY helper functions */
int sms_queue_stats(struct gsm_sms_queue *smsq, struct vty *vty)
{