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 <zaj...@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),
>  
> 

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to