<div><div>Sorry for a delayed reply. Please find my comments inline.</div><div class="im" style="color:rgb(80,0,80)"><br>> No, this is different case. I was thinking of a case that does not have<br>> any concurrency at all, i.e., just a single P2P client interface that is<br>
> associated with a GO that decides to change channels. Though, maybe I<br>> missed the part of shared_freq>0 not hitting in this particular<br>> sequence.<div><br></div></div><div>You are right. The shared_freq won't be returning a greater than zero in this case.</div>
<div class="im" style="color:rgb(80,0,80)"><div><br></div><div><br></div><div><div>>> e) If the priority is not set, the default behavior is to notify the<br>>> upper application or framework. The supplicant<br>
>> won't do any policing.<br><br></div>> Hmm.. How is this different from (d) ?</div></div><div>Both d and e are handled in the same way. But just i had put mentioned it separately to indicate that both are handled. </div>
<div><br></div><div>I have took your set of patches and did the below additions and generated 4 patches.<br>1. Moved the prioritize setting to wpa_global</div><div>2. Applied the below two changes.</div><div>+++++++++++++++++++++</div>
<div><div class="im" style="color:rgb(80,0,80)"><div>> Two more changes from my side which are not in the current set of patches.<br>> a) I later felt that providing network_id would be better than providing<br>> ssid and bssid during WPA_EVENT_FREQ_CONFLICT.<br>
> +▷⋅⋅▷⋅⋅⋅▷⋅⋅⋅wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_FREQ_CONFLICT<br>> +▷⋅⋅▷⋅⋅⋅▷⋅⋅⋅▷⋅⋅⋅" ssid=%s bssid=" MACSTR,<br>> +▷⋅⋅▷⋅⋅⋅▷⋅⋅⋅▷⋅⋅⋅wpa_ssid_txt(ssid->ssid, ssid->ssid_len),<br>> +▷⋅⋅▷⋅⋅⋅▷⋅⋅⋅▷⋅⋅⋅MAC2STR(wpa_s->pending_bssid));<br>
><br>> changed to<br>><br>> +▷⋅⋅▷⋅⋅⋅▷⋅⋅⋅wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_FREQ_CONFLICT<br>> " id=%d", ssid->id);.<br><br></div></div><div class="im" style="color:rgb(80,0,80)"><div>> b) I have added a new reason code to P2P_GROUP_REMOVE<br>
> reason=FREQ_CONFLICT. This is useful when a p2p group gets removed when STA<br>> connection has more priority.<br><br></div></div>+++++++++++++++++++++ Till here ++++++++++++++</div><div><br></div><div>3. Still some things are left behind. I will work on these once the attached</div>
<div>patches are frozen.</div><div> a) supplicant gets the STA connected event while we already have a p2p</div><div class="im" style="color:rgb(80,0,80)"> connection on some other channel<br> (roaming handled by driver/firmware).<div>
<br></div></div><div class="im"><div style> b) The concurrent-3.patch expansion [go_switch_channel].</div><div style><br></div><div style>I am splitting the reply into 4 RFC patches.</div><div style><br></div><div style>First one: </div>
<div style><br></div><div style><div><font color="#222222" face="arial, sans-serif"> [PATCH] Add an additional param to prioritize either sta or p2p</font></div><div><font color="#222222" face="arial, sans-serif"> connection to resolve conflicts arising during single</font></div>
<div><font color="#222222" face="arial, sans-serif"> channel concurrency</font></div><div><font color="#222222" face="arial, sans-serif"> Signed-hostap: Jithu Jance <<a href="mailto:jithu@broadcom.com">jithu@broadcom.com</a>></font></div>
<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">---</font></div><div><font color="#222222" face="arial, sans-serif"> wpa_supplicant/ctrl_iface.c | 14 ++++++++++++++</font></div>
<div><font color="#222222" face="arial, sans-serif"> wpa_supplicant/wpa_supplicant.c | 12 +++++++++++-</font></div><div><font color="#222222" face="arial, sans-serif"> wpa_supplicant/wpa_supplicant_i.h | 2 ++</font></div>
<div><font color="#222222" face="arial, sans-serif"> 3 files changed, 27 insertions(+), 1 deletions(-)</font></div><div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c</font></div>
<div><font color="#222222" face="arial, sans-serif">index 11f4674..2e12845 100644</font></div><div><font color="#222222" face="arial, sans-serif">--- a/wpa_supplicant/ctrl_iface.c</font></div><div><font color="#222222" face="arial, sans-serif">+++ b/wpa_supplicant/ctrl_iface.c</font></div>
<div><font color="#222222" face="arial, sans-serif">@@ -3418,6 +3418,20 @@ static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd)</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</font></div>
<div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>}</font></div><div><font color="#222222" face="arial, sans-serif"> </font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>if (os_strcmp(cmd, "conc_priority") == 0) {</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>if(os_strncmp(cmd+strlen("conc_priority")+1, "sta", 3) == 0)</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                        </span>os_strncpy(wpa_s->global->conc_priority, "sta", 3);</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>else if(os_strncmp(cmd+strlen("conc_priority")+1, "p2p", 3) == 0)</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                        </span>os_strncpy(wpa_s->global->conc_priority, "p2p", 3);</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>else {</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                        </span>wpa_printf(MSG_ERROR, " conc_priority arg should be either sta or p2p");</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                        </span>return -1;</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>}</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>wpa_printf(MSG_DEBUG, "Single Channel Concurrency: Prioritize %s",</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                        </span> wpa_s->global->conc_priority);</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>}</font></div>
<div><font color="#222222" face="arial, sans-serif">+</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>if (os_strcmp(cmd, "force_long_sd") == 0) {</font></div>
<div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">                </span>wpa_s->force_long_sd = atoi(param);</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</font></div>
<div><font color="#222222" face="arial, sans-serif">diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c</font></div><div><font color="#222222" face="arial, sans-serif">index fdee407..1004746 100644</font></div>
<div><font color="#222222" face="arial, sans-serif">--- a/wpa_supplicant/wpa_supplicant.c</font></div><div><font color="#222222" face="arial, sans-serif">+++ b/wpa_supplicant/wpa_supplicant.c</font></div><div><font color="#222222" face="arial, sans-serif">@@ -3152,9 +3152,19 @@ void wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid)</font></div>
<div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">                                </span>1000 * (timeout % 1000));</font></div><div><font color="#222222" face="arial, sans-serif"> }</font></div>
<div><font color="#222222" face="arial, sans-serif"> </font></div><div><font color="#222222" face="arial, sans-serif">-</font></div><div><font color="#222222" face="arial, sans-serif"> int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s)</font></div>
<div><font color="#222222" face="arial, sans-serif"> {</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>return wpa_s->conf->ap_scan == 2 ||</font></div>
<div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">                </span>(wpa_s->drv_flags & WPA_DRIVER_FLAGS_BSS_SELECTION);</font></div><div><font color="#222222" face="arial, sans-serif"> }</font></div>
<div><font color="#222222" face="arial, sans-serif">+</font></div><div><font color="#222222" face="arial, sans-serif">+int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s)</font></div><div><font color="#222222" face="arial, sans-serif">+{</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>if(os_strncmp(wpa_s->global->conc_priority, "p2p", 3) == 0)</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>return 1;</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>else if(os_strncmp(wpa_s->global->conc_priority, "sta", 3) == 0)</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">                </span>return 0;</font></div>
<div><font color="#222222" face="arial, sans-serif">+</font></div><div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>/* IF conc_priority is not set, return -1 */</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>return -1;</font></div><div><font color="#222222" face="arial, sans-serif">+}</font></div><div><font color="#222222" face="arial, sans-serif">diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h</font></div>
<div><font color="#222222" face="arial, sans-serif">index 0ba1935..2ffefde 100644</font></div><div><font color="#222222" face="arial, sans-serif">--- a/wpa_supplicant/wpa_supplicant_i.h</font></div><div><font color="#222222" face="arial, sans-serif">+++ b/wpa_supplicant/wpa_supplicant_i.h</font></div>
<div><font color="#222222" face="arial, sans-serif">@@ -228,6 +228,7 @@ struct wpa_global {</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>int cross_connection;</font></div>
<div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>struct wpa_freq_range *p2p_disallow_freq;</font></div><div><font color="#222222" face="arial, sans-serif"> <span class="Apple-tab-span" style="white-space:pre">        </span>unsigned int num_p2p_disallow_freq;</font></div>
<div><font color="#222222" face="arial, sans-serif">+<span class="Apple-tab-span" style="white-space:pre">        </span>char conc_priority[5]; /* "sta" or "p2p" */</font></div><div><font color="#222222" face="arial, sans-serif"> };</font></div>
<div><font color="#222222" face="arial, sans-serif"> </font></div><div><font color="#222222" face="arial, sans-serif"> </font></div><div><font color="#222222" face="arial, sans-serif">@@ -612,6 +613,7 @@ void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s);</font></div>
<div><font color="#222222" face="arial, sans-serif"> void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s);</font></div><div><font color="#222222" face="arial, sans-serif"> void wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid);</font></div>
<div><font color="#222222" face="arial, sans-serif"> int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s);</font></div><div><font color="#222222" face="arial, sans-serif">+int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s);</font></div>
<div><font color="#222222" face="arial, sans-serif"> </font></div><div><font color="#222222" face="arial, sans-serif"> /* events.c */</font></div><div><font color="#222222" face="arial, sans-serif"> void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);</font></div>
<div><font color="#222222" face="arial, sans-serif">-- </font></div><div><font color="#222222" face="arial, sans-serif">1.7.4.1</font></div><div style="font-family:arial,sans-serif;font-size:13px;color:rgb(80,0,80)"><br></div>
</div><div style><span style="color:rgb(34,34,34)"><br></span></div><div style="color:rgb(80,0,80)"><br></div></div></div><div><br></div><div><br></div><br clear="all"><b style="color:rgb(102,102,102)"> Jιтнυ נαη¢є </b><br>