diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-05-16 20:52:23 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-05-16 20:52:23 +0200 |
commit | dcccb1818da12041d08469ce2ab2ccd191187100 (patch) | |
tree | f2bb70dd3b130e8afa4c8c4c2a8e7689867843ec /openbsc/src/bsc_init.c | |
parent | 88907a2f92523c56bf5250c3c75230601eb2f604 (diff) |
VTY: decouple telnet_interface from 'struct gsmnet'
We want the VTY and telnet code to be independent from the BSC
application(s). As a side note, we also like to eliminate static
global variables for 'struct gsm_network' all over the code.
As such, telnet_init() is now passed along a "private" pointer,
which getst stored in telnet_connection.priv. This telnet_connection
is then stored in vty->priv, which in turn gets dereferenced if
anyone needs a reference to 'struct gsm_network' from the BSC vty
code.
Also:
* vty_init() now calls cmd_init()
* the ugliness that telnet_init() calls back into the application by means of
bsc_vty_init() function has been removed.
* telnet_init() now returns any errors, so the main program can exit
e.g. if the port is already in use.
Diffstat (limited to 'openbsc/src/bsc_init.c')
-rw-r--r-- | openbsc/src/bsc_init.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/openbsc/src/bsc_init.c b/openbsc/src/bsc_init.c index 77446a2c1..7db4d3137 100644 --- a/openbsc/src/bsc_init.c +++ b/openbsc/src/bsc_init.c @@ -1,6 +1,6 @@ /* A hackish minimal BSC (+MSC +HLR) implementation */ -/* (C) 2008-2009 by Harald Welte <laforge@gnumonks.org> +/* (C) 2008-2010 by Harald Welte <laforge@gnumonks.org> * (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org> * All Rights Reserved * @@ -1062,6 +1062,7 @@ static int bootstrap_bts(struct gsm_bts *bts) int bsc_bootstrap_network(int (*mncc_recv)(struct gsm_network *, int, void *), const char *config_file) { + struct telnet_connection dummy_conn; struct gsm_bts *bts; int rc; @@ -1073,13 +1074,18 @@ int bsc_bootstrap_network(int (*mncc_recv)(struct gsm_network *, int, void *), bsc_gsmnet->name_long = talloc_strdup(bsc_gsmnet, "OpenBSC"); bsc_gsmnet->name_short = talloc_strdup(bsc_gsmnet, "OpenBSC"); - telnet_init(bsc_gsmnet, 4242); - rc = vty_read_config_file(config_file); + /* our vty command code expects vty->priv to point to a telnet_connection */ + dummy_conn.priv = bsc_gsmnet; + rc = vty_read_config_file(config_file, &dummy_conn); if (rc < 0) { LOGP(DNM, LOGL_FATAL, "Failed to parse the config file: '%s'\n", config_file); return rc; } + rc = telnet_init(tall_bsc_ctx, bsc_gsmnet, 4242); + if (rc < 0) + return rc; + register_signal_handler(SS_NM, nm_sig_cb, NULL); llist_for_each_entry(bts, &bsc_gsmnet->bts_list, list) { |