#include <fcntl.h>
#include <math.h>
#include <time.h>
+#include <signal.h>
+#include <sys/wait.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
+#include <linux/types.h>
+#include <linux/watchdog.h>
#include "ucix.h"
#include "wireless.22.h"
-/* Check interval */
-#define INTERVAL 30
+/* Watchdog poll interval */
+#define BASE_INTERVAL 5
+
+/* Action interval (N * BASE_INTERVAL) */
+#define ACTION_INTERVAL 6
/* Hysteresis */
#define HYSTERESIS 3
/* Crond error action */
#define CRON_ACTION "/etc/init.d/cron", "/etc/init.d/cron", "restart"
+/* SSHd error action */
+#define SSHD_ACTION "/etc/init.d/dropbear", "/etc/init.d/dropbear", "restart"
+
+/* Watchdog device */
+#define WATCH_DEVICE "/dev/watchdog"
+#define WATCH_SHUTDOWN 'V'
+#define WATCH_KEEPALIVE '\0'
+
+/* System load error action and treshold */
+#define LOAD_TRESHOLD 15.00
+#define LOAD_ACTION "/sbin/reboot", "/sbin/reboot"
+
/* Fallback binary name (passed by makefile) */
#ifndef BINARY
#define BINARY "ffwatchd"
}
/* fork() & execl() helper */
-#define EXEC(x) \
- do { \
- switch(fork()) \
- { \
- case -1: \
- syslog(LOG_CRIT, "Unable to fork child: %s", \
- strerror(errno)); \
- \
- break; \
- \
- case 0: \
- execl(x, NULL); \
- syslog(LOG_CRIT, "Unable to execute action: %s", \
- strerror(errno)); \
- \
- return 1; \
- } \
+#define EXEC(x) \
+ do { \
+ switch(fork()) \
+ { \
+ case -1: \
+ syslog(LOG_CRIT, "Unable to fork child: %s", \
+ strerror(errno)); \
+ break; \
+ \
+ case 0: \
+ execl(x, NULL); \
+ syslog(LOG_CRIT, "Unable to execute action: %s", \
+ strerror(errno)); \
+ return 1; \
+ } \
} while(0)