aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2011-08-16 20:10:40 +0200
committerDaniel Willmann <daniel@totalueberwachung.de>2011-11-04 12:27:12 +0100
commit8088c8873277cc2704ef622d1616d9a288fc3dd4 (patch)
tree4e53d0cc244295e71c8e1d7cf7cb6cb7be0ad4e6
parentbff0d571fdccdb90745d8bf5773457c153e021d9 (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.c39
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;
}