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

libcommon: eliminate common_vty.c

Move bsc_vty_go_parent() to osmo_bsc_main.c, and greatly simplify. Since
I24cbb3f6de111f2d31110c3c484c066f1153aac9 ("VTY: implicit node exit by
de-indenting, not parent lookup") in libosmocore, the go_parent_cb no longer
needs to provide the proper transition to the parent. The VTY API now actually
remembers which is the current node's parent, as well as what its index pointer
was (i.e. no need to recover the index pointer by a switch on the node id
anymore). The only code worth keeping in the go_parent_cb is the talloc_free()
to free the OML_NODE and OM2K_NODE context when leaving it.

In bsc_nat.c, provide an essentially empty go_parent_cb: after abovementioned
commit, there still needs to be *some* go_parent_cb defined for the generic
node exit to work, even if it doesn't do anything (might be fixed later).

Change-Id: I22ebb76742e9c5ab9dd608ac089a5c558aceeb36
---
M include/osmocom/bsc/vty.h
M src/libcommon/Makefile.am
D src/libcommon/common_vty.c
M src/osmo-bsc/osmo_bsc_main.c
M src/osmo-bsc_nat/bsc_nat.c
5 files changed, 54 insertions(+), 157 deletions(-)


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

diff --git a/include/osmocom/bsc/vty.h b/include/osmocom/bsc/vty.h
index f705601..daf9750 100644
--- a/include/osmocom/bsc/vty.h
+++ b/include/osmocom/bsc/vty.h
@@ -41,8 +41,6 @@
        HLR_NODE,
 };
 
-extern int bsc_vty_is_config_node(struct vty *vty, int node);
-
 struct log_info;
 int bsc_vty_init(struct gsm_network *network);
 int bsc_vty_init_extra(void);
diff --git a/src/libcommon/Makefile.am b/src/libcommon/Makefile.am
index af578a2..1a73e6c 100644
--- a/src/libcommon/Makefile.am
+++ b/src/libcommon/Makefile.am
@@ -20,7 +20,6 @@
        $(NULL)
 
 libcommon_a_SOURCES = \
-       common_vty.c \
        debug.c \
        gsm_data.c \
        gsm_data_shared.c \
diff --git a/src/libcommon/common_vty.c b/src/libcommon/common_vty.c
deleted file mode 100644
index 82327d1..0000000
--- a/src/libcommon/common_vty.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/* OpenBSC VTY common helpers */
-/* (C) 2009-2010 by Harald Welte <lafo...@gnumonks.org>
- * (C) 2009-2010 by Holger Hans Peter Freyther
- * All Rights Reserved
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include <osmocom/core/talloc.h>
-
-#include <osmocom/bsc/vty.h>
-#include <osmocom/bsc/gsm_data.h>
-#include <osmocom/bsc/debug.h>
-#include <osmocom/bsc/bsc_nat.h>
-#include <osmocom/bsc/abis_om2000.h>
-
-#include <osmocom/vty/telnet_interface.h>
-#include <osmocom/vty/command.h>
-#include <osmocom/vty/buffer.h>
-#include <osmocom/vty/vty.h>
-#include <osmocom/sigtran/osmo_ss7.h>
-
-
-int bsc_vty_go_parent(struct vty *vty)
-{
-       switch (vty->node) {
-       case GSMNET_NODE:
-               vty->node = CONFIG_NODE;
-               vty->index = NULL;
-               break;
-       case BTS_NODE:
-               vty->node = GSMNET_NODE;
-               {
-                       /* set vty->index correctly ! */
-                       struct gsm_bts *bts = vty->index;
-                       vty->index = bts->network;
-                       vty->index_sub = NULL;
-               }
-               break;
-       case TRX_NODE:
-               vty->node = BTS_NODE;
-               {
-                       /* set vty->index correctly ! */
-                       struct gsm_bts_trx *trx = vty->index;
-                       vty->index = trx->bts;
-                       vty->index_sub = &trx->bts->description;
-               }
-               break;
-       case TS_NODE:
-               vty->node = TRX_NODE;
-               {
-                       /* set vty->index correctly ! */
-                       struct gsm_bts_trx_ts *ts = vty->index;
-                       vty->index = ts->trx;
-                       vty->index_sub = &ts->trx->description;
-               }
-               break;
-       case OML_NODE:
-       case OM2K_NODE:
-               vty->node = ENABLE_NODE;
-               /* NOTE: this only works because it's not part of the config
-                * tree, where outer commands are searched via vty_go_parent()
-                * and only (!) executed when a matching one is found.
-                */
-               talloc_free(vty->index);
-               vty->index = NULL;
-               break;
-       case OM2K_CON_GROUP_NODE:
-               vty->node = BTS_NODE;
-               {
-                       struct con_group *cg = vty->index;
-                       struct gsm_bts *bts = cg->bts;
-                       vty->index = bts;
-                       vty->index_sub = &bts->description;
-               }
-               break;
-       case NAT_BSC_NODE:
-               vty->node = NAT_NODE;
-               {
-                       struct bsc_config *bsc_config = vty->index;
-                       vty->index = bsc_config->nat;
-               }
-               break;
-       case PGROUP_NODE:
-               vty->node = NAT_NODE;
-               vty->index = NULL;
-               break;
-       case TRUNK_NODE:
-               vty->node = MGCP_NODE;
-               vty->index = NULL;
-               break;
-       case SMPP_ESME_NODE:
-               vty->node = SMPP_NODE;
-               vty->index = NULL;
-               break;
-       case SMPP_NODE:
-       case MGCP_NODE:
-       case GBPROXY_NODE:
-       case SGSN_NODE:
-       case NAT_NODE:
-       case BSC_NODE:
-       case MSC_NODE:
-       case MNCC_INT_NODE:
-       case NITB_NODE:
-               vty->node = CONFIG_NODE;
-               vty->index = NULL;
-               break;
-       case SUBSCR_NODE:
-               vty->node = ENABLE_NODE;
-               vty->index = NULL;
-               break;
-       default:
-               osmo_ss7_vty_go_parent(vty);
-       }
-
-       return vty->node;
-}
-
-int bsc_vty_is_config_node(struct vty *vty, int node)
-{
-       /* Check if libosmo-sccp declares the node in
-        * question as config node */
-       if (osmo_ss7_is_config_node(vty, node))
-               return 1;
-
-       switch (node) {
-       /* add items that are not config */
-       case OML_NODE:
-       case OM2K_NODE:
-       case SUBSCR_NODE:
-       case CONFIG_NODE:
-               return 0;
-
-       default:
-               return 1;
-       }
-}
diff --git a/src/osmo-bsc/osmo_bsc_main.c b/src/osmo-bsc/osmo_bsc_main.c
index 626f257..70d4b87 100644
--- a/src/osmo-bsc/osmo_bsc_main.c
+++ b/src/osmo-bsc/osmo_bsc_main.c
@@ -146,7 +146,39 @@
        }
 }
 
