From 971e357f19ee04deb0224c5c7c8014d1163e9b72 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Fri, 26 Nov 2010 15:52:16 +0200 Subject: [PATCH] P2P: Add new driver option for interface allocation WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P flag can now be used to indicate that the initial interface (e.g., wlan0) is used for P2P management operations and potentially non-P2P connections. This is otherwise identical to WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE, but the possibility of non-P2P connections makes some operations differ. --- src/drivers/driver.h | 8 +++++++- wpa_supplicant/p2p_supplicant.c | 4 +++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/drivers/driver.h b/src/drivers/driver.h index b386ab1d7..d93689586 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -540,13 +540,19 @@ struct wpa_driver_capa { #define WPA_DRIVER_FLAGS_P2P_CONCURRENT 0x00000200 /* * Driver uses the initial interface as a dedicated management interface, i.e., - * it cannot be used for P2P group operations. + * it cannot be used for P2P group operations or non-P2P purposes. */ #define WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE 0x00000400 /* This interface is P2P capable (P2P Device, GO, or P2P Client */ #define WPA_DRIVER_FLAGS_P2P_CAPABLE 0x00000800 /* Driver supports concurrent operations on multiple channels */ #define WPA_DRIVER_FLAGS_MULTI_CHANNEL_CONCURRENT 0x00001000 +/* + * Driver uses the initial interface for P2P management interface and non-P2P + * purposes (e.g., connect to infra AP), but this interface cannot be used for + * P2P group operations. + */ +#define WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P 0x00002000 unsigned int flags; int max_scan_ssids; diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index 017744934..248d9f14c 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -2427,7 +2427,9 @@ void wpas_p2p_deinit_global(struct wpa_global *global) static int wpas_p2p_create_iface(struct wpa_supplicant *wpa_s) { - if (wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE) + if (wpa_s->drv_flags & + (WPA_DRIVER_FLAGS_P2P_DEDICATED_INTERFACE | + WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P)) return 1; /* P2P group requires a new interface in every case */ if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_P2P_CONCURRENT))