0d201bc33ffa46d1fad1488e7cc27082ae64869d
2 * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
3 * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU Lesser General Public License version 2.1
7 * as published by the Free Software Foundation
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
16 #include <sys/types.h>
18 #include <sys/reboot.h>
20 #include <libubox/uloop.h>
32 #include "../utils/utils.h"
34 #include "../watchdog.h"
36 unsigned int debug
= 0;
39 signal_shutdown(int signal
, siginfo_t
*siginfo
, void *data
)
41 fprintf(stderr
, "reboot\n");
50 static struct sigaction sa_shutdown
= {
51 .sa_sigaction
= signal_shutdown
,
52 .sa_flags
= SA_SIGINFO
62 res
= get_cmdline_val("init_debug", line
, sizeof(line
));
64 r
= strtol(line
, NULL
, 10);
65 if ((r
!= LONG_MIN
) && (r
!= LONG_MAX
))
71 main(int argc
, char **argv
)
75 sigaction(SIGTERM
, &sa_shutdown
, NULL
);
76 sigaction(SIGUSR1
, &sa_shutdown
, NULL
);
77 sigaction(SIGUSR2
, &sa_shutdown
, NULL
);
85 char *kmod
[] = { "/sbin/kmodloader", "/etc/modules-boot.d/", NULL
};
88 int fd
= open("/dev/null", O_RDWR
);
91 dup2(fd
, STDIN_FILENO
);
92 dup2(fd
, STDOUT_FILENO
);
93 dup2(fd
, STDERR_FILENO
);
94 if (fd
> STDERR_FILENO
)
98 execvp(kmod
[0], kmod
);
99 ERROR("Failed to start kmodloader\n");
103 ERROR("Failed to start kmodloader instance\n");
107 for (i
= 0; i
< 120; i
++) {
108 if (waitpid(pid
, NULL
, WNOHANG
) > 0)