[LEDE-DEV] [PATCH procd] system: add reboot method to system ubus object
John Crispin
john at phrozen.org
Tue Jul 5 22:42:25 PDT 2016
On 05/07/2016 17:12, Rafał Miłecki wrote:
> Sometimes, for various reasons, user may want to reboot a device. This
> is a common task and it makes sense to support it with something common
> like a procd.
>
> Right now both: LuCI and LuCI2 implement this feature on their own with
> luci-rpc-luci2-system reboot and luci-rpc-sys reboot. This leads to code
> duplication and situation may become even worse with more software
> controlling system with ubus.
>
> Once we get this patch in place we may consider switching LuCI and LuCI2
> to this new method.
>
> Signed-off-by: Rafał Miłecki <zajec5 at gmail.com>
> ---
> I wrote a simple app for my own purposes (and a bit of fun) that uses
> ubus over HTTP. I wanted to add support for rebooting device and I hit
> this issue. I didn't want another deamon or rpcd plugin adding reboot
> support so I decided to come with this procd patch.
>
> If you would like to take a look at trivial usage of this, you may check
> my small python script at:
> http://files.zajec.net/lede/diagedel/
> ---
> system.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/system.c b/system.c
> index 569a75d..ac34d12 100644
> --- a/system.c
> +++ b/system.c
> @@ -18,6 +18,7 @@
> #endif
> #include <sys/ioctl.h>
> #include <sys/types.h>
> +#include <sys/reboot.h>
> #include <sys/stat.h>
> #include <fcntl.h>
> #include <signal.h>
> @@ -242,6 +243,24 @@ 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)
> +{
> + switch (fork()) {
> + case -1:
> + return UBUS_STATUS_UNKNOWN_ERROR;
> + case 0:
> + sync();
> + sleep(1);
> + reboot(RB_AUTOBOOT);
> + while (1)
> + sleep(1);
please use procd_shutdown(RB_AUTOBOOT) instead of rebooting manually
John
> + default:
> + return 0;
> + }
> +}
> +
> enum {
> WDT_FREQUENCY,
> WDT_TIMEOUT,
> @@ -388,6 +407,7 @@ 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),
>
>
More information about the Lede-dev
mailing list