From 3bafb0d842a9c5b07f66eda43a100a8af1fd0bba Mon Sep 17 00:00:00 2001 From: Andrei Otcheretianski Date: Tue, 8 Sep 2015 12:46:19 +0300 Subject: [PATCH] P2P: Trigger channel selection correctly during CSA Do not consider moving GOs to a new channel if one of them is in the middle of CSA. In addition, call wpas_p2p_update_channel_list() after EVENT_CH_SWITCH is handled. Signed-off-by: Andrei Otcheretianski --- wpa_supplicant/events.c | 2 ++ wpa_supplicant/p2p_supplicant.c | 17 +++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 23cf127f2..f15630c95 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -3473,6 +3473,8 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event, data->ch_switch.ch_width, data->ch_switch.cf1, data->ch_switch.cf2); + + wpas_p2p_update_channel_list(wpa_s, WPAS_P2P_CHANNEL_UPDATE_CS); break; #ifdef NEED_AP_MLME case EVENT_DFS_RADAR_DETECTED: diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index dbfae3e7e..5ca058a05 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -8667,6 +8667,13 @@ static void wpas_p2p_move_go(void *eloop_ctx, void *timeout_ctx) wpas_p2p_go_update_common_freqs(wpa_s); + /* Do not move GO in the middle of a CSA */ + if (hostapd_csa_in_progress(wpa_s->ap_iface)) { + wpa_printf(MSG_DEBUG, + "P2P: CSA is in progress - not moving GO"); + return; + } + /* * First, try a channel switch flow. If it is not supported or fails, * take down the GO and bring it up again. @@ -8777,6 +8784,16 @@ static void wpas_p2p_consider_moving_one_go(struct wpa_supplicant *wpa_s, return; } + /* + * Do not consider moving GO if it is in the middle of a CSA. When the + * CSA is finished this flow should be retriggered. + */ + if (hostapd_csa_in_progress(wpa_s->ap_iface)) { + wpa_dbg(wpa_s, MSG_DEBUG, + "P2P: Not initiating a GO frequency change - CSA is in progress"); + return; + } + if (invalid_freq && !wpas_p2p_disallowed_freq(wpa_s->global, freq)) timeout = P2P_GO_FREQ_CHANGE_TIME; else