[PATCH] command to disable eapol ip functionality from both Go and client side

Avichal Agarwal avichal.a at samsung.com
Mon Mar 14 20:09:33 PDT 2016


If we enable and disable the group capability field through a user flag then it will be more feasible and easy for the user 
to control the eapol ip functionality from go side. In last patch I left two files  changes , so sending the full  patch again.

From 497472a1e913267d63ec813955de5ec4a16de4b1 Mon Sep 17 00:00:00 2001
From: Avichal Agarwal <avichal.a at samsung.com>
Date: Tue, 15 Mar 2016 11:47:51 +0900
Subject: [PATCH] command to disable eapol ip functionality from both Go and
 client side
if p2p_set disable_eapol_ip_addr  1 then ip eapol will be diabled
if 0 then enabled . By default it is enabled. Previously only client
can disable the eapol ip request. Now through this patch At Go side  also
ip eapol fucntionality can be disabled.
Signed-off-by: Avichal Agarwal <avichal.a at samsung.com>
Signed-off-by: Kyeong-Chae Lim <kcya.lim at samsung.com>
---
 src/p2p/p2p.c                     |   11 +++++++++++
 src/p2p/p2p.h                     |    5 +++++
 src/p2p/p2p_group.c               |    3 ++-
 src/p2p/p2p_i.h                   |    1 +
 wpa_supplicant/ctrl_iface.c       |    6 +++---
 wpa_supplicant/p2p_supplicant.c   |    6 ++++++
 wpa_supplicant/p2p_supplicant.h   |    2 +-
 wpa_supplicant/wpa_supplicant_i.h |    1 -
 wpa_supplicant/wpas_glue.c        |    3 +--
 9 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 6942c85..326c49e 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -2941,6 +2941,7 @@ struct p2p_data * p2p_init(const struct p2p_config *cfg)
  p2p->go_timeout = 100;
  p2p->client_timeout = 20;
  p2p->num_p2p_sd_queries = 0;
+ p2p->disable_eapolip = 0;
 
  p2p_dbg(p2p, "initialized");
  p2p_channels_dump(p2p, "channels", &p2p->cfg->channels);
@@ -5488,3 +5489,13 @@ void p2p_set_own_pref_freq_list(struct p2p_data *p2p,
    i, p2p->pref_freq_list[i]);
  }
 }
