1/* 2 bwdpi_check.c for keep wred / data_colld alive 3*/ 4 5#include <rc.h> 6#include <bwdpi.h> 7 8static void check_wred_alive() 9{ 10 debug = nvram_get_int("bwdpi_debug"); 11 if(debug) dbg("[bwdpi_wred_alive] check_wred_alive...\n"); 12 13 int enabled = check_bwdpi_nvram_setting(); 14 15 if(enabled){ 16 if(debug) dbg("[bwdpi_wred_alive] start_wrs and start_data_colld...\n"); 17 // start wrs 18 start_wrs(); 19 // start data_colld 20 start_dc(NULL); 21 alarm(60); 22 } 23} 24 25static int sig_cur = -1; 26 27static void catch_sig(int sig) 28{ 29 sig_cur = sig; 30 debug = nvram_get_int("bwdpi_debug"); 31 32 if (sig == SIGTERM) 33 { 34 remove("/var/run/bwdpi_wred_check.pid"); 35 exit(0); 36 } 37 else if(sig == SIGALRM) 38 { 39 if(debug) dbg("[bwdpi_wred_alive] SIGALRM ...\n"); 40 check_wred_alive(); 41 } 42} 43 44int bwdpi_wred_alive_main(int argc, char **argv) 45{ 46 debug = nvram_get_int("bwdpi_debug"); 47 if(debug) dbg("[bwdpi_wred_alive] starting...\n"); 48 49 FILE *fp; 50 sigset_t sigs_to_catch; 51 52 /* write pid */ 53 if ((fp = fopen("/var/run/bwdpi_wred_alive.pid", "w")) != NULL) 54 { 55 fprintf(fp, "%d", getpid()); 56 fclose(fp); 57 } 58 59 /* set the signal handler */ 60 sigemptyset(&sigs_to_catch); 61 sigaddset(&sigs_to_catch, SIGTERM); 62 sigaddset(&sigs_to_catch, SIGALRM); 63 sigprocmask(SIG_UNBLOCK, &sigs_to_catch, NULL); 64 65 signal(SIGTERM, catch_sig); 66 signal(SIGALRM, catch_sig); 67 68 while(1) 69 { 70 if(debug) dbg("[bwdpi_wred_alive] set alarm 60 secs and pause...\n"); 71 alarm(60); 72 pause(); 73 } 74 75 return 0; 76} 77