| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- --- a/src/drivers/driver_nl80211.c
- +++ b/src/drivers/driver_nl80211.c
- @@ -2289,6 +2289,7 @@ static void * wpa_driver_nl80211_init(vo
- drv->monitor_ifidx = -1;
- drv->monitor_sock = -1;
- drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED;
- + drv->nlmode = NL80211_IFTYPE_STATION;
-
- if (wpa_driver_nl80211_init_nl(drv)) {
- os_free(drv);
- @@ -2446,37 +2447,37 @@ wpa_driver_nl80211_finish_drv_init(struc
- drv->ifindex = if_nametoindex(bss->ifname);
- drv->first_bss.ifindex = drv->ifindex;
-
- -#ifndef HOSTAPD
- - /*
- - * Make sure the interface starts up in station mode unless this is a
- - * dynamically added interface (e.g., P2P) that was already configured
- - * with proper iftype.
- - */
- - if ((drv->global == NULL ||
- - drv->ifindex != drv->global->if_add_ifindex) &&
- - wpa_driver_nl80211_set_mode(bss, NL80211_IFTYPE_STATION) < 0) {
- - wpa_printf(MSG_ERROR, "nl80211: Could not configure driver to "
- - "use managed mode");
- - return -1;
- - }
- -
- - if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1)) {
- - if (rfkill_is_blocked(drv->rfkill)) {
- - wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable "
- - "interface '%s' due to rfkill",
- - bss->ifname);
- - drv->if_disabled = 1;
- - send_rfkill_event = 1;
- - } else {
- - wpa_printf(MSG_ERROR, "nl80211: Could not set "
- - "interface '%s' UP", bss->ifname);
- + if (drv->nlmode == NL80211_IFTYPE_STATION) {
- + /*
- + * Make sure the interface starts up in station mode unless this is a
- + * dynamically added interface (e.g., P2P) that was already configured
- + * with proper iftype.
- + */
- + if ((drv->global == NULL ||
- + drv->ifindex != drv->global->if_add_ifindex) &&
- + wpa_driver_nl80211_set_mode(bss, NL80211_IFTYPE_STATION) < 0) {
- + wpa_printf(MSG_ERROR, "nl80211: Could not configure driver to "
- + "use managed mode");
- return -1;
- }
- - }
-
- - netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
- - 1, IF_OPER_DORMANT);
- -#endif /* HOSTAPD */
- + if (linux_set_iface_flags(drv->global->ioctl_sock, bss->ifname, 1)) {
- + if (rfkill_is_blocked(drv->rfkill)) {
- + wpa_printf(MSG_DEBUG, "nl80211: Could not yet enable "
- + "interface '%s' due to rfkill",
- + bss->ifname);
- + drv->if_disabled = 1;
- + send_rfkill_event = 1;
- + } else {
- + wpa_printf(MSG_ERROR, "nl80211: Could not set "
- + "interface '%s' UP", bss->ifname);
- + return -1;
- + }
- + }
- +
- + netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
- + 1, IF_OPER_DORMANT);
- + }
-
- if (wpa_driver_nl80211_capa(drv))
- return -1;
|