watchdog: add remaining time to ubus output
authorStijn Tintel <stijn@linux-ipv6.be>
Fri, 17 Jun 2022 15:51:56 +0000 (18:51 +0300)
committerStijn Tintel <stijn@linux-ipv6.be>
Fri, 17 Jun 2022 16:44:33 +0000 (19:44 +0300)
Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
system.c
watchdog.c
watchdog.h

index 93eac59c3b01ce3729dc27539ac483f5314759d3..7d9594fc263d26c76d047f2e94972b5f509a2db6 100644 (file)
--- a/system.c
+++ b/system.c
@@ -457,6 +457,7 @@ static int watchdog_set(struct ubus_context *ctx, struct ubus_object *obj,
 {
        struct blob_attr *tb[__WDT_MAX];
        const char *status;
+       ssize_t timeleft = -1;
 
        if (!msg)
                return UBUS_STATUS_INVALID_ARGUMENT;
@@ -493,14 +494,18 @@ static int watchdog_set(struct ubus_context *ctx, struct ubus_object *obj,
                status = "offline";
        else if (watchdog_get_stopped())
                status = "stopped";
-       else
+       else {
                status = "running";
+               timeleft = watchdog_get_timeleft();
+       }
 
        blob_buf_init(&b, 0);
        blobmsg_add_string(&b, "status", status);
        blobmsg_add_u32(&b, "timeout", watchdog_timeout(0));
        blobmsg_add_u32(&b, "frequency", watchdog_frequency(0));
        blobmsg_add_u8(&b, "magicclose", watchdog_get_magicclose());
+       if (timeleft >= 0)
+               blobmsg_add_u32(&b, "timeleft", timeleft);
        ubus_send_reply(ctx, req, b.head);
 
        return 0;
index 39ae9ff9aa5823ab05c9b1af3e650a11e93cf7d3..bedb545975a0562a7377b61647482a0748970c8a 100644 (file)
@@ -216,3 +216,12 @@ void watchdog_set_cloexec(bool val)
                flags &= ~FD_CLOEXEC;
        fcntl(wdt_fd, F_SETFD,  flags);
 }
+
+ssize_t watchdog_get_timeleft(void)
+{
+       ssize_t timeleft;
+
+       ioctl(wdt_fd, WDIOC_GETTIMELEFT, &timeleft);
+
+       return timeleft;
+}
index 73c75d57919b649c8b7e259673cd98232e4392d3..6176b497c026eae5f3ea946638c92911a257cd7a 100644 (file)
@@ -15,6 +15,7 @@
 #ifndef __PROCD_WATCHDOG_H
 #define __PROCD_WATCHDOG_H
 
+#include <sys/types.h>
 #include <stdbool.h>
 
 #ifndef DISABLE_INIT
@@ -28,6 +29,7 @@ void watchdog_set_stopped(bool val);
 bool watchdog_get_stopped(void);
 void watchdog_set_cloexec(bool val);
 void watchdog_ping(void);
+ssize_t watchdog_get_timeleft(void);
 #else
 static inline void watchdog_init(int preinit)
 {