"driver to remain on channel (%u "
"MHz) for Action Frame TX",
wpa_s->pending_action_freq);
- }
+ } else
+ wpa_s->roc_waiting_drv_freq =
+ wpa_s->pending_action_freq;
}
return;
}
}
wpa_s->pending_action_without_roc = 0;
+ if (wpa_s->roc_waiting_drv_freq == freq) {
+ wpa_printf(MSG_DEBUG, "P2P: Already waiting for driver to get "
+ "to frequency %u MHz; continue waiting to send the "
+ "Action frame", freq);
+ return 0;
+ }
+
wpa_printf(MSG_DEBUG, "P2P: Schedule Action frame to be transmitted "
"once the driver gets to the requested channel");
if (wait_time > wpa_s->max_remain_on_chan)
"Frame TX", freq);
return -1;
}
+ wpa_s->roc_waiting_drv_freq = freq;
return 0;
}
if (wpa_s->off_channel_freq) {
wpa_drv_cancel_remain_on_channel(wpa_s);
wpa_s->off_channel_freq = 0;
+ wpa_s->roc_waiting_drv_freq = 0;
}
}
if (wpa_s->off_channel_freq) {
wpa_drv_cancel_remain_on_channel(wpa_s);
wpa_s->off_channel_freq = 0;
+ wpa_s->roc_waiting_drv_freq = 0;
}
if (res->status) {
wpa_s->pending_listen_freq = 0;
return -1;
}
+ wpa_s->roc_waiting_drv_freq = freq;
return 0;
}
if (wpa_s->off_channel_freq) {
wpa_drv_cancel_remain_on_channel(wpa_s);
wpa_s->off_channel_freq = 0;
+ wpa_s->roc_waiting_drv_freq = 0;
}
wpa_drv_probe_req_report(wpa_s, 0);
}
void wpas_p2p_remain_on_channel_cb(struct wpa_supplicant *wpa_s,
unsigned int freq, unsigned int duration)
{
+ wpa_s->roc_waiting_drv_freq = 0;
wpa_s->off_channel_freq = freq;
wpas_send_action_cb(wpa_s, NULL);
if (wpa_s->off_channel_freq == wpa_s->pending_listen_freq) {