Message ID | 1328219311.14368.29.camel@dcbw.foobar.com |
---|---|
State | Accepted |
Commit | 0f4668ceac37e2c98ce6068bd255d0915974a706 |
Headers | show |
On Thu, Feb 02, 2012 at 03:48:31PM -0600, Dan Williams wrote: > 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. Thanks! Applied.
On Sat, 2012-02-04 at 20:11 +0200, Jouni Malinen wrote: > On Thu, Feb 02, 2012 at 03:48:31PM -0600, Dan Williams wrote: > > 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. > > Thanks! Applied. Angie; also relevant for 1.0. Thanks! Dan
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;