diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/main.c | 11 | ||||
-rw-r--r-- | src/common/oml.c | 19 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/common/main.c b/src/common/main.c index 1b2549e0..f99f196a 100644 --- a/src/common/main.c +++ b/src/common/main.c @@ -50,6 +50,7 @@ #include <osmo-bts/bts_model.h> #include <osmo-bts/pcu_if.h> #include <osmo-bts/control_if.h> +#include <osmo-bts/oml.h> int quit = 0; static const char *config_file = "osmo-bts.cfg"; @@ -181,13 +182,21 @@ static void signal_handler(int signal) switch (signal) { case SIGINT: //osmo_signal_dispatch(SS_GLOBAL, S_GLOBAL_SHUTDOWN, NULL); - if (!quit) + if (!quit) { + oml_tx_failure_event_rep(&bts->mo, + OSMO_EVT_CRIT_PROC_STOP, + "BTS: SIGINT received -> " + "shutdown\n"); bts_shutdown(bts, "SIGINT"); + } quit++; break; case SIGABRT: case SIGUSR1: case SIGUSR2: + oml_tx_failure_event_rep(&bts->mo, OSMO_EVT_CRIT_PROC_STOP, + "BTS: signal %s received\n", + strsignal(signal)); talloc_report_full(tall_bts_ctx, stderr); break; default: diff --git a/src/common/oml.c b/src/common/oml.c index 0700aa23..870ef3c7 100644 --- a/src/common/oml.c +++ b/src/common/oml.c @@ -1140,6 +1140,25 @@ int down_oml(struct gsm_bts *bts, struct msgb *msg) return ret; } +/* 3GPP TS 12.21 ยง 8.8.2 */ +int oml_tx_failure_event_rep(struct gsm_abis_mo *mo, uint16_t cause_value, + const char *fmt, ...) +{ + struct msgb *nmsg; + va_list ap; + + va_start(ap, fmt); + nmsg = abis_nm_fail_evt_rep(NM_EVT_PROC_FAIL, NM_SEVER_CRITICAL, + NM_PCAUSE_T_MANUF, cause_value, fmt, ap); + LOGP(DOML, LOGL_INFO, fmt, ap); + va_end(ap); + + if (!nmsg) + return -ENOMEM; + + return oml_mo_send_msg(mo, nmsg, NM_MT_FAILURE_EVENT_REP); +} + int oml_init(void) { DEBUGP(DOML, "Initializing OML attribute definitions\n"); |