From adcde9f8f55d753e46db16e415d28da749fff083 Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Fri, 22 Jul 2011 18:09:11 +0200 Subject: osmo-bsc: Add support for traps to the location command --- openbsc/src/osmo-bsc/osmo_bsc_main.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'openbsc/src/osmo-bsc/osmo_bsc_main.c') 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; -- cgit v1.2.3