From 3e6eb68e44fb61e0013d805412550cb0b5a4b275 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 16 Aug 2011 20:10:40 +0200 Subject: bsc: Send a TRAP with the locations on a MSC connection Send the current position when the MSC connection is established. --- openbsc/src/osmo-bsc/osmo_bsc_ctrl.c | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) (limited to 'openbsc/src') diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c index b456be0e2..2815a3bf0 100644 --- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c +++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c @@ -1,4 +1,5 @@ /* (C) 2011 by Daniel Willmann + * (C) 2011 by Holger Hans Peter Freyther * (C) 2011 by On-Waves * All Rights Reserved * @@ -422,6 +423,42 @@ static int verify_net_rf_lock(struct ctrl_cmd *cmd, const char *value, void *dat return 0; } +static int msc_signal_handler(unsigned int subsys, unsigned int signal, + void *handler_data, void *signal_data) +{ + struct ctrl_cmd *cmd; + struct msc_signal_data *msc; + struct gsm_network *net; + struct gsm_bts *bts; + char *loc_fmt = "net.bts.%i.location"; + + if (subsys != SS_MSC) + return 0; + if (signal != S_MSC_AUTHENTICATED) + return 0; + + msc = signal_data; + cmd = ctrl_cmd_create(msc->data, CTRL_TYPE_TRAP); + if (!cmd) { + LOGP(DCTRL, LOGL_ERROR, "Failed to create TRAP for location.\n"); + return 0; + } + + cmd->id = "0"; + + net = msc->data->network; + llist_for_each_entry(bts, &net->bts_list, list) { + cmd->node = bts; + cmd->variable = talloc_asprintf(cmd, loc_fmt, bts->nr); + get_bts_loc(cmd, NULL); + osmo_bsc_send_trap(cmd, msc->data->msc_con); + talloc_free(cmd->variable); + } + + talloc_free(cmd); + return 0; +} + int bsc_ctrl_cmds_install(struct gsm_network *net) { int rc; @@ -436,12 +473,16 @@ int bsc_ctrl_cmds_install(struct gsm_network *net) if (rc) goto end; rc = osmo_signal_register_handler(SS_MSC, &msc_connection_status_trap_cb, net); + if (rc) + goto end; + rc = osmo_signal_register_handler(SS_MSC, msc_signal_handler, NULL); if (rc) goto end; rc = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_bts_connection_status); if (rc) goto end; rc = osmo_signal_register_handler(SS_INPUT, &bts_connection_status_trap_cb, net); + end: return rc; } -- cgit v1.2.3