From patchwork Wed Jul 2 19:31:38 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Shmidt X-Patchwork-Id: 366463 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 0DAF01400AC for ; Thu, 3 Jul 2014 05:34:39 +1000 (EST) Received: from localhost (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id E32289C135; Wed, 2 Jul 2014 15:34:35 -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 QlOMVeUYvmjt; Wed, 2 Jul 2014 15:34:35 -0400 (EDT) Received: from maxx.shmoo.com (localhost [127.0.0.1]) by maxx.maxx.shmoo.com (Postfix) with ESMTP id B496A9C1D9; Wed, 2 Jul 2014 15:34:29 -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 A62979C196 for ; Wed, 2 Jul 2014 15:34:27 -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 pmPpug+LkZC1 for ; Wed, 2 Jul 2014 15:34:20 -0400 (EDT) Received: from mail-ob0-f201.google.com (mail-ob0-f201.google.com [209.85.214.201]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (not verified)) by maxx.maxx.shmoo.com (Postfix) with ESMTPS id BF16A9C135 for ; Wed, 2 Jul 2014 15:34:20 -0400 (EDT) Received: by mail-ob0-f201.google.com with SMTP id nu7so2685659obb.4 for ; Wed, 02 Jul 2014 12:34:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:date:subject:to:message-id; bh=gs8Si9KIGIQuxBd/lNcYOGg/J5vFfrWwJzR0xPou7aU=; b=MriyEFE58GPUK4vKXOVoCwQpq1d1CpBoTakTrN2bR/U7GK0mO+Wx1wn1gqsRNaCqU4 MtNS7/B7d2A2+yHtP/J73EH1kFXby9Fo0BCn/n6U9Uob0UZE8gCNKyvK9JQMZ21GmKDR yVQ/L7CYyoo03YqsrMto20wOGXBU0myNYts5Glu7ONmybuddqqb+uKE16cyB8m/O0Xaw d/WoMya+Xs8FzwcEZ9oepV8RgUPyUyZfXeZvCSoAI3VMZWEp1Fna744LgvHWfW9cek0B 9bf5tazqtCDQvsgRRvgdWLotlRkQsmouPgRmUOaEkzdd7TusDYY5Stjlm5YEKc+L4+O9 2sNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:date:subject:to:message-id; bh=gs8Si9KIGIQuxBd/lNcYOGg/J5vFfrWwJzR0xPou7aU=; b=BMCUGTIeU2OTBlGpca8r50ECnr6lLZWl82ULYGlORrN5uKW1M5X+QVft1wLdGw4s/Y fD0a9X3gP+fOniHgtS9qE5BNzGgtuCj5c5nx5JW4hZFG0iNh/3GoYjJhDySY3Rj6FBuB sFhbWVtWFXFANCuEYkB907j8b1WM3EBf+kV4dI3/d4m7+T3LNqYWxXmBnyUig+orDaz1 kFMcax8rpzDj4RaUAfJoUQcI2ICjmyBH6GJEV6y4FIyYnkvatPGUysLbNrJjJES0YnWJ 2/o21LyiH75EIfmld5CcZWYvCennu5K/SY4Q790OUzFvMj9kA/+Na6CPoO+oE6QKF01v CuOg== X-Gm-Message-State: ALoCoQnR8gXVK6JAxR5h/WsR1bob+TjbxMo8r7XnKyFNN+W62gKR5NNf5NKBqvsGN2NL85AA2TCNHcL3thyBJqs4DA71nhoALt9qDUNy1r3saTvl1JaCBRkoBh1RYHF5C6/vWVqfsAW9 X-Received: by 10.182.28.136 with SMTP id b8mr30082778obh.19.1404329658901; Wed, 02 Jul 2014 12:34:18 -0700 (PDT) Received: from corp2gmr1-2.hot.corp.google.com (corp2gmr1-2.hot.corp.google.com [172.24.189.93]) by gmr-mx.google.com with ESMTPS id v12si1404822yhe.2.2014.07.02.12.34.18 for (version=TLSv1.1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Jul 2014 12:34:18 -0700 (PDT) Received: from ushik.mtv.corp.google.com (ushik.mtv.corp.google.com [172.18.120.113]) by corp2gmr1-2.hot.corp.google.com (Postfix) with ESMTP id B5EF75A4783 for ; Wed, 2 Jul 2014 12:34:18 -0700 (PDT) Received: by ushik.mtv.corp.google.com (Postfix, from userid 57417) id 4ECD5140224; Wed, 2 Jul 2014 12:34:18 -0700 (PDT) From: Dmitry Shmidt Date: Wed, 2 Jul 2014 12:31:38 -0700 Subject: [PATCH] PNO: Send probe request only for hidden SSIDs To: hostap@lists.shmoo.com Message-Id: <20140702193418.4ECD5140224@ushik.mtv.corp.google.com> 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 Change-Id: I88e3d2fb3f946eb7ae93bf8a8809695b5d54a90b Signed-off-by: Dmitry Shmidt --- wpa_supplicant/scan.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c index b13713c..9a67092 100644 --- a/wpa_supplicant/scan.c +++ b/wpa_supplicant/scan.c @@ -1931,7 +1931,7 @@ void wpa_scan_free_params(struct wpa_driver_scan_params *params) int wpas_start_pno(struct wpa_supplicant *wpa_s) { int ret, interval; - size_t i, num_ssid; + size_t i, num_ssid, num_match_ssid; struct wpa_ssid *ssid; struct wpa_driver_scan_params params; @@ -1960,41 +1960,58 @@ int wpas_start_pno(struct wpa_supplicant *wpa_s) os_memset(¶ms, 0, sizeof(params)); - num_ssid = 0; + num_ssid = num_match_ssid = 0; ssid = wpa_s->conf->ssid; while (ssid) { - if (!wpas_network_disabled(wpa_s, ssid)) - num_ssid++; + if (!wpas_network_disabled(wpa_s, ssid)) { + num_match_ssid++; + if (ssid->scan_ssid) + num_ssid++; + } ssid = ssid->next; } + + if (num_match_ssid == 0) { + wpa_printf(MSG_DEBUG, "PNO: No configured SSIDs"); + return -1; + } + + if (num_match_ssid > num_ssid) { + params.num_ssids++; /* wildcard */ + num_ssid++; + } + if (num_ssid > WPAS_MAX_SCAN_SSIDS) { wpa_printf(MSG_DEBUG, "PNO: Use only the first %u SSIDs from " "%u", WPAS_MAX_SCAN_SSIDS, (unsigned int) num_ssid); num_ssid = WPAS_MAX_SCAN_SSIDS; } - if (num_ssid == 0) { - wpa_printf(MSG_DEBUG, "PNO: No configured SSIDs"); - return -1; + if (num_match_ssid > wpa_s->max_match_sets) { + num_match_ssid = wpa_s->max_match_sets; + wpa_dbg(wpa_s, MSG_DEBUG, "Too many SSIDs to match"); } - - params.filter_ssids = os_malloc(sizeof(struct wpa_driver_scan_filter) * - num_ssid); + params.filter_ssids = os_zalloc(num_match_ssid * + sizeof(struct wpa_driver_scan_filter)); if (params.filter_ssids == NULL) return -1; i = 0; ssid = wpa_s->conf->ssid; while (ssid) { if (!wpas_network_disabled(wpa_s, ssid)) { - params.ssids[i].ssid = ssid->ssid; - params.ssids[i].ssid_len = ssid->ssid_len; - params.num_ssids++; + if (ssid->scan_ssid && params.num_ssids < num_ssid) { + params.ssids[params.num_ssids].ssid = + ssid->ssid; + params.ssids[params.num_ssids].ssid_len = + ssid->ssid_len; + params.num_ssids++; + } os_memcpy(params.filter_ssids[i].ssid, ssid->ssid, ssid->ssid_len); params.filter_ssids[i].ssid_len = ssid->ssid_len; params.num_filter_ssids++; i++; - if (i == num_ssid) + if (i == num_match_ssid) break; } ssid = ssid->next;