aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/bsc/signal.h14
-rw-r--r--src/osmo-bsc/abis_nm.c20
2 files changed, 33 insertions, 1 deletions
diff --git a/include/osmocom/bsc/signal.h b/include/osmocom/bsc/signal.h
index 62a3d2c88..10200d75e 100644
--- a/include/osmocom/bsc/signal.h
+++ b/include/osmocom/bsc/signal.h
@@ -149,6 +149,20 @@ struct nm_nack_signal_data {
uint8_t mt;
};
+struct nm_fail_rep_signal_data {
+ struct gsm_bts *bts;
+ /* raw data */
+ struct msgb *msg;
+ struct tlv_parsed *tp;
+ /* parsed data */
+ struct {
+ const char *event_type;
+ const char *severity;
+ const char *additional_text;
+ const uint8_t *probable_cause;
+ } parsed;
+};
+
struct challoc_signal_data {
struct gsm_bts *bts;
struct gsm_lchan *lchan;
diff --git a/src/osmo-bsc/abis_nm.c b/src/osmo-bsc/abis_nm.c
index 7ca4e7983..a874b53ee 100644
--- a/src/osmo-bsc/abis_nm.c
+++ b/src/osmo-bsc/abis_nm.c
@@ -358,6 +358,7 @@ static int rx_fail_evt_rep(struct msgb *mb, struct gsm_bts *bts)
struct abis_om_hdr *oh = msgb_l2(mb);
struct abis_om_fom_hdr *foh = msgb_l3(mb);
struct e1inp_sign_link *sign_link = mb->dst;
+ struct nm_fail_rep_signal_data sd;
struct tlv_parsed tp;
int rc = 0;
const uint8_t *p_val = NULL;
@@ -398,6 +399,24 @@ static int rx_fail_evt_rep(struct msgb *mb, struct gsm_bts *bts)
rc = -EINVAL;
}
+ sd.bts = mb->trx->bts;
+ sd.msg = mb;
+ sd.tp = &tp;
+ if (e_type)
+ sd.parsed.event_type = e_type;
+ else
+ sd.parsed.event_type = "<none>";
+ if (severity)
+ sd.parsed.severity = severity;
+ else
+ sd.parsed.severity = "<none>";
+ if (p_text)
+ sd.parsed.additional_text = p_text;
+ else
+ sd.parsed.additional_text = "<none>";
+ sd.parsed.probable_cause = p_val;
+ osmo_signal_dispatch(SS_NM, S_NM_FAIL_REP, &sd);
+
if (p_text)
talloc_free(p_text);
@@ -419,7 +438,6 @@ static int abis_nm_rcvmsg_report(struct msgb *mb, struct gsm_bts *bts)
break;
case NM_MT_FAILURE_EVENT_REP:
rx_fail_evt_rep(mb, bts);
- osmo_signal_dispatch(SS_NM, S_NM_FAIL_REP, mb);
break;
case NM_MT_TEST_REP:
DEBUGPFOH(DNM, foh, "Test Report\n");