aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/include/openbsc/osmo_bsc.h2
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_ctrl.c13
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_vty.c29
3 files changed, 38 insertions, 6 deletions
diff --git a/openbsc/include/openbsc/osmo_bsc.h b/openbsc/include/openbsc/osmo_bsc.h
index 1032daa69..7e931c8d9 100644
--- a/openbsc/include/openbsc/osmo_bsc.h
+++ b/openbsc/include/openbsc/osmo_bsc.h
@@ -55,4 +55,6 @@ int bsc_handle_dt1(struct osmo_bsc_sccp_con *conn, struct msgb *msg, unsigned in
int bsc_ctrl_cmds_install();
+void bsc_gen_location_state_trap(struct gsm_bts *bts);
+
#endif
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
index fd6afee78..1d0e2aa01 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -214,6 +214,14 @@ static void generate_location_state_trap(struct gsm_bts *bts, struct bsc_msc_con
talloc_free(cmd);
}
+void bsc_gen_location_state_trap(struct gsm_bts *bts)
+{
+ struct osmo_msc_data *msc;
+
+ llist_for_each_entry(msc, &bts->network->bsc_data->mscs, entry)
+ generate_location_state_trap(bts, msc->msc_con);
+}
+
static int location_equal(struct bts_location *a, struct bts_location *b)
{
return ((a->tstamp == b->tstamp) && (a->valid == b->valid) && (a->lat == b->lat) &&
@@ -279,10 +287,8 @@ static int get_bts_loc(struct ctrl_cmd *cmd, void *data)
static int set_bts_loc(struct ctrl_cmd *cmd, void *data)
{
char *saveptr, *lat, *lon, *height, *tstamp, *valid, *tmp;
- struct osmo_msc_data *msc;
struct bts_location *curloc, *lastloc;
int ret;
- struct gsm_network *gsmnet = (struct gsm_network *)data;
struct gsm_bts *bts = (struct gsm_bts *) cmd->node;
if (!bts) {
cmd->reply = "bts not found.";
@@ -322,8 +328,7 @@ static int set_bts_loc(struct ctrl_cmd *cmd, void *data)
ret = get_bts_loc(cmd, data);
if (!location_equal(curloc, lastloc))
- llist_for_each_entry(msc, &gsmnet->bsc_data->mscs, entry)
- generate_location_state_trap(bts, msc->msc_con);
+ bsc_gen_location_state_trap(bts);
cleanup_locations(&bts->loc_list);
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_vty.c b/openbsc/src/osmo-bsc/osmo_bsc_vty.c
index 4fac8ea56..94a92f1ce 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_vty.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_vty.c
@@ -1,6 +1,6 @@
/* Osmo BSC VTY Configuration */
-/* (C) 2009-2011 by Holger Hans Peter Freyther
- * (C) 2009-2011 by On-Waves
+/* (C) 2009-2014 by Holger Hans Peter Freyther
+ * (C) 2009-2014 by On-Waves
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
@@ -19,6 +19,7 @@
*/
#include <openbsc/gsm_data.h>
+#include <openbsc/osmo_bsc.h>
#include <openbsc/osmo_msc_data.h>
#include <openbsc/vty.h>
@@ -670,6 +671,28 @@ DEFUN(show_pos,
return CMD_SUCCESS;
}
+DEFUN(gen_position_trap,
+ gen_position_trap_cmd,
+ "generate-location-state-trap <0-255>",
+ "Generate location state report\n"
+ "BTS to report\n")
+{
+ int bts_nr;
+ struct gsm_bts *bts;
+ struct gsm_network *net = bsc_gsmnet;
+
+ bts_nr = atoi(argv[0]);
+ if (bts_nr >= net->num_bts) {
+ vty_out(vty, "%% can't find BTS '%s'%s", argv[0],
+ VTY_NEWLINE);
+ return CMD_WARNING;
+ }
+
+ bts = gsm_bts_num(net, bts_nr);
+ bsc_gen_location_state_trap(bts);
+ return CMD_SUCCESS;
+}
+
int bsc_vty_init_extra(void)
{
install_element(CONFIG_NODE, &cfg_net_msc_cmd);
@@ -718,5 +741,7 @@ int bsc_vty_init_extra(void)
install_element_ve(&show_mscs_cmd);
install_element_ve(&show_pos_cmd);
+ install_element(ENABLE_NODE, &gen_position_trap_cmd);
+
return 0;
}