aboutsummaryrefslogtreecommitdiffstats
path: root/wpa_supplicant
diff options
context:
space:
mode:
authorJean-Michel Bachot <jean-michelx.bachot@linux.intel.com>2011-06-12 21:35:37 (GMT)
committerJouni Malinen <j@w1.fi>2011-06-12 21:35:37 (GMT)
commit4b6baa2f5ed9d9bc9ecb450025e14d2408b8d43c (patch)
treef68fa46c5919670207f70fc35768546297d42fe6 /wpa_supplicant
parentdd8a7e054711c60fda83739ea19313ebab58d986 (diff)
downloadhostap-4b6baa2f5ed9d9bc9ecb450025e14d2408b8d43c.zip
hostap-4b6baa2f5ed9d9bc9ecb450025e14d2408b8d43c.tar.gz
hostap-4b6baa2f5ed9d9bc9ecb450025e14d2408b8d43c.tar.bz2
P2P: Add group started notification
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'wpa_supplicant')
-rw-r--r--wpa_supplicant/notify.c7
-rw-r--r--wpa_supplicant/notify.h3
-rw-r--r--wpa_supplicant/p2p_supplicant.c35
3 files changed, 36 insertions, 9 deletions
diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index db3419c..14741f6 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -436,6 +436,13 @@ void wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
unsigned int generated_pin)
{
}
+
+
+void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
+ struct wpa_ssid *ssid, int network_id,
+ int client)
+{
+}
#endif /* CONFIG_P2P */
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index 967aff2..1e71091 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -108,5 +108,8 @@ void wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
enum p2p_prov_disc_status status,
u16 config_methods,
unsigned int generated_pin);
+void wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
+ struct wpa_ssid *ssid, int network_id,
+ int client);
#endif /* NOTIFY_H */
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 9a73090..af1de8a 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -368,9 +368,9 @@ static int wpas_p2p_persistent_group(struct wpa_supplicant *wpa_s,
}
-static void wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s,
- struct wpa_ssid *ssid,
- const u8 *go_dev_addr)
+static int wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s,
+ struct wpa_ssid *ssid,
+ const u8 *go_dev_addr)
{
struct wpa_ssid *s;
int changed = 0;
@@ -399,7 +399,8 @@ static void wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s,
changed = 1;
s = wpa_config_add_network(wpa_s->conf);
if (s == NULL)
- return;
+ return -1;
+ wpas_notify_network_added(wpa_s, s);
wpa_config_set_network_defaults(s);
}
@@ -439,6 +440,8 @@ static void wpas_p2p_store_persistent_group(struct wpa_supplicant *wpa_s,
wpa_printf(MSG_DEBUG, "P2P: Failed to update configuration");
}
#endif /* CONFIG_NO_CONFIG_WRITE */
+
+ return s->id;
}
@@ -450,6 +453,7 @@ static void wpas_group_formation_completed(struct wpa_supplicant *wpa_s,
int client;
int persistent;
u8 go_dev_addr[ETH_ALEN];
+ int network_id = -1;
/*
* This callback is likely called for the main interface. Update wpa_s
@@ -529,8 +533,12 @@ static void wpas_group_formation_completed(struct wpa_supplicant *wpa_s,
}
if (persistent)
- wpas_p2p_store_persistent_group(wpa_s->parent, ssid,
- go_dev_addr);
+ network_id = wpas_p2p_store_persistent_group(wpa_s->parent,
+ ssid, go_dev_addr);
+ if (network_id < 0)
+ network_id = ssid->id;
+ if (!client)
+ wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 0);
}
@@ -836,6 +844,7 @@ static void p2p_go_configured(void *ctx, void *data)
struct wpa_supplicant *wpa_s = ctx;
struct p2p_go_neg_results *params = data;
struct wpa_ssid *ssid;
+ int network_id = -1;
ssid = wpa_s->current_ssid;
if (ssid && ssid->mode == WPAS_MODE_P2P_GO) {
@@ -851,10 +860,14 @@ static void p2p_go_configured(void *ctx, void *data)
params->passphrase ? params->passphrase : "",
MAC2STR(wpa_s->parent->own_addr),
params->persistent_group ? " [PERSISTENT]" : "");
+
if (params->persistent_group)
- wpas_p2p_store_persistent_group(
+ network_id = wpas_p2p_store_persistent_group(
wpa_s->parent, ssid,
wpa_s->parent->own_addr);
+ if (network_id < 0)
+ network_id = ssid->id;
+ wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 0);
wpas_p2p_cross_connect_setup(wpa_s);
wpas_p2p_set_group_idle_timeout(wpa_s);
return;
@@ -3772,6 +3785,7 @@ void wpas_p2p_completed(struct wpa_supplicant *wpa_s)
struct wpa_ssid *ssid = wpa_s->current_ssid;
const char *ssid_txt;
u8 go_dev_addr[ETH_ALEN];
+ int network_id = -1;
int persistent;
if (!wpa_s->show_group_started || !ssid)
@@ -3810,8 +3824,11 @@ void wpas_p2p_completed(struct wpa_supplicant *wpa_s)
}
if (persistent)
- wpas_p2p_store_persistent_group(wpa_s->parent, ssid,
- go_dev_addr);
+ network_id = wpas_p2p_store_persistent_group(wpa_s->parent,
+ ssid, go_dev_addr);
+ if (network_id < 0)
+ network_id = ssid->id;
+ wpas_notify_p2p_group_started(wpa_s, ssid, network_id, 1);
}