osmo-bsc: Prepare to send more than just the location in the TRAP
diff --git a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
index 9782126..a241f7e 100644
--- a/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
+++ b/openbsc/src/osmo-bsc/osmo_bsc_ctrl.c
@@ -53,6 +53,29 @@
 	talloc_free(trap);
 }
 
+static int get_bts_loc(struct ctrl_cmd *cmd, void *data);
+
+static void generate_location_state_trap(struct gsm_bts *bts, struct bsc_msc_connection *msc_con)
+{
+	struct ctrl_cmd *cmd;
+
+	cmd = ctrl_cmd_create(msc_con, CTRL_TYPE_TRAP);
+	if (!cmd) {
+		LOGP(DCTRL, LOGL_ERROR, "Failed to create TRAP command.\n");
+		return;
+	}
+
+	cmd->id = "0";
+	cmd->variable = talloc_asprintf(cmd, "net.bts.%i.location-state", bts->nr);
+
+	/* Prepare the location reply */
+	cmd->node = bts;
+	get_bts_loc(cmd, NULL);
+
+	osmo_bsc_send_trap(cmd, msc_con);
+	talloc_free(cmd);
+}
+
 static const struct value_string valid_names[] = {
 	{ BTS_LOC_FIX_INVALID,	"invalid" },
 	{ BTS_LOC_FIX_2D,	"fix2d" },
@@ -169,7 +192,7 @@
 
 	if (!location_equal(curloc, lastloc))
 		llist_for_each_entry(msc, &gsmnet->bsc_data->mscs, entry)
-			osmo_bsc_send_trap(cmd, msc->msc_con);
+			generate_location_state_trap(bts, msc->msc_con);
 
 	cleanup_locations(&bts->loc_list);