From patchwork Tue Nov 22 13:31:55 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arend van Spriel X-Patchwork-Id: 9441105 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A14B660235 for ; Tue, 22 Nov 2016 13:32:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9203C27F7F for ; Tue, 22 Nov 2016 13:32:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 862E22852E; Tue, 22 Nov 2016 13:32:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0DA427F7F for ; Tue, 22 Nov 2016 13:32:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755767AbcKVNcM (ORCPT ); Tue, 22 Nov 2016 08:32:12 -0500 Received: from lpdvsmtp01.broadcom.com ([192.19.211.62]:52977 "EHLO relay.smtp.broadcom.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755734AbcKVNcH (ORCPT ); Tue, 22 Nov 2016 08:32:07 -0500 Received: from mail-irv-17.broadcom.com (mail-irv-17.broadcom.com [10.15.198.34]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 38E37280225; Tue, 22 Nov 2016 05:32:03 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 38E37280225 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1479821523; bh=uUOHOClwtP1BGPiabQpHe3uKP/JOcBc+zKKsMe/m7fk=; h=From:To:Cc:Subject:Date:From; b=F9JOZj1EQKEQpjqiwiSuSTyczH/NxBV9FEL+46id/YT1K3UqpI8FjNNvZiNrdGQSk 8VDH3Hqk6Fv8VRq+UkXIAg/9TYvqEWvmIIYDFXikSdey6k26Cf8nAo0QO+fa9tlprj PA0d+PtdM1cg+jfYXIMVNNdtfH74HjAuWctQtz+0= Received: from jenkins-cam-14.cam.broadcom.com (jenkins-cam-14.cam.broadcom.com [10.177.128.77]) by mail-irv-17.broadcom.com (Postfix) with ESMTP id 5B5D782028; Tue, 22 Nov 2016 05:32:02 -0800 (PST) Received: by jenkins-cam-14.cam.broadcom.com (Postfix, from userid 25152) id 68661B84FBA; Tue, 22 Nov 2016 13:32:01 +0000 (GMT) From: Arend van Spriel To: Johannes Berg Cc: linux-wireless , Arend van Spriel Subject: [PATCH] nl80211: provide minimum scheduled scan (plan) interval Date: Tue, 22 Nov 2016 13:31:55 +0000 Message-Id: <1479821515-13261-1-git-send-email-arend.vanspriel@broadcom.com> X-Mailer: git-send-email 1.9.1 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The interval for scheduled scan may have a minimum value for the device. Allow drivers to specify a minimum value in the struct wiphy so user-space interval values can be validated against it. Signed-off-by: Arend van Spriel --- include/net/cfg80211.h | 3 +++ include/uapi/linux/nl80211.h | 2 ++ net/wireless/nl80211.c | 12 ++++++++++++ 3 files changed, 17 insertions(+) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 2019310..ef5d6ab 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -3427,6 +3427,8 @@ struct wiphy_iftype_ext_capab { * scans * @max_sched_scan_plans: maximum number of scan plans (scan interval and number * of iterations) for scheduled scan supported by the device. + * @min_sched_scan_plan_interval: minimum interval (in seconds) for a + * single scan plan supported by the device. * @max_sched_scan_plan_interval: maximum interval (in seconds) for a * single scan plan supported by the device. * @max_sched_scan_plan_iterations: maximum number of iterations for a single @@ -3552,6 +3554,7 @@ struct wiphy { u16 max_scan_ie_len; u16 max_sched_scan_ie_len; u32 max_sched_scan_plans; + u32 min_sched_scan_plan_interval; u32 max_sched_scan_plan_interval; u32 max_sched_scan_plan_iterations; diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 259c9c7..77fc77a 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -2381,6 +2381,8 @@ enum nl80211_attrs { NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED, + NL80211_ATTR_MIN_SCAN_PLAN_INTERVAL, + /* add attributes here, update the policy in nl80211.c */ __NL80211_ATTR_AFTER_LAST, diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 24ab199..47aca56 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1474,6 +1474,8 @@ static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, rdev->wiphy.max_sched_scan_plans) || nla_put_u32(msg, NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL, rdev->wiphy.max_sched_scan_plan_interval) || + nla_put_u32(msg, NL80211_ATTR_MIN_SCAN_PLAN_INTERVAL, + rdev->wiphy.min_sched_scan_plan_interval) || nla_put_u32(msg, NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS, rdev->wiphy.max_sched_scan_plan_iterations)) goto nla_put_failure; @@ -6777,6 +6779,12 @@ static int nl80211_abort_scan(struct sk_buff *skb, struct genl_info *info) if (!request->scan_plans[0].interval) return -EINVAL; + if (wiphy->min_sched_scan_plan_interval && + request->scan_plans[0].interval < + wiphy->min_sched_scan_plan_interval) + request->scan_plans[0].interval = + wiphy->min_sched_scan_plan_interval; + if (request->scan_plans[0].interval > wiphy->max_sched_scan_plan_interval) request->scan_plans[0].interval = @@ -6805,6 +6813,10 @@ static int nl80211_abort_scan(struct sk_buff *skb, struct genl_info *info) request->scan_plans[i].interval > wiphy->max_sched_scan_plan_interval) return -EINVAL; + if (wiphy->min_sched_scan_plan_interval && + request->scan_plans[i].interval < + wiphy->min_sched_scan_plan_interval) + return -EINVAL; if (plan[NL80211_SCHED_SCAN_PLAN_ITERATIONS]) { request->scan_plans[i].iterations =