#endif
#include <sys/ioctl.h>
#include <sys/types.h>
+#include <sys/reboot.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
fclose(f);
}
+ if ((f = fopen("/tmp/sysinfo/board_name", "r")) != NULL)
+ {
+ if (fgets(line, sizeof(line), f))
+ {
+ val = strtok(line, "\t\n");
+
+ if (val)
+ blobmsg_add_string(&b, "board_name", val);
+ }
+
+ fclose(f);
+ }
+ else if ((f = fopen("/proc/device-tree/compatible", "r")) != NULL)
+ {
+ if (fgets(line, sizeof(line), f))
+ {
+ val = strtok(line, "\t\n");
+
+ if (val)
+ {
+ next = val;
+ while ((next = strchr(next, ',')) != NULL)
+ {
+ *next = '-';
+ next++;
+ }
+
+ blobmsg_add_string(&b, "board_name", val);
+ }
+ }
+
+ fclose(f);
+ }
+
if ((f = fopen("/etc/openwrt_release", "r")) != NULL)
{
c = blobmsg_open_table(&b, "release");
blob_buf_init(&b, 0);
- blobmsg_add_u32(&b, "localtime", mktime(tm));
+ blobmsg_add_u32(&b, "localtime", now + tm->tm_gmtoff);
#ifdef linux
blobmsg_add_u32(&b, "uptime", info.uptime);
return 0;
}
+static int system_reboot(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ procd_shutdown(RB_AUTOBOOT);
+ return 0;
+}
+
enum {
WDT_FREQUENCY,
WDT_TIMEOUT,
UBUS_METHOD_NOARG("board", system_board),
UBUS_METHOD_NOARG("info", system_info),
UBUS_METHOD_NOARG("upgrade", system_upgrade),
+ UBUS_METHOD_NOARG("reboot", system_reboot),
UBUS_METHOD("watchdog", watchdog_set, watchdog_policy),
UBUS_METHOD("signal", proc_signal, signal_policy),