abis_nm: Create a signal data structure for the NACK message

Provide the message type and the msgb of the NACK message.
diff --git a/openbsc/include/openbsc/signal.h b/openbsc/include/openbsc/signal.h
index 0738f80..e614ee5 100644
--- a/openbsc/include/openbsc/signal.h
+++ b/openbsc/include/openbsc/signal.h
@@ -1,5 +1,5 @@
 /* Generic signalling/notification infrastructure */
-/* (C) 2009 by Holger Hans Peter Freyther <zecke@selfish.org>
+/* (C) 2009-2010 by Holger Hans Peter Freyther <zecke@selfish.org>
  * (C) 2009 by Harald Welte <laforge@gnumonks.org>
  * All Rights Reserved
  *
@@ -139,6 +139,11 @@
 	u_int8_t msg_type;	
 };
 
+struct nm_nack_signal_data {
+	struct msgb *msg;
+	uint8_t mt;
+};
+
 struct challoc_signal_data {
 	struct gsm_bts *bts;
 	struct gsm_lchan *lchan;
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c
index 8487556..6f112e1 100644
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/abis_nm.c
@@ -966,6 +966,7 @@
 		return abis_nm_rcvmsg_sw(mb);
 
 	if (is_in_arr(mt, nacks, ARRAY_SIZE(nacks))) {
+		struct nm_nack_signal_data nack_data;
 		struct tlv_parsed tp;
 
 		debugp_foh(foh);
@@ -979,7 +980,9 @@
 		else
 			DEBUGPC(DNM, "\n");
 
-		dispatch_signal(SS_NM, S_NM_NACK, (void*) &mt);
+		nack_data.msg = mb;
+		nack_data.mt = mt;
+		dispatch_signal(SS_NM, S_NM_NACK, &nack_data);
 		return 0;
 	}
 #if 0
diff --git a/openbsc/src/bsc_init.c b/openbsc/src/bsc_init.c
index 5f37073..ce66808 100644
--- a/openbsc/src/bsc_init.c
+++ b/openbsc/src/bsc_init.c
@@ -563,9 +563,9 @@
 }
 
 /* Callback function for NACK on the OML NM */
-static int oml_msg_nack(u_int8_t mt)
+static int oml_msg_nack(struct nm_nack_signal_data *nack)
 {
-	if (mt == NM_MT_SET_BTS_ATTR_NACK) {
+	if (nack->mt == NM_MT_SET_BTS_ATTR_NACK) {
 		LOGP(DNM, LOGL_FATAL, "Failed to set BTS attributes. That is fatal. "
 				"Was the bts type and frequency properly specified?\n");
 		exit(-1);
@@ -578,14 +578,15 @@
 static int nm_sig_cb(unsigned int subsys, unsigned int signal,
 		     void *handler_data, void *signal_data)
 {
+	struct nm_nack_signal_data *nack;
 	u_int8_t *msg_type;
 
 	switch (signal) {
 	case S_NM_SW_ACTIV_REP:
 		return sw_activ_rep(signal_data);
 	case S_NM_NACK:
-		msg_type = signal_data;
-		return oml_msg_nack(*msg_type);
+		nack = signal_data;
+		return oml_msg_nack(nack);
 	default:
 		break;
 	}