From 2923175afa8b253cffdea00c1087c29e877d7fea Mon Sep 17 00:00:00 2001 From: Arnaud Patard Date: Fri, 18 Mar 2011 21:21:26 +0000 Subject: - try to handle the built-in module case before trying to load a module. --- mdk-stage1/modules.c | 11 +++++++++++ mdk-stage1/network.c | 12 ++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) (limited to 'mdk-stage1') diff --git a/mdk-stage1/modules.c b/mdk-stage1/modules.c index 5f02d2a6d..9cbb43598 100644 --- a/mdk-stage1/modules.c +++ b/mdk-stage1/modules.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include "log.h" #include "utils.h" @@ -287,6 +288,8 @@ static void add_modules_conf(char * str) int module_already_present(const char * name) { FILE * f; + struct stat sb; + char *path; int answ = 0; if ((f = fopen("/proc/modules", "rb"))) { @@ -298,6 +301,14 @@ int module_already_present(const char * name) } fclose(f); } + + /* built-in module case. try to find them through sysfs */ + if (!answ) { + asprintf(&path, "/sys/module/%s", name); + if (!stat(path, &sb)) + answ = 1; + free(path); + } return answ; } diff --git a/mdk-stage1/network.c b/mdk-stage1/network.c index 85704b805..a1af8af0f 100644 --- a/mdk-stage1/network.c +++ b/mdk-stage1/network.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -568,8 +569,15 @@ static enum return_type bringup_networking(struct interface_info * intf) { static struct interface_info loopback; enum return_type results; - - my_insmod("af_packet", ANY_DRIVER_TYPE, NULL, 1); + int fd; + + /* try to find if module already loaded or built-in to avoid failing */ + /* badly */ + fd = open("/proc/net/packet", O_RDONLY); + if (fd < 0) + my_insmod("af_packet", ANY_DRIVER_TYPE, NULL, 1); + else + close(fd); do { results = configure_wireless(intf->device); -- cgit v1.2.1