]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
P2P: Add preference setting for concurrent use cases
authorJithu Jance <jithu@broadcom.com>
Thu, 9 Aug 2012 18:14:54 +0000 (21:14 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 9 Aug 2012 20:05:50 +0000 (23:05 +0300)
Add an additional parameter to prioritize either sta or p2p connection
to resolve conflicts arising during single channel concurrency.

Signed-hostap: Jithu Jance <jithu@broadcom.com>

(manual merge of commit b9cfc09a81b1f6449bbd0754a2bdc4d790766662)

wpa_supplicant/ctrl_iface.c
wpa_supplicant/wpa_supplicant.c
wpa_supplicant/wpa_supplicant_i.h

index 1489922598e3d7f2d6f5a9b4fa0b050cdf6a0457..5445149b02f02c4986488ca2add7b80d2b09e910 100644 (file)
@@ -3154,6 +3154,20 @@ static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd)
                return 0;
        }
 
+       if (os_strcmp(cmd, "conc_pref") == 0) {
+               if (os_strcmp(param, "sta") == 0)
+                       wpa_s->global->conc_pref = WPA_CONC_PREF_STA;
+               else if (os_strcmp(param, "p2p") == 0)
+                       wpa_s->global->conc_pref = WPA_CONC_PREF_P2P;
+               else {
+                       wpa_printf(MSG_INFO, "Invalid conc_pref value");
+                       return -1;
+               }
+               wpa_printf(MSG_DEBUG, "Single channel concurrency preference: "
+                          "%s", param);
+               return 0;
+       }
+
        if (os_strcmp(cmd, "force_long_sd") == 0) {
                wpa_s->force_long_sd = atoi(param);
                return 0;
index eff04597fea2c870db3a8695113375ae237eedf1..de3fb638535f51890ea0b1f4f042265c4d6d222e 100644 (file)
@@ -3099,3 +3099,13 @@ int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s)
        return wpa_s->conf->ap_scan == 2 ||
                (wpa_s->drv_flags & WPA_DRIVER_FLAGS_BSS_SELECTION);
 }
+
+
+int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s)
+{
+       if (wpa_s->global->conc_pref == WPA_CONC_PREF_P2P)
+               return 1;
+       if (wpa_s->global->conc_pref == WPA_CONC_PREF_STA)
+               return 0;
+       return -1;
+}
index 8c9f4a8ab3f4f86a4afd02e497dbee3b0554fc58..e1175046626fbce7cf1bad82ceec86fb7427192c 100644 (file)
@@ -220,6 +220,11 @@ struct wpa_global {
        struct dl_list p2p_srv_upnp; /* struct p2p_srv_upnp */
        int p2p_disabled;
        int cross_connection;
+       enum wpa_conc_pref {
+               WPA_CONC_PREF_NOT_SET,
+               WPA_CONC_PREF_STA,
+               WPA_CONC_PREF_P2P
+       } conc_pref;
 };
 
 
@@ -596,6 +601,7 @@ void wpa_supplicant_update_config(struct wpa_supplicant *wpa_s);
 void wpa_supplicant_clear_status(struct wpa_supplicant *wpa_s);
 void wpas_connection_failed(struct wpa_supplicant *wpa_s, const u8 *bssid);
 int wpas_driver_bss_selection(struct wpa_supplicant *wpa_s);
+int wpas_is_p2p_prioritized(struct wpa_supplicant *wpa_s);
 
 /* events.c */
 void wpa_supplicant_mark_disassoc(struct wpa_supplicant *wpa_s);