[RFC] [PATCH] Try fallback drivers if global init for preferred drivers fails

Dan Williams dcbw
Thu Feb 2 13:48:31 PST 2012


Driver global init was considered a hard failure.  Thus if, for
example, you used the Broadcom STA driver and didn't have nl80211
or cfg80211 loaded into the kernel, and specified a driver value
of "nl80211,wext", the nl80211 driver's global init would fail
with the following message:

nl80211: 'nl80211' generic netlink not found
Failed to initialize driver 'nl80211'

but since global init was a hard failure, creating the supplicant
interface would fail and the WEXT driver would not be tried.
Give other drivers a chance instead.

Signed-hostap: Dan Williams <dcbw at redhat.com>
---

* Only compile tested; does this look like the right thing to
do here?  Relevant bug is:

https://bugzilla.redhat.com/show_bug.cgi?id=783712


 wpa_supplicant/wpa_supplicant.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
index ee5ca8d..6320918 100644
--- a/wpa_supplicant/wpa_supplicant.c
+++ b/wpa_supplicant/wpa_supplicant.c
@@ -1941,8 +1941,11 @@ static int wpa_supplicant_set_driver(struct wpa_supplicant *wpa_s,
 		for (i = 0; wpa_drivers[i]; i++) {
 			if (os_strlen(wpa_drivers[i]->name) == len &&
 			    os_strncmp(driver, wpa_drivers[i]->name, len) ==
-			    0)
-				return select_driver(wpa_s, i);
+			    0) {
+				/* First driver that succeeds wins */
+				if (select_driver(wpa_s, i) == 0)
+					return 0;
+			}
 		}
 
 		driver = pos + 1;
-- 
1.7.7.6





More information about the Hostap mailing list