P2P: Cancel offchannel TX wait on PD Response TX status

PD Response is sent out using a 200 ms offchannel wait, but that wait
was not cancelled on TX status report. This could result in offchannel
operation being left waiting unnecessarily long. Fix this by making the
P2P_NO_PENDING_ACTION case in Action TX callback cancel the wait if a
pending wait is marked (and mark this for PD Response).

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2014-02-27 16:36:03 +02:00 committed by Jouni Malinen
parent 1578796a31
commit c5c2d942c5
3 changed files with 7 additions and 1 deletions

View File

@ -2990,6 +2990,10 @@ void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
p2p->pending_action_state = P2P_NO_PENDING_ACTION; p2p->pending_action_state = P2P_NO_PENDING_ACTION;
switch (state) { switch (state) {
case P2P_NO_PENDING_ACTION: case P2P_NO_PENDING_ACTION:
if (p2p->send_action_in_progress) {
p2p->send_action_in_progress = 0;
p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
}
if (p2p->after_scan_tx_in_progress) { if (p2p->after_scan_tx_in_progress) {
p2p->after_scan_tx_in_progress = 0; p2p->after_scan_tx_in_progress = 0;
if (p2p->start_after_scan != P2P_AFTER_SCAN_NOTHING && if (p2p->start_after_scan != P2P_AFTER_SCAN_NOTHING &&

View File

@ -389,6 +389,7 @@ struct p2p_data {
u8 after_scan_peer[ETH_ALEN]; u8 after_scan_peer[ETH_ALEN];
struct p2p_pending_action_tx *after_scan_tx; struct p2p_pending_action_tx *after_scan_tx;
unsigned int after_scan_tx_in_progress:1; unsigned int after_scan_tx_in_progress:1;
unsigned int send_action_in_progress:1;
/* Requested device types for find/search */ /* Requested device types for find/search */
unsigned int num_req_dev_types; unsigned int num_req_dev_types;

View File

@ -224,7 +224,8 @@ out:
p2p->cfg->dev_addr, p2p->cfg->dev_addr,
wpabuf_head(resp), wpabuf_len(resp), 200) < 0) { wpabuf_head(resp), wpabuf_len(resp), 200) < 0) {
p2p_dbg(p2p, "Failed to send Action frame"); p2p_dbg(p2p, "Failed to send Action frame");
} } else
p2p->send_action_in_progress = 1;
wpabuf_free(resp); wpabuf_free(resp);