summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2016-05-11 18:48:39 +0200
committerHarald Welte <laforge@gnumonks.org>2016-12-02 12:09:16 +0000
commitb90eabfb46aaf5efcc3b5f16fe89b914db4542ea (patch)
tree560bc4da553e66e0c02d5a9e882ea9e7e052ec74
parent2c05f75bbf3d9a69eee1fe78eb5552acf1d7671d (diff)
move to libcommon-cs: global vty gsm_network pointer
Move gsmnet_from_vty() and the bsc_gsmnet global to common_cs_vty.c. Rename bsc_gsmnet to vty_global_gsm_network and make it static to common_cs_vty.c, to clearly mark the global variable for VTY use only. Introduce common_cs_vty_init() to set vty_global_gsm_network. Change-Id: I26c5c47de08f899b896813d09612d5cb2f8e42d6
-rw-r--r--openbsc/include/openbsc/common_cs.h5
-rw-r--r--openbsc/src/libbsc/bsc_vty.c20
-rw-r--r--openbsc/src/libcommon-cs/common_cs_vty.c24
3 files changed, 32 insertions, 17 deletions
diff --git a/openbsc/include/openbsc/common_cs.h b/openbsc/include/openbsc/common_cs.h
index 172d6e621..caecfebf6 100644
--- a/openbsc/include/openbsc/common_cs.h
+++ b/openbsc/include/openbsc/common_cs.h
@@ -7,6 +7,8 @@ struct gsm_network;
typedef int (*mncc_recv_cb_t)(struct gsm_network *, struct msgb *);
+struct vty;
+
#define MAX_A5_KEY_LEN (128/8)
struct gsm_encr {
@@ -19,3 +21,6 @@ struct gsm_network *gsm_network_init(void *ctx,
uint16_t country_code,
uint16_t network_code,
mncc_recv_cb_t mncc_recv);
+
+int common_cs_vty_init(struct gsm_network *network);
+struct gsm_network *gsmnet_from_vty(struct vty *v);
diff --git a/openbsc/src/libbsc/bsc_vty.c b/openbsc/src/libbsc/bsc_vty.c
index 9ed19aa1f..c8aa43c94 100644
--- a/openbsc/src/libbsc/bsc_vty.c
+++ b/openbsc/src/libbsc/bsc_vty.c
@@ -131,21 +131,6 @@ struct cmd_node ts_node = {
1,
};
-extern struct gsm_network *bsc_gsmnet;
-
-struct gsm_network *gsmnet_from_vty(struct vty *v)
-{
- /* In case we read from the config file, the vty->priv cannot
- * point to a struct telnet_connection, and thus conn->priv
- * will not point to the gsm_network structure */
-#if 0
- struct telnet_connection *conn = v->priv;
- return (struct gsm_network *) conn->priv;
-#else
- return bsc_gsmnet;
-#endif
-}
-
static int dummy_config_write(struct vty *v)
{
return CMD_SUCCESS;
@@ -3989,7 +3974,7 @@ DEFUN(smscb_cmd, smscb_cmd_cmd,
uint8_t buf[88];
int rc;
- bts = gsm_bts_num(bsc_gsmnet, bts_nr);
+ bts = gsm_bts_num(gsmnet_from_vty(vty), bts_nr);
if (!bts) {
vty_out(vty, "%% No such BTS (%d)%s", bts_nr, VTY_NEWLINE);
return CMD_WARNING;
@@ -4040,7 +4025,7 @@ DEFUN(pdch_act, pdch_act_cmd,
int ts_nr = atoi(argv[2]);
int activate;
- bts = gsm_bts_num(bsc_gsmnet, bts_nr);
+ bts = gsm_bts_num(gsmnet_from_vty(vty), bts_nr);
if (!bts) {
vty_out(vty, "%% No such BTS (%d)%s", bts_nr, VTY_NEWLINE);
return CMD_WARNING;
@@ -4102,6 +4087,7 @@ int bsc_vty_init(const struct log_info *cat, struct gsm_network *network)
"BTS Vendor/Type\n",
"\n", "", 0);
+ common_cs_vty_init(network);
install_element_ve(&show_net_cmd);
install_element_ve(&show_bts_cmd);
diff --git a/openbsc/src/libcommon-cs/common_cs_vty.c b/openbsc/src/libcommon-cs/common_cs_vty.c
index 99aa0cf76..11ed50f09 100644
--- a/openbsc/src/libcommon-cs/common_cs_vty.c
+++ b/openbsc/src/libcommon-cs/common_cs_vty.c
@@ -1,6 +1,7 @@
/* Code used by both libbsc and libmsc (common_cs means "BSC or MSC").
*
* (C) 2016 by sysmocom s.m.f.c. <info@sysmocom.de>
+ * (C) 2008-2010 by Harald Welte <laforge@gnumonks.org>
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
@@ -17,3 +18,26 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
+
+#include <openbsc/gsm_data.h>
+
+static struct gsm_network *vty_global_gsm_network = NULL;
+
+/* initialize VTY elements used in both BSC and MSC */
+int common_cs_vty_init(struct gsm_network *network)
+{
+ OSMO_ASSERT(vty_global_gsm_network == NULL);
+ vty_global_gsm_network = network;
+}
+
+struct gsm_network *gsmnet_from_vty(struct vty *v)
+{
+ /* It can't hurt to force callers to continue to pass the vty instance
+ * to this function, in case we'd like to retrieve the global
+ * gsm_network instance from the vty at some point in the future. But
+ * until then, just return the global pointer, which should have been
+ * initialized by common_cs_vty_init().
+ */
+ OSMO_ASSERT(vty_global_gsm_network);
+ return vty_global_gsm_network;
+}