300-nl80211_multicall_fixes.patch 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. --- a/src/drivers/driver_nl80211.c
  2. +++ b/src/drivers/driver_nl80211.c
  3. @@ -2931,6 +2931,7 @@ static void * wpa_driver_nl80211_init(vo
  4. drv->monitor_sock = -1;
  5. drv->eapol_tx_sock = -1;
  6. drv->ap_scan_as_station = NL80211_IFTYPE_UNSPECIFIED;
  7. + drv->nlmode = NL80211_IFTYPE_STATION;
  8. if (wpa_driver_nl80211_init_nl(drv)) {
  9. os_free(drv);
  10. @@ -3245,17 +3246,12 @@ static void wpa_driver_nl80211_send_rfki
  11. wpa_supplicant_event(timeout_ctx, EVENT_INTERFACE_DISABLED, NULL);
  12. }
  13. -
  14. static int
  15. -wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
  16. +wpa_driver_nl80211_finish_drv_init_sta(struct wpa_driver_nl80211_data *drv,
  17. + int *send_rfkill_event)
  18. {
  19. struct i802_bss *bss = &drv->first_bss;
  20. - int send_rfkill_event = 0;
  21. - drv->ifindex = if_nametoindex(bss->ifname);
  22. - drv->first_bss.ifindex = drv->ifindex;
  23. -
  24. -#ifndef HOSTAPD
  25. /*
  26. * Make sure the interface starts up in station mode unless this is a
  27. * dynamically added interface (e.g., P2P) that was already configured
  28. @@ -3274,7 +3270,7 @@ wpa_driver_nl80211_finish_drv_init(struc
  29. "interface '%s' due to rfkill",
  30. bss->ifname);
  31. drv->if_disabled = 1;
  32. - send_rfkill_event = 1;
  33. + *send_rfkill_event = 1;
  34. } else {
  35. wpa_printf(MSG_ERROR, "nl80211: Could not set "
  36. "interface '%s' UP", bss->ifname);
  37. @@ -3284,7 +3280,19 @@ wpa_driver_nl80211_finish_drv_init(struc
  38. netlink_send_oper_ifla(drv->global->netlink, drv->ifindex,
  39. 1, IF_OPER_DORMANT);
  40. -#endif /* HOSTAPD */
  41. +}
  42. +
  43. +static int
  44. +wpa_driver_nl80211_finish_drv_init(struct wpa_driver_nl80211_data *drv)
  45. +{
  46. + struct i802_bss *bss = &drv->first_bss;
  47. + int send_rfkill_event = 0;
  48. +
  49. + drv->ifindex = if_nametoindex(bss->ifname);
  50. + drv->first_bss.ifindex = drv->ifindex;
  51. +
  52. + if (drv->nlmode == NL80211_IFTYPE_STATION)
  53. + wpa_driver_nl80211_finish_drv_init_sta(drv, &send_rfkill_event);
  54. if (wpa_driver_nl80211_capa(drv))
  55. return -1;