diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-06-10 10:48:14 +0200 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2009-06-10 10:48:14 +0200 |
commit | 500f3ca19dfe4eba2d20e3a6d68fdb32b93e17a5 (patch) | |
tree | 1db3e4c7f843424d53bd4e105931316353ccbaf6 /openbsc/src | |
parent | e91f57879d4f6f919c56c28316e6ac7e75b91e13 (diff) |
[o&m] Dispatch a signal for nacked O&M messages
When trying to operate a nanoBTS900 on channels for 1800
or the other way around the "SET BTS ATTRIBUTES" message
will be nacked. Dispatch all nacked messages from abis_nm
via signals. Handle this in bsc_hack.c, print a small hint
and exit the application as this is considered a fatal
unrecoverable error (the exit is in the app, so a library
can be more robust).
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/abis_nm.c | 3 | ||||
-rw-r--r-- | openbsc/src/bsc_hack.c | 14 |
2 files changed, 17 insertions, 0 deletions
diff --git a/openbsc/src/abis_nm.c b/openbsc/src/abis_nm.c index 74dba2377..83e6bbb48 100644 --- a/openbsc/src/abis_nm.c +++ b/openbsc/src/abis_nm.c @@ -893,6 +893,9 @@ static int abis_nm_rcvmsg_fom(struct msgb *mb) nack_cause_name(*TLVP_VAL(&tp, NM_ATT_NACK_CAUSES))); else DEBUGPC(DNM, "\n"); + + dispatch_signal(SS_NM, S_NM_NACK, (void*) ((long)mt)); + return 0; } #if 0 /* check if last message is to be acked */ diff --git a/openbsc/src/bsc_hack.c b/openbsc/src/bsc_hack.c index 687be33cf..388840793 100644 --- a/openbsc/src/bsc_hack.c +++ b/openbsc/src/bsc_hack.c @@ -454,6 +454,18 @@ static int sw_activ_rep(struct msgb *mb) return 0; } +/* Callback function for NACK on the OML NM */ +static int oml_msg_nack(int mt) +{ + if (mt == NM_MT_SET_BTS_ATTR_NACK) { + fprintf(stderr, "Failed to set BTS attributes. That is fatal. " + "Was the bts type and frequency properly specified?\n"); + exit(-1); + } + + return 0; +} + /* Callback function to be called every time we receive a signal from NM */ static int nm_sig_cb(unsigned int subsys, unsigned int signal, void *handler_data, void *signal_data) @@ -461,6 +473,8 @@ static int nm_sig_cb(unsigned int subsys, unsigned int signal, switch (signal) { case S_NM_SW_ACTIV_REP: return sw_activ_rep(signal_data); + case S_NM_NACK: + return oml_msg_nack((int)signal_data); default: break; } |