make dvb code kick out subscribers if FEC error rate is too high

This commit is contained in:
Andreas Öman 2007-08-28 12:29:05 +00:00
parent 64b90ea2e8
commit dc608c0743
4 changed files with 17 additions and 2 deletions

11
dvb.c
View file

@ -935,6 +935,17 @@ dvb_fec_monitor(void *aux)
subscription_lock();
if(tdmi->tdmi_fec_err_per_sec > DVB_FEC_ERROR_LIMIT) {
if(LIST_FIRST(&tda->tda_transports) != NULL) {
syslog(LOG_ERR, "%s: on %s: Too many FEC errors (%d / s), "
"flushing subscribers\n",
tdmi->tdmi_mux->tdm_name, tda->tda_path,
tdmi->tdmi_fec_err_per_sec);
dvb_adapter_clean(tdmi->tdmi_adapter);
}
}
tdm = tdmi->tdmi_mux;
LIST_REMOVE(tdmi, tdmi_mux_link);
LIST_INSERT_SORTED(&tdm->tdm_instances, tdmi, tdmi_mux_link,

2
dvb.h
View file

@ -19,6 +19,8 @@
#ifndef DVB_H_
#define DVB_H_
#define DVB_FEC_ERROR_LIMIT 20
extern struct th_dvb_adapter_list dvb_adapters_probing;
extern struct th_dvb_adapter_list dvb_adapters_running;
extern struct th_dvb_mux_list dvb_muxes;

View file

@ -103,7 +103,7 @@ dvr_fd_callback(int events, void *opaque, int fd)
/*
*
*/
static void
void
dvb_adapter_clean(th_dvb_adapter_t *tda)
{
th_transport_t *t;
@ -152,7 +152,7 @@ dvb_start_feed(th_transport_t *t, unsigned int weight)
if(tdmi->tdmi_status != NULL)
continue; /* no lock */
if(tdmi->tdmi_fec_err_per_sec > 100)
if(tdmi->tdmi_fec_err_per_sec > DVB_FEC_ERROR_LIMIT)
continue; /* too much errors to even consider */
if(tdmi->tdmi_state == TDMI_RUNNING)

View file

@ -25,4 +25,6 @@ int dvb_start_feed(th_transport_t *t, unsigned int weight);
void dvb_stop_feed(th_transport_t *t);
void dvb_adapter_clean(th_dvb_adapter_t *tda);
#endif /* DVB_DVR_H */