diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 7f1f526c2..1af83f151 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -550,6 +550,12 @@ struct wpa_driver_capa { * max_remain_on_chan - Maximum remain-on-channel duration in msec */ unsigned int max_remain_on_chan; + + /** + * max_stations - Maximum number of associated stations the driver + * supports in AP mode + */ + unsigned int max_stations; }; diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index fa6cfed00..8b1d5c4bd 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -2160,7 +2160,7 @@ int wpas_p2p_init(struct wpa_global *global, struct wpa_supplicant *wpa_s) p2p.concurrent_operations = !!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_CONCURRENT); - p2p.max_peers = 100; + p2p.max_peers = wpa_s->max_stations ? wpa_s->max_stations : 100; if (wpa_s->conf->p2p_ssid_postfix) { p2p.ssid_postfix_len = diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index bbfa29166..61d1c87e4 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -2101,6 +2101,7 @@ next_driver: } wpa_s->max_scan_ssids = capa.max_scan_ssids; wpa_s->max_remain_on_chan = capa.max_remain_on_chan; + wpa_s->max_stations = capa.max_stations; } if (wpa_s->max_remain_on_chan == 0) wpa_s->max_remain_on_chan = 1000; diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index ca3a27334..df4a24ded 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -408,6 +408,7 @@ struct wpa_supplicant { unsigned int drv_flags; int max_scan_ssids; unsigned int max_remain_on_chan; + unsigned int max_stations; int pending_mic_error_report; int pending_mic_error_pairwise;