make dvb code kick out subscribers if FEC error rate is too high
This commit is contained in:
parent
64b90ea2e8
commit
dc608c0743
4 changed files with 17 additions and 2 deletions
11
dvb.c
11
dvb.c
|
@ -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
2
dvb.h
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Add table
Reference in a new issue