summaryrefslogtreecommitdiffstats
path: root/openbsc/src
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-07-09 23:54:16 +0200
committerHarald Welte <laforge@gnumonks.org>2009-07-09 23:54:16 +0200
commitb46f3f92b51192168ce75880f0a3da601b5d26fc (patch)
tree688161cdbbf6bd29bc43017fade0ae1f4cc0b209 /openbsc/src
parent0bb78926040d7d2812c9f0b74fc9a4a656e40394 (diff)
parent3d571839108be8ec572f638456e6887c3db53b0b (diff)
Merge branch 'master' into proxy
Diffstat (limited to 'openbsc/src')
-rw-r--r--openbsc/src/abis_nm.c12
-rw-r--r--openbsc/src/abis_rsl.c3
-rw-r--r--openbsc/src/ipaccess-config.c29
3 files changed, 43 insertions, 1 deletions
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c
index 0ec064025..7e016dbc5 100644
--- a/openbsc/src/abis_nm.c
+++ b/openbsc/src/abis_nm.c
@@ -2309,6 +2309,18 @@ static int abis_nm_rx_ipacc(struct msgb *msg)
DEBUGPC(DNM, "unknown\n");
break;
}
+
+ /* signal handling */
+ switch (foh->msg_type) {
+ case NM_MT_IPACC_RSL_CONNECT_NACK:
+ case NM_MT_IPACC_SET_NVATTR_NACK:
+ case NM_MT_IPACC_GET_NVATTR_NACK:
+ dispatch_signal(SS_NM, S_NM_IPACC_NACK, (void*) ((long)foh->msg_type));
+ break;
+ default:
+ break;
+ }
+
return 0;
}
diff --git a/openbsc/src/abis_rsl.c b/openbsc/src/abis_rsl.c
index 3495e6c4d..a5b9a9059 100644
--- a/openbsc/src/abis_rsl.c
+++ b/openbsc/src/abis_rsl.c
@@ -1352,7 +1352,7 @@ int abis_rsl_rcvmsg(struct msgb *msg)
}
-/* Section 3.3.2.3 . I think this looks like a table */
+/* Section 3.3.2.3 TS 05.02. I think this looks like a table */
int rsl_ccch_conf_to_bs_cc_chans(int ccch_conf)
{
switch (ccch_conf) {
@@ -1371,6 +1371,7 @@ int rsl_ccch_conf_to_bs_cc_chans(int ccch_conf)
}
}
+/* Section 3.3.2.3 TS 05.02 */
int rsl_ccch_conf_to_bs_ccch_sdcch_comb(int ccch_conf)
{
switch (ccch_conf) {
diff --git a/openbsc/src/ipaccess-config.c b/openbsc/src/ipaccess-config.c
index ec145e50d..52e9cc99d 100644
--- a/openbsc/src/ipaccess-config.c
+++ b/openbsc/src/ipaccess-config.c
@@ -37,6 +37,7 @@
#include <openbsc/gsm_data.h>
#include <openbsc/e1_input.h>
#include <openbsc/abis_nm.h>
+#include <openbsc/signal.h>
static struct gsm_network *gsmnet;
@@ -51,6 +52,33 @@ static u_int8_t prim_oml_attr[] = { 0x95, 0x00, 7, 0x88, 192, 168, 100, 11, 0x00
static u_int8_t unit_id_attr[] = { 0x91, 0x00, 9, '2', '3', '4', '2', '/' , '0', '/', '0', 0x00 };
*/
+/*
+ * Callback function for NACK on the OML NM
+ *
+ * Currently we send the config requests but don't check the
+ * result. The nanoBTS will send us a NACK when we did something the
+ * BTS didn't like.
+ */
+static int ipacc_msg_nack(int mt)
+{
+ fprintf(stderr, "Failure to set attribute. This seems fatal\n");
+ exit(-1);
+ return 0;
+}
+
+static int nm_sig_cb(unsigned int subsys, unsigned int signal,
+ void *handler_data, void *signal_data)
+{
+ switch (signal) {
+ case S_NM_IPACC_NACK:
+ return ipacc_msg_nack((int)signal_data);
+ default:
+ break;
+ }
+
+ return 0;
+}
+
static void bootstrap_om(struct gsm_bts *bts)
{
int len;
@@ -223,6 +251,7 @@ int main(int argc, char **argv)
bts = gsm_bts_alloc(gsmnet, GSM_BTS_TYPE_NANOBTS_900, HARDCODED_TSC,
HARDCODED_BSIC);
+ register_signal_handler(SS_NM, nm_sig_cb, NULL);
printf("Trying to connect to ip.access BTS ...\n");
memset(&sin, 0, sizeof(sin));