diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2011-08-16 20:10:40 +0200 |
---|---|---|
committer | Daniel Willmann <daniel@totalueberwachung.de> | 2011-11-04 12:27:12 +0100 |
commit | 8088c8873277cc2704ef622d1616d9a288fc3dd4 (patch) | |
tree | 4e53d0cc244295e71c8e1d7cf7cb6cb7be0ad4e6 | |
parent | bff0d571fdccdb90745d8bf5773457c153e021d9 (diff) |
bsc: Send a TRAP with the locations on a MSC connection
Send the current position when the MSC connection is established.
-rw-r--r-- | openbsc/src/osmo-bsc/osmo_bsc_ctrl.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c index b456be0e2..e74f08ebd 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 <daniel@totalueberwachung.de> + * (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; @@ -442,6 +479,8 @@ int bsc_ctrl_cmds_install(struct gsm_network *net) if (rc) goto end; rc = osmo_signal_register_handler(SS_INPUT, &bts_connection_status_trap_cb, net); + + osmo_signal_register_handler(SS_MSC, msc_signal_handler, NULL); end: return rc; } |