From patchwork Thu May 8 19:31:13 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ben Greear X-Patchwork-Id: 347206 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from maxx.maxx.shmoo.com (maxx.shmoo.com [205.134.188.171]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 1F3A9140084 for ; Fri, 9 May 2014 05:31:41 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 9AA7A9D21B; Thu, 8 May 2014 15:31:38 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XDMk+mkO3LCb; Thu, 8 May 2014 15:31:38 -0400 (EDT) Received: from maxx.shmoo.com (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id ECEAE9D207; Thu, 8 May 2014 15:31:32 -0400 (EDT) X-Original-To: mailman-post+hostap@maxx.shmoo.com Delivered-To: mailman-post+hostap@maxx.shmoo.com Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id 702169D204 for ; Thu, 8 May 2014 15:31:31 -0400 (EDT) X-Virus-Scanned: amavisd-new at maxx.shmoo.com Received: from maxx.maxx.shmoo.com ([127.0.0.1]) by localhost (maxx.shmoo.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Fq6sfYbw7NRJ for ; Thu, 8 May 2014 15:31:25 -0400 (EDT) Received: from mail2.candelatech.com (mail2.candelatech.com [208.74.158.173]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id B7E269D207 for ; Thu, 8 May 2014 15:31:25 -0400 (EDT) Received: from ben-dt2.candelatech.com (firewall.candelatech.com [70.89.124.249]) by mail2.candelatech.com (Postfix) with ESMTP id 49C9040A7E2; Thu, 8 May 2014 12:31:25 -0700 (PDT) From: greearb@candelatech.com To: hostap@lists.shmoo.com Subject: [PATCH] interworking: Allow user to specify key-mgmt, proto, pairwise defaults. Date: Thu, 8 May 2014 12:31:13 -0700 Message-Id: <1399577473-30767-1-git-send-email-greearb@candelatech.com> X-Mailer: git-send-email 1.7.11.7 Cc: Ben Greear X-BeenThere: hostap@lists.shmoo.com X-Mailman-Version: 2.1.11 Precedence: list List-Id: HostAP Project List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: hostap-bounces@lists.shmoo.com Errors-To: hostap-bounces@lists.shmoo.com From: Ben Greear This enables inteworking + .11r configs. Signed-off-by: Ben Greear --- NOTE: This sits on top of my entire patch set, though I think the main prereq is the 7/15 patch I posted about earlier today. Entire patch set found here: https://github.com/greearb/hostap-ct/commits/master wpa_supplicant/config.c | 13 ++++++++++++- wpa_supplicant/config.h | 2 +- wpa_supplicant/events.c | 3 ++- wpa_supplicant/interworking.c | 27 ++++++++++++++++++--------- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/wpa_supplicant/config.c b/wpa_supplicant/config.c index b90720e..284c6d5 100644 --- a/wpa_supplicant/config.c +++ b/wpa_supplicant/config.c @@ -2150,14 +2150,17 @@ int wpa_config_remove_network(struct wpa_config *config, int id) * disable_ht40=0 * etc. * If no ssid is found, no action is taken. + * Returns: 1 if found user-default section, 0 otherwise. */ -void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid) +int wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid) { struct wpa_ssid *s = config->ssid; int i; + int rv = 0; while (s) { if (s->interworking_defaults) { + rv = 1; os_free(ssid->scan_freq); ssid->scan_freq = NULL; int_array_concat(&ssid->scan_freq, s->scan_freq); @@ -2167,6 +2170,13 @@ void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ int_array_concat(&ssid->freq_list, s->freq_list); ssid->bg_scan_period = s->bg_scan_period; + + /* Relates to that set in interworking_set_hs20_params */ + ssid->pairwise_cipher = s->pairwise_cipher; + ssid->group_cipher = s->group_cipher; + ssid->key_mgmt = s->key_mgmt; + ssid->proto = s->proto; + #ifdef CONFIG_HT_OVERRIDES ssid->disable_ht = s->disable_ht; ssid->disable_ht40 = s->disable_ht40; @@ -2208,6 +2218,7 @@ void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ ssid = ssid->next; } } + return rv; } /* wpa_set_user_network_defaults */ /** diff --git a/wpa_supplicant/config.h b/wpa_supplicant/config.h index 3e13f68..bda46ed 100644 --- a/wpa_supplicant/config.h +++ b/wpa_supplicant/config.h @@ -1046,7 +1046,7 @@ struct wpa_ssid * wpa_config_get_network(struct wpa_config *config, int id); struct wpa_ssid * wpa_config_add_network(struct wpa_config *config); int wpa_config_remove_network(struct wpa_config *config, int id); void wpa_config_set_network_defaults(struct wpa_ssid *ssid); -void wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid); +int wpa_config_set_user_network_defaults(struct wpa_config *config, struct wpa_ssid *ssid); int wpa_config_set(struct wpa_ssid *ssid, const char *var, const char *value, int line); int wpa_config_set_quoted(struct wpa_ssid *ssid, const char *var, diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c index 40b5c47..06436b9 100644 --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c @@ -466,7 +466,8 @@ static int wpa_supplicant_ssid_bss_match(struct wpa_supplicant *wpa_s, if (!(ie.key_mgmt & ssid->key_mgmt)) { wpa_dbg(wpa_s, MSG_DEBUG, " skip RSN IE - key mgmt " - "mismatch"); + "mismatch, IE: 0x%x ssid: 0x%x", + ie.key_mgmt, ssid->key_mgmt); break; } diff --git a/wpa_supplicant/interworking.c b/wpa_supplicant/interworking.c index fca6562..56aa925 100644 --- a/wpa_supplicant/interworking.c +++ b/wpa_supplicant/interworking.c @@ -935,6 +935,7 @@ static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s, int eap_type; int res; char prefix; + int user_defaults; if (bss->anqp == NULL || bss->anqp->anqp_3gpp == NULL) return -1; @@ -957,7 +958,7 @@ static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s, wpas_notify_network_added(wpa_s, ssid); wpa_config_set_network_defaults(ssid); - wpa_config_set_user_network_defaults(wpa_s->conf, ssid); + user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid); ssid->priority = cred->priority; ssid->temporary = 1; ssid->ssid = os_zalloc(bss->ssid_len + 1); @@ -966,8 +967,10 @@ static int interworking_connect_3gpp(struct wpa_supplicant *wpa_s, os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); ssid->ssid_len = bss->ssid_len; - if (interworking_set_hs20_params(wpa_s, ssid) < 0) - goto fail; + if (!user_defaults) { + if (interworking_set_hs20_params(wpa_s, ssid) < 0) + goto fail; + } eap_type = EAP_TYPE_SIM; if (cred->pcsc && wpa_s->scard && scard_supports_umts(wpa_s->scard)) @@ -1475,6 +1478,7 @@ static int interworking_connect_roaming_consortium( struct wpa_bss *bss) { struct wpa_ssid *ssid; + int user_defaults; wpa_msg(wpa_s, MSG_DEBUG, "Interworking: Connect with " MACSTR " based on " "roaming consortium match", MAC2STR(bss->bssid)); @@ -1493,7 +1497,7 @@ static int interworking_connect_roaming_consortium( ssid->parent_cred = cred; wpas_notify_network_added(wpa_s, ssid); wpa_config_set_network_defaults(ssid); - wpa_config_set_user_network_defaults(wpa_s->conf, ssid); + user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid); ssid->priority = cred->priority; ssid->temporary = 1; ssid->ssid = os_zalloc(bss->ssid_len + 1); @@ -1502,8 +1506,10 @@ static int interworking_connect_roaming_consortium( os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); ssid->ssid_len = bss->ssid_len; - if (interworking_set_hs20_params(wpa_s, ssid) < 0) - goto fail; + if (!user_defaults) { + if (interworking_set_hs20_params(wpa_s, ssid) < 0) + goto fail; + } if (cred->eap_method == NULL) { wpa_msg(wpa_s, MSG_DEBUG, "Interworking: No EAP method set for " @@ -1540,6 +1546,7 @@ static int interworking_connect_helper(struct wpa_supplicant *wpa_s, u16 count, i; char buf[100]; int excluded = 0, *excl = allow_excluded ? &excluded : NULL; + int user_defaults; if (wpa_s->conf->cred == NULL || bss == NULL) return -1; @@ -1692,7 +1699,7 @@ static int interworking_connect_helper(struct wpa_supplicant *wpa_s, ssid->parent_cred = cred; wpas_notify_network_added(wpa_s, ssid); wpa_config_set_network_defaults(ssid); - wpa_config_set_user_network_defaults(wpa_s->conf, ssid); + user_defaults = wpa_config_set_user_network_defaults(wpa_s->conf, ssid); ssid->priority = cred->priority; ssid->temporary = 1; ssid->ssid = os_zalloc(bss->ssid_len + 1); @@ -1701,8 +1708,10 @@ static int interworking_connect_helper(struct wpa_supplicant *wpa_s, os_memcpy(ssid->ssid, bss->ssid, bss->ssid_len); ssid->ssid_len = bss->ssid_len; - if (interworking_set_hs20_params(wpa_s, ssid) < 0) - goto fail; + if (!user_defaults) { + if (interworking_set_hs20_params(wpa_s, ssid) < 0) + goto fail; + } if (wpa_config_set(ssid, "eap", eap_get_name(EAP_VENDOR_IETF, eap->method), 0) < 0)