diff options
Diffstat (limited to 'wpa_supplicant/p2p_supplicant.c')
-rw-r--r-- | wpa_supplicant/p2p_supplicant.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index b0eb594..42c062f 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -4137,6 +4137,22 @@ void wpas_p2p_rx_action(struct wpa_supplicant *wpa_s, const u8 *da, if (wpa_s->global->p2p == NULL) return; + /* + * Discard an Rx duplication created by mac80211 rx path + * when receiving public action frames with mismatched BSSID + * In case of separate GO interface such public action frames (prov disc + * dev disc, invites) these should be handled by the P2P dev interface + */ + if (wpa_s->p2p_group_interface == P2P_GROUP_INTERFACE_GO && + category == WLAN_ACTION_PUBLIC && + wpa_s->p2p_group && + os_memcmp(bssid, p2p_group_get_interface_addr(wpa_s->p2p_group), + ETH_ALEN)) { + wpa_printf(MSG_DEBUG, "Discard duplicate RX action event on" + " P2P GO interface"); + return; + } + p2p_rx_action(wpa_s->global->p2p, da, sa, bssid, category, data, len, freq); } @@ -4973,13 +4989,6 @@ int wpas_p2p_in_progress(struct wpa_supplicant *wpa_s) return p2p_in_progress(wpa_s->global->p2p); } -int wpas_p2p_non_idle(struct wpa_supplicant *wpa_s) -{ - if (wpa_s->global->p2p_disabled || wpa_s->global->p2p == NULL) - return 0; - - return p2p_non_idle(wpa_s->global->p2p); -} void wpas_p2p_network_removed(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid) |