-extern int bsc_vty_go_parent(struct vty *vty);
+static int bsc_vty_go_parent(struct vty *vty)
+{
+       switch (vty->node) {
+       case OML_NODE:
+       case OM2K_NODE:
+               talloc_free(vty->index);
+               break;
+       default:
+               osmo_ss7_vty_go_parent(vty);
+       }
+
+       return vty->node;
+}
+
+static int bsc_vty_is_config_node(struct vty *vty, int node)
+{
+       /* Check if libosmo-sccp declares the node in
+        * question as config node */
+       if (osmo_ss7_is_config_node(vty, node))
+               return 1;
+
+       switch (node) {
+       /* add items that are not config */
+       case OML_NODE:
+       case OM2K_NODE:
+       case SUBSCR_NODE:
+       case CONFIG_NODE:
+               return 0;
+
+       default:
+               return 1;
+       }
+}
 
 static struct vty_app_info vty_info = {
        .name           = "OsmoBSC",
diff --git a/src/osmo-bsc_nat/bsc_nat.c b/src/osmo-bsc_nat/bsc_nat.c
index 411ec83..eefb5d6 100644
--- a/src/osmo-bsc_nat/bsc_nat.c
+++ b/src/osmo-bsc_nat/bsc_nat.c
@@ -1574,7 +1574,27 @@
        tall_ctr_ctx = talloc_named_const(tall_bsc_ctx, 0, "counter");
 }
 
-extern int bsc_vty_go_parent(struct vty *vty);
+static int bsc_vty_go_parent(struct vty *vty)
+{
+       return vty->node;
+}
+
+static int bsc_vty_is_config_node(struct vty *vty, int node)
+{
+       /* Check if libosmo-sccp declares the node in
+        * question as config node */
+       if (osmo_ss7_is_config_node(vty, node))
+               return 1;
+
+       switch (node) {
+       /* add items that are not config */
+       case CONFIG_NODE:
+               return 0;
+
+       default:
+               return 1;
+       }
+}
 
 static struct vty_app_info vty_info = {
        .name           = "OsmoBSCNAT",

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I22ebb76742e9c5ab9dd608ac089a5c558aceeb36
Gerrit-PatchSet: 1
Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Owner: Neels Hofmeyr <nhofm...@sysmocom.de>

Reply via email to