The plot thickens.
The logs as far as I can see always state "Starting AP scan for wildcard SSID", not the "Interleave with specific" variant. So maybe it is max_ssid==1 that is the culprit, which from skimming through the related code seems unlikely to be 1 anyway.
"Starting AP scan for wildcard SSID" <-- this I see a lot
the interleave with ... didn;t see at all.
it seems systematic, press the power button to send the device to sleep and there you have it
in dmesg :
<4>[44401.626645] dhdsdio_bussleep: request WAKE (currently SLEEP)
<4>[44401.687730] wl_android_priv_cmd: Android private cmd "SETSUSPENDMODE 1" on wlan0
<4>[44401.692498] wl_android_set_suspendmode: Suspend Mode 1
<4>[44401.750066] dhdsdio_bussleep: request SLEEP (currently WAKE)
right after that I get the list on wireshark
but doing so in wpa_cli doesn't i.e:
> driver SETSUSPENDMODE 1
wpa_cli_cmd_driver: DRIVER SETSUSPENDMODE 1
OK
dmesg reports it but nothing happens in wireshark
EDIT :
D/wpa_supplicant(10715): wlan0: nl80211: sched_scan request
D/wpa_supplicant(10715): nl80211: Sched scan requested (ret=0) - scan interval 10000 msec
D/wpa_supplicant(10715): nl80211: Drv Event 75 (NL80211_CMD_START_SCHED_SCAN) received for wlan0
D/wpa_supplicant(10715): wlan0: nl80211: Sched scan started
D/wpa_supplicant(10715): RX ctrl_iface - hexdump(len=23): 44 52 49 56 45 52 20 53 45 54 53 55 53 50 45 4e 44 4d 4f 44 45 20 31
D/wpa_supplicant(10715): wlan0: Control interface command 'DRIVER SETSUSPENDMODE 1'
D/wpa_supplicant(10715): wpa_driver_nl80211_driver_cmd len = 0, 0
in logcat whenever the device goes to sleep (press the button)
NL80211_CMD_START_SCHED_SCAN seems to be related
this the function :
wpa_driver_nl80211_sched_scan , someone is calling it with the whole PNL.
EDIT I think I narrowed it down to pno_start
Code:
static int pno_start(struct wpa_supplicant *wpa_s)
{
int ret, interval;
size_t i, num_ssid;
struct wpa_ssid *ssid;
struct wpa_driver_scan_params params;
if (wpa_s->pno)
return 0;
if ((wpa_s->wpa_state > WPA_SCANNING) &&
(wpa_s->wpa_state <= WPA_COMPLETED)) {
wpa_printf(MSG_ERROR, "PNO: In assoc process");
return -EAGAIN;
}
if (wpa_s->wpa_state == WPA_SCANNING) {
wpa_supplicant_cancel_sched_scan(wpa_s);
wpa_supplicant_cancel_scan(wpa_s);
}
os_memset(¶ms, 0, sizeof(params));
num_ssid = 0;
ssid = wpa_s->conf->ssid;
while (ssid) {
if (!wpas_network_disabled(wpa_s, ssid))
num_ssid++;
ssid = ssid->next;
}
if (num_ssid > WPAS_MAX_SCAN_SSIDS) {
wpa_printf(MSG_DEBUG, "PNO: Use only the first %u SSIDs from "
"%u", WPAS_MAX_SCAN_SSIDS, (unsigned int) num_ssid);
num_ssid = WPAS_MAX_SCAN_SSIDS;
}
if (num_ssid == 0) {
wpa_printf(MSG_DEBUG, "PNO: No configured SSIDs");
return -1;
}
params.filter_ssids = os_malloc(sizeof(struct wpa_driver_scan_filter) *
num_ssid);
if (params.filter_ssids == NULL)
return -1;
i = 0;
ssid = wpa_s->conf->ssid;
while (ssid) {
if (!wpas_network_disabled(wpa_s, ssid)) {
params.ssids[i].ssid = ssid->ssid;
params.ssids[i].ssid_len = ssid->ssid_len;
params.num_ssids++;
os_memcpy(params.filter_ssids[i].ssid, ssid->ssid,
ssid->ssid_len);
params.filter_ssids[i].ssid_len = ssid->ssid_len;
params.num_filter_ssids++;
i++;
if (i == num_ssid)
break;
}
ssid = ssid->next;
}
if (wpa_s->conf->filter_rssi)
params.filter_rssi = wpa_s->conf->filter_rssi;
interval = wpa_s->conf->sched_scan_interval ?
wpa_s->conf->sched_scan_interval : 10;
ret = wpa_drv_sched_scan(wpa_s, ¶ms, interval * 1000);
os_free(params.filter_ssids);
if (ret == 0)
wpa_s->pno = 1;
return ret;
}
It gathers the whole list and start a scheduled scan for those items specifically
something to do with scan offload or something like that ...