aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2011-07-22 18:09:11 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2012-09-11 14:43:27 +0200
commitadcde9f8f55d753e46db16e415d28da749fff083 (patch)
tree3e0f7db9452ad69ba014e5b520f8706c66f5a681 /openbsc
parent47824541f04134e308e0bb5c0ab25e8f53037c39 (diff)
osmo-bsc: Add support for traps to the location command
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/osmo-bsc/osmo_bsc_main.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_main.c b/openbsc/src/osmo-bsc/osmo_bsc_main.c
index 778395c19..7a47fbcb7 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_main.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_main.c
@@ -175,6 +175,27 @@ static void signal_handler(int signal)
}
}
+void osmo_bsc_send_trap(struct ctrl_cmd *cmd, struct bsc_msc_connection *msc_con)
+{
+ struct ctrl_cmd *trap;
+ struct ctrl_handle *ctrl;
+ struct osmo_msc_data *msc_data;
+
+ msc_data = (struct osmo_msc_data *) msc_con->write_queue.bfd.data;
+ ctrl = msc_data->network->ctrl;
+
+ trap = ctrl_cmd_trap(cmd);
+ if (!trap) {
+ LOGP(DCTRL, LOGL_ERROR, "Failed to create trap.\n");
+ return;
+ }
+
+ ctrl_cmd_send_to_all(ctrl, trap);
+ ctrl_cmd_send(&msc_con->write_queue, trap);
+
+ talloc_free(trap);
+}
+
struct location {
struct llist_head list;
unsigned long age;
@@ -238,7 +259,10 @@ static int get_net_loc(struct ctrl_cmd *cmd, void *data)
static int set_net_loc(struct ctrl_cmd *cmd, void *data)
{
char *saveptr, *lat, *lon, *height, *age, *valid, *tmp;
+ struct osmo_msc_data *msc;
struct location *myloc;
+ int ret;
+ struct gsm_network *gsmnet = (struct gsm_network *)data;
tmp = talloc_strdup(cmd, cmd->value);
if (!tmp)
@@ -269,7 +293,13 @@ static int set_net_loc(struct ctrl_cmd *cmd, void *data)
llist_add(&myloc->list, &locations);
cleanup_locations();
- return get_net_loc(cmd, data);
+ ret = get_net_loc(cmd, data);
+
+ llist_for_each_entry(msc, &gsmnet->bsc_data->mscs, entry)
+ osmo_bsc_send_trap(cmd, msc->msc_con);
+
+ return ret;
+
oom:
cmd->reply = "OOM";
return CTRL_CMD_ERROR;