X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fprocd.git;a=blobdiff_plain;f=system.c;h=bb2abe5e527e356fba70a6853ec8a57342311dbc;hp=569a75d5b4df947c0166afe4b14855073a968188;hb=7c6cf551df1eb4b59b2576c73db7ad30ac4ce396;hpb=3c771f9e4ba46d3e39334cb20eab98221043f1e2 diff --git a/system.c b/system.c index 569a75d..bb2abe5 100644 --- a/system.c +++ b/system.c @@ -18,6 +18,7 @@ #endif #include #include +#include #include #include #include @@ -242,6 +243,14 @@ static int system_upgrade(struct ubus_context *ctx, struct ubus_object *obj, 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, @@ -335,12 +344,12 @@ static int proc_signal(struct ubus_context *ctx, struct ubus_object *obj, } enum { - NAND_PATH, - __NAND_MAX + SYSUPGRADE_PATH, + __SYSUPGRADE_MAX }; -static const struct blobmsg_policy nand_policy[__NAND_MAX] = { - [NAND_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING }, +static const struct blobmsg_policy sysupgrade_policy[__SYSUPGRADE_MAX] = { + [SYSUPGRADE_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING }, }; static void @@ -359,20 +368,20 @@ procd_spawn_upgraded(char *path) execvp(argv[0], argv); } -static int nand_set(struct ubus_context *ctx, struct ubus_object *obj, - struct ubus_request_data *req, const char *method, - struct blob_attr *msg) +static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, + struct ubus_request_data *req, const char *method, + struct blob_attr *msg) { - struct blob_attr *tb[__NAND_MAX]; + struct blob_attr *tb[__SYSUPGRADE_MAX]; if (!msg) return UBUS_STATUS_INVALID_ARGUMENT; - blobmsg_parse(nand_policy, __NAND_MAX, tb, blob_data(msg), blob_len(msg)); - if (!tb[NAND_PATH]) + blobmsg_parse(sysupgrade_policy, __SYSUPGRADE_MAX, tb, blob_data(msg), blob_len(msg)); + if (!tb[SYSUPGRADE_PATH]) return UBUS_STATUS_INVALID_ARGUMENT; - procd_spawn_upgraded(blobmsg_get_string(tb[NAND_PATH])); + procd_spawn_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PATH])); fprintf(stderr, "Yikees, something went wrong. no /sbin/upgraded ?\n"); return 0; } @@ -388,11 +397,11 @@ static const struct ubus_method system_methods[] = { 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), - - /* must remain at the end as it ia not always loaded */ - UBUS_METHOD("nandupgrade", nand_set, nand_policy), + UBUS_METHOD("nandupgrade", sysupgrade, sysupgrade_policy), + UBUS_METHOD("sysupgrade", sysupgrade, sysupgrade_policy), }; static struct ubus_object_type system_object_type = @@ -421,12 +430,8 @@ procd_bcast_event(char *event, struct blob_attr *msg) void ubus_init_system(struct ubus_context *ctx) { - struct stat s; int ret; - if (stat("/sbin/upgraded", &s)) - system_object.n_methods -= 1; - _ctx = ctx; ret = ubus_add_object(ctx, &system_object); if (ret)