Move wpa_supplicant driver initialization into a helper function

Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
Jouni Malinen 2013-11-24 19:36:29 +02:00
parent 7feff06567
commit 73c00fd794

View file

@ -2872,10 +2872,50 @@ int wpas_init_ext_pw(struct wpa_supplicant *wpa_s)
} }
static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s, static int wpas_init_driver(struct wpa_supplicant *wpa_s,
struct wpa_interface *iface) struct wpa_interface *iface)
{ {
const char *ifname, *driver; const char *ifname, *driver;
driver = iface->driver;
next_driver:
if (wpa_supplicant_set_driver(wpa_s, driver) < 0)
return -1;
wpa_s->drv_priv = wpa_drv_init(wpa_s, wpa_s->ifname);
if (wpa_s->drv_priv == NULL) {
const char *pos;
pos = driver ? os_strchr(driver, ',') : NULL;
if (pos) {
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to initialize "
"driver interface - try next driver wrapper");
driver = pos + 1;
goto next_driver;
}
wpa_msg(wpa_s, MSG_ERROR, "Failed to initialize driver "
"interface");
return -1;
}
if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) {
wpa_msg(wpa_s, MSG_ERROR, "Driver interface rejected "
"driver_param '%s'", wpa_s->conf->driver_param);
return -1;
}
ifname = wpa_drv_get_ifname(wpa_s);
if (ifname && os_strcmp(ifname, wpa_s->ifname) != 0) {
wpa_dbg(wpa_s, MSG_DEBUG, "Driver interface replaced "
"interface name with '%s'", ifname);
os_strlcpy(wpa_s->ifname, ifname, sizeof(wpa_s->ifname));
}
return 0;
}
static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
struct wpa_interface *iface)
{
struct wpa_driver_capa capa; struct wpa_driver_capa capa;
wpa_printf(MSG_DEBUG, "Initializing interface '%s' conf '%s' driver " wpa_printf(MSG_DEBUG, "Initializing interface '%s' conf '%s' driver "
@ -2967,38 +3007,9 @@ static int wpa_supplicant_init_iface(struct wpa_supplicant *wpa_s,
* L2 receive handler so that association events are processed before * L2 receive handler so that association events are processed before
* EAPOL-Key packets if both become available for the same select() * EAPOL-Key packets if both become available for the same select()
* call. */ * call. */
driver = iface->driver; if (wpas_init_driver(wpa_s, iface) < 0)
next_driver:
if (wpa_supplicant_set_driver(wpa_s, driver) < 0)
return -1; return -1;
wpa_s->drv_priv = wpa_drv_init(wpa_s, wpa_s->ifname);
if (wpa_s->drv_priv == NULL) {
const char *pos;
pos = driver ? os_strchr(driver, ',') : NULL;
if (pos) {
wpa_dbg(wpa_s, MSG_DEBUG, "Failed to initialize "
"driver interface - try next driver wrapper");
driver = pos + 1;
goto next_driver;
}
wpa_msg(wpa_s, MSG_ERROR, "Failed to initialize driver "
"interface");
return -1;
}
if (wpa_drv_set_param(wpa_s, wpa_s->conf->driver_param) < 0) {
wpa_msg(wpa_s, MSG_ERROR, "Driver interface rejected "
"driver_param '%s'", wpa_s->conf->driver_param);
return -1;
}
ifname = wpa_drv_get_ifname(wpa_s);
if (ifname && os_strcmp(ifname, wpa_s->ifname) != 0) {
wpa_dbg(wpa_s, MSG_DEBUG, "Driver interface replaced "
"interface name with '%s'", ifname);
os_strlcpy(wpa_s->ifname, ifname, sizeof(wpa_s->ifname));
}
if (wpa_supplicant_init_wpa(wpa_s) < 0) if (wpa_supplicant_init_wpa(wpa_s) < 0)
return -1; return -1;