luci2: add reset_test and reset_start calls
This commit is contained in:
parent
533a5a2cbf
commit
c89e51f822
1 changed files with 68 additions and 1 deletions
69
luci2.c
69
luci2.c
|
@ -996,6 +996,71 @@ rpc_luci2_backup_clean(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rpc_luci2_reset_test(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
|
struct ubus_request_data *req, const char *method,
|
||||||
|
struct blob_attr *msg)
|
||||||
|
{
|
||||||
|
FILE *mtd;
|
||||||
|
struct stat s;
|
||||||
|
char line[64] = { 0 };
|
||||||
|
bool supported = false;
|
||||||
|
|
||||||
|
if (!stat("/sbin/mtd", &s) && (s.st_mode & S_IXUSR))
|
||||||
|
{
|
||||||
|
if ((mtd = fopen("/proc/mtd", "r")) != NULL)
|
||||||
|
{
|
||||||
|
while (fgets(line, sizeof(line) - 1, mtd))
|
||||||
|
{
|
||||||
|
if (strstr(line, "\"rootfs_data\""))
|
||||||
|
{
|
||||||
|
supported = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(mtd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blob_buf_init(&buf, 0);
|
||||||
|
blobmsg_add_u8(&buf, "supported", supported);
|
||||||
|
|
||||||
|
ubus_send_reply(ctx, req, buf.head);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
rpc_luci2_reset_start(struct ubus_context *ctx, struct ubus_object *obj,
|
||||||
|
struct ubus_request_data *req, const char *method,
|
||||||
|
struct blob_attr *msg)
|
||||||
|
{
|
||||||
|
switch (fork())
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
return rpc_errno_status();
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
uloop_done();
|
||||||
|
|
||||||
|
chdir("/");
|
||||||
|
|
||||||
|
close(0);
|
||||||
|
close(1);
|
||||||
|
close(2);
|
||||||
|
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
execl("/sbin/mtd", "/sbin/mtd", "-r", "erase", "rootfs_data", NULL);
|
||||||
|
|
||||||
|
return rpc_errno_status();
|
||||||
|
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static FILE *
|
static FILE *
|
||||||
dnsmasq_leasefile(void)
|
dnsmasq_leasefile(void)
|
||||||
|
@ -1794,7 +1859,9 @@ int rpc_luci2_api_init(struct ubus_context *ctx)
|
||||||
rpc_upgrade_policy),
|
rpc_upgrade_policy),
|
||||||
UBUS_METHOD_NOARG("upgrade_clean", rpc_luci2_upgrade_clean),
|
UBUS_METHOD_NOARG("upgrade_clean", rpc_luci2_upgrade_clean),
|
||||||
UBUS_METHOD_NOARG("backup_restore", rpc_luci2_backup_restore),
|
UBUS_METHOD_NOARG("backup_restore", rpc_luci2_backup_restore),
|
||||||
UBUS_METHOD_NOARG("backup_clean", rpc_luci2_backup_clean)
|
UBUS_METHOD_NOARG("backup_clean", rpc_luci2_backup_clean),
|
||||||
|
UBUS_METHOD_NOARG("reset_test", rpc_luci2_reset_test),
|
||||||
|
UBUS_METHOD_NOARG("reset_start", rpc_luci2_reset_start)
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct ubus_object_type luci2_system_type =
|
static struct ubus_object_type luci2_system_type =
|
||||||
|
|
Loading…
Reference in a new issue