/* watchdog - start a watchdog timer with configurable kick frequencies
 *
 * Copyright 2019 Chris Sarra <chrissarra@google.com>
 *
 * See kernel.org/doc/Documentation/watchdog/watchdog-api.txt

USE_WATCHDOG(NEWTOY(watchdog, "<1>1Ft#=4<1T#=60<1", TOYFLAG_NEEDROOT|TOYFLAG_BIN))

config WATCHDOG
  bool "watchdog"
  default y
  help
    usage: watchdog [-F] [-t UPDATE] [-T DEADLINE] DEV

    Start the watchdog timer at DEV with optional timeout parameters.

    -F	run in the foreground (do not daemonize)
    -t	poke watchdog every UPDATE seconds (default 4)
    -T	reboot if not poked for DEADLINE seconds (default 60)
*/

#define FOR_watchdog
#include "toys.h"
#include "linux/watchdog.h"

GLOBALS(
  long T, t;

  int fd;
)

static void safe_shutdown(int ignored)
{
  write(TT.fd, "V", 1);
  close(TT.fd);
  error_exit("safely exited watchdog.");
}

void watchdog_main(void)
{
  if (!FLAG(F)) xvdaemon();
  xsignal(SIGTERM, safe_shutdown);
  xsignal(SIGINT, safe_shutdown);
  xioctl(TT.fd = xopen(*toys.optargs, O_WRONLY), WDIOC_SETTIMEOUT, &TT.T);

  // Now that we've got the watchdog device open, kick it periodically.
  for (;;) {
    write(TT.fd, "", 1);
    sleep(TT.t);
  }
}
