e1_recorder: Skip storing data to disk if line is in ALARM state

Change-Id: Ie4c671053d372bc700f506198d1916853da03b9e
This commit is contained in:
Harald Welte 2019-11-06 16:44:04 +01:00
parent 1b41abda3d
commit 8486938efb
2 changed files with 31 additions and 0 deletions

View File

@ -31,6 +31,29 @@ static enum osmo_e1cap_capture_mode ts2cap_mode(struct e1inp_ts *ts)
}
}
static int sig_inp_cbfn(unsigned int subsys, unsigned int signal, void *handler_data, void *signal_data)
{
struct input_signal_data *isd = signal_data;
struct e1_recorder_line *rline;
OSMO_ASSERT(subsys == SS_L_INPUT);
OSMO_ASSERT(isd->line && isd->line->num < ARRAY_SIZE(g_recorder.line));
switch (signal) {
case S_L_INP_LINE_ALARM:
LOGP(DMAIN, LOGL_NOTICE, "Line %u: ALARM\n", isd->line->num);
rline = &g_recorder.line[isd->line->num];
rline->has_alarm = true;
break;
case S_L_INP_LINE_NOALARM:
LOGP(DMAIN, LOGL_NOTICE, "Line %u: NOALARM\n", isd->line->num);
rline = &g_recorder.line[isd->line->num];
rline->has_alarm = false;
break;
}
return 0;
}
/* receive a raw message frome the E1 timeslot */
void e1ts_raw_recv(struct e1inp_ts *ts, struct msgb *msg)
{
@ -38,6 +61,11 @@ void e1ts_raw_recv(struct e1inp_ts *ts, struct msgb *msg)
enum osmo_e1cap_capture_mode cap_mode = ts2cap_mode(ts);
int rc;
if (rline->has_alarm) {
DEBUGP(DMAIN, "Skipping storage as line %u is in ALARM\n", ts->line->num);
return;
}
/* FIXME: special processing of TFP and PGSL */
rc = e1frame_store(ts, msg, cap_mode);
@ -170,6 +198,8 @@ int main(int argc, char **argv)
handle_options(argc, argv);
osmo_signal_register_handler(SS_L_INPUT, sig_inp_cbfn, NULL);
rc = vty_read_config_file(g_config_file, NULL);
if (rc < 0) {
fprintf(stderr, "Cannot parse configuration file '%s': %s\n", g_config_file,

View File

@ -17,6 +17,7 @@ enum rec_vty_node {
};
struct e1_recorder_line {
bool has_alarm;
struct {
bool enabled;
uint8_t line_nr;