diff --git a/Changelog b/Changelog index 2fc6775e..3af3baa6 100644 --- a/Changelog +++ b/Changelog @@ -5,6 +5,7 @@ - drop system("rm -f") to clean /tmp, its a fresh mounted tmpfs - write ACPI sleep state to /sys/power/state instead of /proc/acpi/sleep (Metalshark) + - use direct calls to set loopback instead of fork ifconfig 0.1 (20081214) - initial release diff --git a/finit-alt.c b/finit-alt.c index 063fd4db..7cf48a4f 100644 --- a/finit-alt.c +++ b/finit-alt.c @@ -37,7 +37,10 @@ THE SOFTWARE. #include #include #include -#include +#include +#include +#include +#include #ifdef DEBUG @@ -105,9 +108,31 @@ int makepath(char *p) return ret; } +void ifconfig(char *name, char *inet, char *broadcast, int flags) +{ + struct ifreq ifr; + struct sockaddr_in *a = (struct sockaddr_in *)&(ifr.ifr_addr); + int sock; + + if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0) + return; + + memset(&ifr, 0, sizeof (ifr)); + strncpy(ifr.ifr_name, name, IFNAMSIZ); + a->sin_family = AF_INET; + inet_aton(inet, &a->sin_addr); + ioctl(sock, SIOCSIFADDR, &ifr); + inet_aton(broadcast, &a->sin_addr); + ioctl(sock, SIOCSIFNETMASK, &ifr); + ioctl(sock, SIOCGIFFLAGS, &ifr); + ifr.ifr_flags |= flags; + ioctl(sock, SIOCSIFFLAGS, &ifr); + close(sock); +} -void shutdown(int); + +void do_shutdown(int); void signal_handler(int); void chld_handler(int); @@ -137,10 +162,10 @@ int main() for (i = 1; i < NSIG; i++) SETSIG(sa, i, SIG_IGN, SA_RESTART); - SETSIG(sa, SIGINT, shutdown, 0); + SETSIG(sa, SIGINT, do_shutdown, 0); SETSIG(sa, SIGPWR, signal_handler, 0); - SETSIG(sa, SIGUSR1, shutdown, 0); - SETSIG(sa, SIGUSR2, shutdown, 0); + SETSIG(sa, SIGUSR1, do_shutdown, 0); + SETSIG(sa, SIGUSR2, do_shutdown, 0); SETSIG(sa, SIGTERM, signal_handler, 0); SETSIG(sa, SIGALRM, signal_handler, 0); SETSIG(sa, SIGHUP, signal_handler, 0); @@ -259,7 +284,7 @@ int main() fclose(f); } - system("/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 up > /dev/null"); + ifconfig("lo", "127.0.0.1", "255.0.0.0", IFF_UP); /* * Set random seed @@ -345,7 +370,7 @@ int main() /* * Shut down on INT USR1 USR2 */ -void shutdown(int sig) +void do_shutdown(int sig) { int fd; diff --git a/finit-mod.c b/finit-mod.c index e399f9d4..0f6e52dc 100644 --- a/finit-mod.c +++ b/finit-mod.c @@ -35,6 +35,7 @@ Changelog from the original Eeepc fastinit: CONFIG_RTC but not CONFIG_HPET_TIMER and CONFIG_HPET_RTC_IRQ (by Metalshark) - Drop system() call to clean /tmp, it's a fresh mounted tmpfs - Change /proc/acpi/sleep to /sys/power/state (by Metalshark) +- Set loopback interface using direct calls instead of system("ifconfig") */ @@ -53,6 +54,10 @@ Changelog from the original Eeepc fastinit: #include #include #include +#include +#include +#include +#include #ifdef DIRECTISA #define HWCLOCK_DIRECTISA " --directisa" @@ -89,9 +94,31 @@ int makepath(char *p) return ret; } +void ifconfig(char *name, char *inet, char *broadcast, int flags) +{ + struct ifreq ifr; + struct sockaddr_in *a = (struct sockaddr_in *)&(ifr.ifr_addr); + int sock; + + if ((sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP)) < 0) + return; + + memset(&ifr, 0, sizeof (ifr)); + strncpy(ifr.ifr_name, name, IFNAMSIZ); + a->sin_family = AF_INET; + inet_aton(inet, &a->sin_addr); + ioctl(sock, SIOCSIFADDR, &ifr); + inet_aton(broadcast, &a->sin_addr); + ioctl(sock, SIOCSIFNETMASK, &ifr); + ioctl(sock, SIOCGIFFLAGS, &ifr); + ifr.ifr_flags |= flags; + ioctl(sock, SIOCSIFFLAGS, &ifr); + close(sock); +} -void shutdown(int); + +void do_shutdown(int); void signal_handler(int); void chld_handler(int); @@ -121,10 +148,10 @@ int main() for (i = 1; i < NSIG; i++) SETSIG(sa, i, SIG_IGN, SA_RESTART); - SETSIG(sa, SIGINT, shutdown, 0); + SETSIG(sa, SIGINT, do_shutdown, 0); SETSIG(sa, SIGPWR, signal_handler, 0); - SETSIG(sa, SIGUSR1, shutdown, 0); - SETSIG(sa, SIGUSR2, shutdown, 0); + SETSIG(sa, SIGUSR1, do_shutdown, 0); + SETSIG(sa, SIGUSR2, do_shutdown, 0); SETSIG(sa, SIGTERM, signal_handler, 0); SETSIG(sa, SIGALRM, signal_handler, 0); SETSIG(sa, SIGHUP, signal_handler, 0); @@ -211,7 +238,7 @@ int main() } - system("/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0 up > /dev/null"); + ifconfig("lo", "127.0.0.1", "255.0.0.0", IFF_UP); /* * Set random seed @@ -284,7 +311,7 @@ int main() /* * Shut down on INT USR1 USR2 */ -void shutdown(int sig) +void do_shutdown(int sig) { int fd;