P2P: Add more debug prints for Action frame TX clearing steps
This makes it easier to analyze debug logs for issues related to multiple pending Action TX frames. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
22e8df3a98
commit
e699a7a9b3
2 changed files with 48 additions and 12 deletions
|
@ -118,8 +118,9 @@ static void wpas_send_action_cb(void *eloop_ctx, void *timeout_ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "Off-channel: Sending pending Action frame to "
|
wpa_printf(MSG_DEBUG, "Off-channel: Sending pending Action frame to "
|
||||||
MACSTR " using interface %s",
|
MACSTR " using interface %s (pending_action_tx=%p)",
|
||||||
MAC2STR(wpa_s->pending_action_dst), iface->ifname);
|
MAC2STR(wpa_s->pending_action_dst), iface->ifname,
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
res = wpa_drv_send_action(iface, wpa_s->pending_action_freq, 0,
|
res = wpa_drv_send_action(iface, wpa_s->pending_action_freq, 0,
|
||||||
wpa_s->pending_action_dst,
|
wpa_s->pending_action_dst,
|
||||||
wpa_s->pending_action_src,
|
wpa_s->pending_action_src,
|
||||||
|
@ -183,8 +184,12 @@ void offchannel_send_action_tx_status(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "Off-channel: Delete matching pending action frame");
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"Off-channel: Delete matching pending action frame (dst="
|
||||||
|
MACSTR " pending_action_tx=%p)", MAC2STR(dst),
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
|
wpa_hexdump_buf(MSG_MSGDUMP, "Pending TX frame",
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
wpabuf_free(wpa_s->pending_action_tx);
|
wpabuf_free(wpa_s->pending_action_tx);
|
||||||
wpa_s->pending_action_tx = NULL;
|
wpa_s->pending_action_tx = NULL;
|
||||||
|
|
||||||
|
@ -250,8 +255,11 @@ int offchannel_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
|
||||||
|
|
||||||
if (wpa_s->pending_action_tx) {
|
if (wpa_s->pending_action_tx) {
|
||||||
wpa_printf(MSG_DEBUG, "Off-channel: Dropped pending Action "
|
wpa_printf(MSG_DEBUG, "Off-channel: Dropped pending Action "
|
||||||
"frame TX to " MACSTR,
|
"frame TX to " MACSTR " (pending_action_tx=%p)",
|
||||||
MAC2STR(wpa_s->pending_action_dst));
|
MAC2STR(wpa_s->pending_action_dst),
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
|
wpa_hexdump_buf(MSG_MSGDUMP, "Pending TX frame",
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
wpabuf_free(wpa_s->pending_action_tx);
|
wpabuf_free(wpa_s->pending_action_tx);
|
||||||
}
|
}
|
||||||
wpa_s->pending_action_tx_done = 0;
|
wpa_s->pending_action_tx_done = 0;
|
||||||
|
@ -268,6 +276,12 @@ int offchannel_send_action(struct wpa_supplicant *wpa_s, unsigned int freq,
|
||||||
os_memcpy(wpa_s->pending_action_bssid, bssid, ETH_ALEN);
|
os_memcpy(wpa_s->pending_action_bssid, bssid, ETH_ALEN);
|
||||||
wpa_s->pending_action_freq = freq;
|
wpa_s->pending_action_freq = freq;
|
||||||
wpa_s->pending_action_no_cck = no_cck;
|
wpa_s->pending_action_no_cck = no_cck;
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"Off-channel: Stored pending action frame (dst=" MACSTR
|
||||||
|
" pending_action_tx=%p)",
|
||||||
|
MAC2STR(dst), wpa_s->pending_action_tx);
|
||||||
|
wpa_hexdump_buf(MSG_MSGDUMP, "Pending TX frame",
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
|
|
||||||
if (freq != 0 && wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) {
|
if (freq != 0 && wpa_s->drv_flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX) {
|
||||||
struct wpa_supplicant *iface;
|
struct wpa_supplicant *iface;
|
||||||
|
@ -428,6 +442,9 @@ const void * offchannel_pending_action_tx(struct wpa_supplicant *wpa_s)
|
||||||
*/
|
*/
|
||||||
void offchannel_clear_pending_action_tx(struct wpa_supplicant *wpa_s)
|
void offchannel_clear_pending_action_tx(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"Off-channel: Clear pending Action frame TX (pending_action_tx=%p",
|
||||||
|
wpa_s->pending_action_tx);
|
||||||
wpabuf_free(wpa_s->pending_action_tx);
|
wpabuf_free(wpa_s->pending_action_tx);
|
||||||
wpa_s->pending_action_tx = NULL;
|
wpa_s->pending_action_tx = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1398,6 +1398,25 @@ struct send_action_work {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static void wpas_p2p_free_send_action_work(struct wpa_supplicant *wpa_s)
|
||||||
|
{
|
||||||
|
struct send_action_work *awork = wpa_s->p2p_send_action_work->ctx;
|
||||||
|
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"P2P: Free Action frame radio work @%p (freq=%u dst="
|
||||||
|
MACSTR " src=" MACSTR " bssid=" MACSTR " wait_time=%u)",
|
||||||
|
wpa_s->p2p_send_action_work, awork->freq,
|
||||||
|
MAC2STR(awork->dst), MAC2STR(awork->src),
|
||||||
|
MAC2STR(awork->bssid), awork->wait_time);
|
||||||
|
wpa_hexdump(MSG_DEBUG, "P2P: Freeing pending Action frame",
|
||||||
|
awork->buf, awork->len);
|
||||||
|
os_free(awork);
|
||||||
|
wpa_s->p2p_send_action_work->ctx = NULL;
|
||||||
|
radio_work_done(wpa_s->p2p_send_action_work);
|
||||||
|
wpa_s->p2p_send_action_work = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void wpas_p2p_send_action_work_timeout(void *eloop_ctx,
|
static void wpas_p2p_send_action_work_timeout(void *eloop_ctx,
|
||||||
void *timeout_ctx)
|
void *timeout_ctx)
|
||||||
{
|
{
|
||||||
|
@ -1407,9 +1426,7 @@ static void wpas_p2p_send_action_work_timeout(void *eloop_ctx,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wpa_printf(MSG_DEBUG, "P2P: Send Action frame radio work timed out");
|
wpa_printf(MSG_DEBUG, "P2P: Send Action frame radio work timed out");
|
||||||
os_free(wpa_s->p2p_send_action_work->ctx);
|
wpas_p2p_free_send_action_work(wpa_s);
|
||||||
radio_work_done(wpa_s->p2p_send_action_work);
|
|
||||||
wpa_s->p2p_send_action_work = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1417,11 +1434,13 @@ static void wpas_p2p_action_tx_clear(struct wpa_supplicant *wpa_s)
|
||||||
{
|
{
|
||||||
if (wpa_s->p2p_send_action_work) {
|
if (wpa_s->p2p_send_action_work) {
|
||||||
struct send_action_work *awork;
|
struct send_action_work *awork;
|
||||||
|
|
||||||
awork = wpa_s->p2p_send_action_work->ctx;
|
awork = wpa_s->p2p_send_action_work->ctx;
|
||||||
|
wpa_printf(MSG_DEBUG,
|
||||||
|
"P2P: Clear Action TX work @%p (wait_time=%u)",
|
||||||
|
wpa_s->p2p_send_action_work, awork->wait_time);
|
||||||
if (awork->wait_time == 0) {
|
if (awork->wait_time == 0) {
|
||||||
os_free(awork);
|
wpas_p2p_free_send_action_work(wpa_s);
|
||||||
radio_work_done(wpa_s->p2p_send_action_work);
|
|
||||||
wpa_s->p2p_send_action_work = NULL;
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* In theory, this should not be needed, but number of
|
* In theory, this should not be needed, but number of
|
||||||
|
|
Loading…
Reference in a new issue