P2P: Add dynamic network config block parameters for P2P

This commit is contained in:
Jouni Malinen 2010-07-18 14:30:24 -07:00 committed by Jouni Malinen
parent 62281bc690
commit 2c5d725c65
5 changed files with 41 additions and 2 deletions

View file

@ -182,6 +182,8 @@ int wpa_supplicant_create_ap(struct wpa_supplicant *wpa_s,
params.mode = IEEE80211_MODE_IBSS; params.mode = IEEE80211_MODE_IBSS;
break; break;
case WPAS_MODE_AP: case WPAS_MODE_AP:
case WPAS_MODE_P2P_GO:
case WPAS_MODE_P2P_GROUP_FORMATION:
params.mode = IEEE80211_MODE_AP; params.mode = IEEE80211_MODE_AP;
break; break;
} }

View file

@ -1493,7 +1493,7 @@ static const struct parse_data ssid_fields[] = {
{ STRe(pac_file) }, { STRe(pac_file) },
{ INTe(fragment_size) }, { INTe(fragment_size) },
#endif /* IEEE8021X_EAPOL */ #endif /* IEEE8021X_EAPOL */
{ INT_RANGE(mode, 0, 2) }, { INT_RANGE(mode, 0, 4) },
{ INT_RANGE(proactive_key_caching, 0, 1) }, { INT_RANGE(proactive_key_caching, 0, 1) },
{ INT_RANGE(disabled, 0, 1) }, { INT_RANGE(disabled, 0, 1) },
{ STR(id_str) }, { STR(id_str) },

View file

@ -109,6 +109,9 @@ struct wpa_ssid {
* *
* If set, this network block is used only when associating with the AP * If set, this network block is used only when associating with the AP
* using the configured BSSID * using the configured BSSID
*
* If this is a persistent P2P group (disabled == 2), this is the GO
* Device Address.
*/ */
u8 bssid[ETH_ALEN]; u8 bssid[ETH_ALEN];
@ -273,6 +276,11 @@ struct wpa_ssid {
* *
* 2 = AP (access point) * 2 = AP (access point)
* *
* 3 = P2P Group Owner (can be set in the configuration file)
*
* 4 = P2P Group Formation (used internally; not in configuration
* files)
*
* Note: IBSS can only be used with key_mgmt NONE (plaintext and * Note: IBSS can only be used with key_mgmt NONE (plaintext and
* static WEP) and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In * static WEP) and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In
* addition, ap_scan has to be set to 2 for IBSS. WPA-None requires * addition, ap_scan has to be set to 2 for IBSS. WPA-None requires
@ -284,6 +292,8 @@ struct wpa_ssid {
WPAS_MODE_INFRA = 0, WPAS_MODE_INFRA = 0,
WPAS_MODE_IBSS = 1, WPAS_MODE_IBSS = 1,
WPAS_MODE_AP = 2, WPAS_MODE_AP = 2,
WPAS_MODE_P2P_GO = 3,
WPAS_MODE_P2P_GROUP_FORMATION = 4,
} mode; } mode;
/** /**
@ -292,6 +302,8 @@ struct wpa_ssid {
* 0 = this network can be used (default). * 0 = this network can be used (default).
* 1 = this network block is disabled (can be enabled through * 1 = this network block is disabled (can be enabled through
* ctrl_iface, e.g., with wpa_cli or wpa_gui). * ctrl_iface, e.g., with wpa_cli or wpa_gui).
* 2 = this network block includes parameters for a persistent P2P
* group (can be used with P2P ctrl_iface commands)
*/ */
int disabled; int disabled;
@ -373,6 +385,21 @@ struct wpa_ssid {
* considered when selecting a BSS. * considered when selecting a BSS.
*/ */
int *freq_list; int *freq_list;
/**
* p2p_group - Network generated as a P2P group (used internally)
*/
int p2p_group;
/**
* p2p_persistent_group - Whether this is a persistent group
*/
int p2p_persistent_group;
/**
* temporary - Whether this network is temporary and not to be saved
*/
int temporary;
}; };
#endif /* CONFIG_SSID_H */ #endif /* CONFIG_SSID_H */

View file

@ -554,6 +554,15 @@ static int wpa_supplicant_ctrl_iface_status(struct wpa_supplicant *wpa_s,
ret = os_snprintf(pos, end - pos, ret = os_snprintf(pos, end - pos,
"mode=AP\n"); "mode=AP\n");
break; break;
case WPAS_MODE_P2P_GO:
ret = os_snprintf(pos, end - pos,
"mode=P2P GO\n");
break;
case WPAS_MODE_P2P_GROUP_FORMATION:
ret = os_snprintf(pos, end - pos,
"mode=P2P GO - group "
"formation\n");
break;
default: default:
ret = 0; ret = 0;
break; break;

View file

@ -1005,7 +1005,8 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
int assoc_failed = 0; int assoc_failed = 0;
struct wpa_ssid *old_ssid; struct wpa_ssid *old_ssid;
if (ssid->mode == WPAS_MODE_AP) { if (ssid->mode == WPAS_MODE_AP || ssid->mode == WPAS_MODE_P2P_GO ||
ssid->mode == WPAS_MODE_P2P_GROUP_FORMATION) {
#ifdef CONFIG_AP #ifdef CONFIG_AP
if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_AP)) { if (!(wpa_s->drv_flags & WPA_DRIVER_FLAGS_AP)) {
wpa_printf(MSG_INFO, "Driver does not support AP " wpa_printf(MSG_INFO, "Driver does not support AP "