+
+void p2p_eapol_ip_flag_set(struct p2p_data *p2p,int flag)
+{
+ p2p->disable_eapolip = flag;
+}
+
+int p2p_eapol_ip_flag_get(struct p2p_data *p2p)
+{
+ return p2p->disable_eapolip;
+}
diff --git a/src/p2p/p2p.h b/src/p2p/p2p.h
index fc545b4..4ed66dd 100644
--- a/src/p2p/p2p.h
+++ b/src/p2p/p2p.h
@@ -2367,4 +2367,9 @@ void p2p_set_own_pref_freq_list(struct p2p_data *p2p,
 int p2p_group_get_common_freqs(struct p2p_group *group, int *common_freqs,
           unsigned int *num);
 
+void p2p_eapol_ip_flag_set(struct p2p_data *p2p,int flag);
+
+int p2p_eapol_ip_flag_get(struct p2p_data *p2p);
+
+
 #endif /* P2P_H */
diff --git a/src/p2p/p2p_group.c b/src/p2p/p2p_group.c
index 2cf2450..31db231 100644
--- a/src/p2p/p2p_group.c
+++ b/src/p2p/p2p_group.c
@@ -155,7 +155,8 @@ static void p2p_group_add_common_ies(struct p2p_group *group,
   group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
  if (group->num_members >= group->cfg->max_clients)
   group_capab |= P2P_GROUP_CAPAB_GROUP_LIMIT;
- group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION;
+ if(!(group->p2p->disable_eapolip))
+  group_capab |= P2P_GROUP_CAPAB_IP_ADDR_ALLOCATION;
  p2p_buf_add_capability(ie, dev_capab, group_capab);
 }
 
diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h
index 47524d4..25e5646 100644
--- a/src/p2p/p2p_i.h
+++ b/src/p2p/p2p_i.h
@@ -288,6 +288,7 @@ struct p2p_data {
  const u8 *invite_go_dev_addr;
  u8 invite_go_dev_addr_buf[ETH_ALEN];
  int invite_dev_pw_id;
+ int disable_eapolip;
 
  unsigned int retry_invite_req:1;
  unsigned int retry_invite_req_sent:1;
diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c
index 4e16987..ad6e965 100644
--- a/wpa_supplicant/ctrl_iface.c
+++ b/wpa_supplicant/ctrl_iface.c
@@ -6097,8 +6097,8 @@ static int p2p_ctrl_set(struct wpa_supplicant *wpa_s, char *cmd)
   return wpas_p2p_nfc_tag_enabled(wpa_s, !!atoi(param));
 #endif /* CONFIG_WPS_NFC */
 
- if (os_strcmp(cmd, "disable_ip_addr_req") == 0) {
-  wpa_s->p2p_disable_ip_addr_req = !!atoi(param);
+ if (os_strcmp(cmd, "disable_eapol_ip_addr") == 0) {
+  wpas_p2p_eapolip_flag_set(wpa_s, atoi(param));
   return 0;
  }
 
@@ -7017,7 +7017,7 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
  p2p_wpa_s->global->p2p_disabled = 0;
  p2p_wpa_s->global->p2p_per_sta_psk = 0;
  p2p_wpa_s->conf->num_sec_device_types = 0;
- p2p_wpa_s->p2p_disable_ip_addr_req = 0;
+ wpas_p2p_eapolip_flag_set(wpa_s,0);
  os_free(p2p_wpa_s->global->p2p_go_avoid_freq.range);
  p2p_wpa_s->global->p2p_go_avoid_freq.range = NULL;
  p2p_wpa_s->global->p2p_go_avoid_freq.num = 0;
diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c
index 5ff758f..fe9dacb 100644
--- a/wpa_supplicant/p2p_supplicant.c
+++ b/wpa_supplicant/p2p_supplicant.c
@@ -9192,3 +9192,9 @@ void wpas_p2p_ap_deinit(struct wpa_supplicant *wpa_s)
   wpa_s->ap_iface->bss[0]->p2p_group = NULL;
  wpas_p2p_group_deinit(wpa_s);
 }
+
+void wpas_p2p_eapolip_flag_set(struct wpa_supplicant *wpa_s, int flag)
+{
+ if(wpa_s->global->p2p)
+   p2p_eapol_ip_flag_set(wpa_s->global->p2p,flag);
+}
diff --git a/wpa_supplicant/p2p_supplicant.h b/wpa_supplicant/p2p_supplicant.h
index 6a770d2..a72d301 100644
--- a/wpa_supplicant/p2p_supplicant.h
+++ b/wpa_supplicant/p2p_supplicant.h
@@ -167,7 +167,7 @@ int wpas_p2p_nfc_tag_enabled(struct wpa_supplicant *wpa_s, int enabled);
 void wpas_p2p_pbc_overlap_cb(void *eloop_ctx, void *timeout_ctx);
 
 #ifdef CONFIG_P2P
-
+void wpas_p2p_eapolip_flag_set(struct wpa_supplicant *wpa_s, int flag);
 int wpas_p2p_init(struct wpa_global *global, struct wpa_supplicant *wpa_s);
 void wpas_p2p_deinit(struct wpa_supplicant *wpa_s);
 void wpas_p2p_completed(struct wpa_supplicant *wpa_s);
diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h
index 269bac0..272f8cb 100644
--- a/wpa_supplicant/wpa_supplicant_i.h
+++ b/wpa_supplicant/wpa_supplicant_i.h
@@ -853,7 +853,6 @@ struct wpa_supplicant {
  int p2p_first_connection_timeout;
  unsigned int p2p_nfc_tag_enabled:1;
  unsigned int p2p_peer_oob_pk_hash_known:1;
- unsigned int p2p_disable_ip_addr_req:1;
  unsigned int p2ps_method_config_any:1;
  unsigned int p2p_cli_probe:1;
  int p2p_persistent_go_freq;
diff --git a/wpa_supplicant/wpas_glue.c b/wpa_supplicant/wpas_glue.c
index f84c8b9..59c5062 100644
--- a/wpa_supplicant/wpas_glue.c
+++ b/wpa_supplicant/wpas_glue.c
@@ -1117,8 +1117,7 @@ void wpa_supplicant_rsn_supp_set_config(struct wpa_supplicant *wpa_s,
   conf.ssid_len = ssid->ssid_len;
   conf.wpa_ptk_rekey = ssid->wpa_ptk_rekey;
 #ifdef CONFIG_P2P
-  if (ssid->p2p_group && wpa_s->current_bss &&
-      !wpa_s->p2p_disable_ip_addr_req) {
+  if (ssid->p2p_group && wpa_s->current_bss && !p2p_eapol_ip_flag_get(wpa_s->global->p2p)){
    struct wpabuf *p2p;
    p2p = wpa_bss_get_vendor_ie_multi(wpa_s->current_bss,
          P2P_IE_VENDOR_TYPE);
-- 
1.7.9.5

------- Original Message -------
Sender : Jouni Malinen<j at w1.fi>
Date : Mar 15, 2016 03:10 (GMT+05:30)
Title : Re: [PATCH] command to disable eapol ip functionality from both Go and client side

On Mon, Mar 14, 2016 at 12:23:57PM +0000, Avichal Agarwal wrote:
> if p2p_set disable_eapol_ip_addr  1 then ip eapol will be diabled
> if 0 then enabled . By default it is enabled. Previously only client
> can disable the eapol ip request. Now through this patch At Go side  also
> ip eapol fucntionality can be disabled.

Could you please clarify why this is needed? The GO side functionality
for 4-way handshake based IP address assignment is enabled only if the
ip_addr_start parameter is set. Clearing that parameter disables this
functionality.

-- 
Jouni Malinen                                            PGP id EFC895FA

_______________________________________________
Hostap mailing list
Hostap at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/hostap


More information about the Hostap mailing list