From patchwork Mon Jul 13 06:12:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658729 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 33BA613B1 for ; Mon, 13 Jul 2020 06:08:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 197B52075F for ; Mon, 13 Jul 2020 06:08:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CPd7Sm4T" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729003AbgGMGIf (ORCPT ); Mon, 13 Jul 2020 02:08:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIf (ORCPT ); Mon, 13 Jul 2020 02:08:35 -0400 Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68D4FC061794 for ; Sun, 12 Jul 2020 23:08:35 -0700 (PDT) Received: by mail-pg1-x542.google.com with SMTP id z5so5577067pgb.6 for ; Sun, 12 Jul 2020 23:08:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xSub10RztAkAVkR7dQ1tuib+ohmh4r9LyvxXZPcSzms=; b=CPd7Sm4TlRPWYosX9tW/r3dPGBy0AvY3Bh/M6+lf1lmsS1eV1GJJxepMVj+lgInh3G uMfGUDlI5jh8grnmG+h1wUxqNSule4RZkHwTAvDn+QZKridnb8Es9BBcMbB+zq6ffM/m 7LOo8Z5ZLWrTHQmrDo7uQoAAFUFqAIQDLdMxLJHalBIqkyGoIwb4L38oHx5XIr57GTss z17BE5cEHrL/5njPAd9jO1GlvQ9+yq7MTpvSlc8Sfo5YMdjmeRmG1kX5AXuZ8FKzt5Xh Qio+ITndxr1IS0NWdWX1/SPGTx8NyOSLuH4JCTpefswlmiAdcnECMUsOBCvg6eMT7vQ0 hG7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xSub10RztAkAVkR7dQ1tuib+ohmh4r9LyvxXZPcSzms=; b=DvXSLy6J1hOeQUHBS2oFfK0sC6iyQs/0vMGUaCpK03FuAB3zm6eU6wUux25Na0u02n L7on3STheFYdHf3XAkdm/1UTMbxADJggCBsqKAYNjuttkjobELJQSfsJy9PGyY3SR7Cc zrBrxOP8jMjD5/oa59cVUCcaD07osU+7m83rwc2qqznsA7H5ZyRAmydtDvWo+CXiwf0q eeqRAlU+iTKIEuve7dL9M9aXofgbbJuXvZjYtDMsqEBGjEuh1MQ+vsaOQR3B/9w3L0RK ROyedp7/Vc4OivuiCdi1+nQY+ZC9QqcjXagPVHpA3hAUDyCarmJPZcPOMxWIxB7tAnFy lWmA== X-Gm-Message-State: AOAM531OFgLOrHqC98eaEfJoAyVVys1GLXQRFlULvOLSXzofFBQMzMCC 1STjx92tAR46YHOTGzECuCRRDOvKrBwsCA== X-Google-Smtp-Source: ABdhPJyhnSC8rE3wulFMuWP6H7sWccibZlpM1+tMTVQZayNiuaBSX95D23frXmrh78ALllah5SUMDA== X-Received: by 2002:aa7:858c:: with SMTP id w12mr53777378pfn.143.1594620514778; Sun, 12 Jul 2020 23:08:34 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:34 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Marcel Holtmann , Sathish Narsimman Subject: [PATCH 1/8] Bluetooth: Translate additional address type correctly Date: Mon, 13 Jul 2020 11:42:13 +0530 Message-Id: <20200713061220.3252-2-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Marcel Holtmann When using controller based address resolution, then the new address types 0x02 and 0x03 are used. These types need to be converted back into either public address or random address types. Signed-off-by: Marcel Holtmann Signed-off-by: Sathish Narsimman --- include/net/bluetooth/hci.h | 6 ++++-- net/bluetooth/hci_core.c | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index 1f18f71363e9..abab8b5981a7 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h @@ -2268,8 +2268,10 @@ struct hci_ev_le_conn_complete { #define LE_EXT_ADV_SCAN_RSP 0x0008 #define LE_EXT_ADV_LEGACY_PDU 0x0010 -#define ADDR_LE_DEV_PUBLIC 0x00 -#define ADDR_LE_DEV_RANDOM 0x01 +#define ADDR_LE_DEV_PUBLIC 0x00 +#define ADDR_LE_DEV_RANDOM 0x01 +#define ADDR_LE_DEV_PUBLIC_RESOLVED 0x02 +#define ADDR_LE_DEV_RANDOM_RESOLVED 0x03 #define HCI_EV_LE_ADVERTISING_REPORT 0x02 struct hci_ev_le_advertising_info { diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 6509f785dd14..4af208b82138 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -3290,6 +3290,15 @@ struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list, { struct hci_conn_params *param; + switch (addr_type) { + case ADDR_LE_DEV_PUBLIC_RESOLVED: + addr_type = ADDR_LE_DEV_PUBLIC; + break; + case ADDR_LE_DEV_RANDOM_RESOLVED: + addr_type = ADDR_LE_DEV_RANDOM; + break; + } + list_for_each_entry(param, list, action) { if (bacmp(¶m->addr, addr) == 0 && param->addr_type == addr_type) From patchwork Mon Jul 13 06:12:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658731 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 198DC913 for ; Mon, 13 Jul 2020 06:08:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F35CE2075F for ; Mon, 13 Jul 2020 06:08:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="px2ksbWw" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729007AbgGMGIj (ORCPT ); Mon, 13 Jul 2020 02:08:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35116 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIj (ORCPT ); Mon, 13 Jul 2020 02:08:39 -0400 Received: from mail-pj1-x1041.google.com (mail-pj1-x1041.google.com [IPv6:2607:f8b0:4864:20::1041]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F0BAC061794 for ; Sun, 12 Jul 2020 23:08:39 -0700 (PDT) Received: by mail-pj1-x1041.google.com with SMTP id mn17so5696915pjb.4 for ; Sun, 12 Jul 2020 23:08:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0uDYaKG7efI3+NfcjCvxS1+KgIa76fmhv33RI9RFLbw=; b=px2ksbWwSJhbjmUbIJ63HBzYBvOGlHyUBt9B0pF+4pgvgLXeq34BDrdMfO/gxmUZhp rYhY5ppi7cRTdLfhFiWmxYhgGYIZDEIJKHSxQVub8c6ZkMzIByaWxUZyBLCIcTO4DOdR Lt36K+tKEg5eJCT4CvnrE4QwjOe9aSspQlO0f1IfBS32TGpbYzPwbhwndW2Bsh5jbIn0 kF0wlJj9ZEIrCFsl+UtFTNTweBAlw28PwJ12H8TwXE1S0+ug4VDK0qRFrL3shHznLgqB uTY1G7tF3n7pizLiWSFR/gG15sqenq+0xvWd1wlWxRe+O52sUPq4fCOzn1drvUAodTPG ggAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=0uDYaKG7efI3+NfcjCvxS1+KgIa76fmhv33RI9RFLbw=; b=ZlZMOGQXnHZQ2KW9aAJZzRvSTD7KrFegWb2nujH84prTNrqLmXtdgSInz89CX4gSoi B/QSjC8Ze9pNrJ7MiAy/YGWWbMYWWsi4qaPcRdWEj/IjCz/0k7E1sBHTevJR+GjPfBJ2 8WeoDfH3uDo4tVSHsdJ/UrK5qllf2UBlCr0p0fE8xWro7VSF/F2bOekhQiMxoetQNbBw auLZ8w0Iw3Qd35KvoPTna03jbt0Ydt/FSYfc0IhrIAkamBsWePOBN6SA7iaY1/CBOYSh hDt+ctI9wZ34yyG5XvhPCbY/yR7dkpYGVcg0gy655c45Pdk3RVoAEBZMn44LIm1OcXPX dLWg== X-Gm-Message-State: AOAM533ikU+eupZJb/oO7st17RpclNYB3Ho6lCATj9GAe+4k8CdEISJR 3om4ThPTCllKdx0AdFxl87woRqz/01pbFw== X-Google-Smtp-Source: ABdhPJwNQ6NolcuI4fo2EMFSmZV5v3hizkmCsrOVSp897Tzx1OrF8N7vMAaCwW8no8YvsCBGHQcl6g== X-Received: by 2002:a17:90a:21ef:: with SMTP id q102mr19042543pjc.101.1594620518503; Sun, 12 Jul 2020 23:08:38 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:38 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Marcel Holtmann , Sathish Narsimman Subject: [PATCH 2/8] Bluetooth: Configure controller address resolution if available Date: Mon, 13 Jul 2020 11:42:14 +0530 Message-Id: <20200713061220.3252-3-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Marcel Holtmann When the LL Privacy support is available, then as part of enabling or disabling passive background scanning, it is required to set up the controller based address resolution as well. Since only passive background scanning is utilizing the whitelist, the address resolution is now bound to the whitelist and passive background scanning. All other resolution can be easily done by the host stack. Signed-off-by: Marcel Holtmann Signed-off-by: Sathish Narsimman --- include/net/bluetooth/hci_core.h | 3 +++ net/bluetooth/hci_request.c | 26 +++++++++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index 34ad5b207598..065250242a1b 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1359,6 +1359,9 @@ void hci_conn_del_sysfs(struct hci_conn *conn); #define scan_coded(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_CODED) || \ ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED)) +/* Use LL Privacy based address resolution if supported */ +#define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY) + /* Use ext scanning if set ext scan param and ext scan enable is supported */ #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \ ((dev)->commands[37] & 0x40)) diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 770b93758112..d3c7ddbcff33 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -675,6 +675,12 @@ void hci_req_add_le_scan_disable(struct hci_request *req) cp.enable = LE_SCAN_DISABLE; hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp); } + + if (use_ll_privacy(hdev) && + hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) { + __u8 enable = 0x00; + hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); + } } static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr, @@ -816,7 +822,8 @@ static bool scan_use_rpa(struct hci_dev *hdev) } static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval, - u16 window, u8 own_addr_type, u8 filter_policy) + u16 window, u8 own_addr_type, u8 filter_policy, + bool addr_resolv) { struct hci_dev *hdev = req->hdev; @@ -825,6 +832,11 @@ static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval, return; } + if (use_ll_privacy(hdev) && addr_resolv) { + u8 enable = 0x01; + hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); + } + /* Use ext scanning if set ext scan param and ext scan enable is * supported */ @@ -898,12 +910,18 @@ static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval, } } +/* Ensure to call hci_req_add_le_scan_disable() first to disable the + * controller based address resolution to be able to reconfigure + * resolving list. + */ void hci_req_add_le_passive_scan(struct hci_request *req) { struct hci_dev *hdev = req->hdev; u8 own_addr_type; u8 filter_policy; u16 window, interval; + /* Background scanning should run with address resolution */ + bool addr_resolv = true; if (hdev->scanning_paused) { bt_dev_dbg(hdev, "Scanning is paused for suspend"); @@ -949,7 +967,7 @@ void hci_req_add_le_passive_scan(struct hci_request *req) bt_dev_dbg(hdev, "LE passive scan with whitelist = %d", filter_policy); hci_req_start_scan(req, LE_SCAN_PASSIVE, interval, window, - own_addr_type, filter_policy); + own_addr_type, filter_policy, addr_resolv); } static u8 get_adv_instance_scan_rsp_len(struct hci_dev *hdev, u8 instance) @@ -2748,6 +2766,8 @@ static int active_scan(struct hci_request *req, unsigned long opt) u8 own_addr_type; /* White list is not used for discovery */ u8 filter_policy = 0x00; + /* Discovery doesn't require controller address resolution */ + bool addr_resolv = false; int err; BT_DBG("%s", hdev->name); @@ -2770,7 +2790,7 @@ static int active_scan(struct hci_request *req, unsigned long opt) hci_req_start_scan(req, LE_SCAN_ACTIVE, interval, hdev->le_scan_window_discovery, own_addr_type, - filter_policy); + filter_policy, addr_resolv); return 0; } From patchwork Mon Jul 13 06:12:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658733 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AFE5313B1 for ; Mon, 13 Jul 2020 06:08:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 97F69207BC for ; Mon, 13 Jul 2020 06:08:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OtgT0v66" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729037AbgGMGIn (ORCPT ); Mon, 13 Jul 2020 02:08:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIm (ORCPT ); Mon, 13 Jul 2020 02:08:42 -0400 Received: from mail-pl1-x641.google.com (mail-pl1-x641.google.com [IPv6:2607:f8b0:4864:20::641]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDAE6C061794 for ; Sun, 12 Jul 2020 23:08:42 -0700 (PDT) Received: by mail-pl1-x641.google.com with SMTP id k5so5040059plk.13 for ; Sun, 12 Jul 2020 23:08:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=3K8YriwZsyJ0Zz+v0ZMtNGnBg6m3R1aaPPOtC++AWHM=; b=OtgT0v669yyJ67928LZrReEFlyAUhdBrmf6BniYd3jo8P42mHDNHsjwP9g6Hfb+z6V /OswKBRefzMpfj+fzkP++Qwq0HBxSvzW+DgNnYUlhyhxbYZRbqyltWnTM2eLQBoZXDqn sS2W8ygJO2LqjdXwfAUu0BHN1Wn7EJcsgPao/rttJ92wOFGlKCpRXvOR8eFyrZ9hEzoO hfEfLz4xDhPetRLjchOlUV+NTPUMsjwL++uePtOc8l3StkoQdN/iifL5cehhUHdnbcZj EIY+6ZdtDdKa41CO+49eacDEUlfBPaI+PRYvpqovKUJWuqcKDEmM98vCXcoLb88+q5WH bG+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=3K8YriwZsyJ0Zz+v0ZMtNGnBg6m3R1aaPPOtC++AWHM=; b=Q5H9fDVA1XcfWeyRtCvGF4lTv0+QDKku90z5t5SEMiLs/xJURv0Vs6O0sm6Y4xSCZy R7ApMEFBOFIO2IuRdq6EOAi1QfxizzB04mwUHQ+R96Bxl8d8wR1QGiXUALfcgGvvFBK1 CGtOPiKqzrns9ReHZ6/M1YlhqhVkXqLn9G4fSvuLz01YD6VewD8sv93UQxl156W3Ol97 L3rSM4uY8d4MVZDS2Ol0ZyfQsDoKj/hsLhWRpFxA9HdKhIFrRYehFZtsc04SUkPWS8B8 tNCDNMaDRlK+x9GdkxpiiPxW0V4p5Xpk+KEyaSyfyGBscb5EwHPIRENBtx/a6wNo8B+k eqhw== X-Gm-Message-State: AOAM532D7Q/IlORqkmf/ksAr5lh6HxxbXL0nd2AznSRCAYp+qXsso6O7 Q5MyFhk/tDLJar+maD29bRlWdrqFdBdjUg== X-Google-Smtp-Source: ABdhPJxqmaDnD9WQSziZUjlE86gBRjb9rxh79IXSexxrC3EL9cB0KVOxhLcwNieGFYMBHDM+AKUrvA== X-Received: by 2002:a17:90a:d086:: with SMTP id k6mr4616498pju.171.1594620522122; Sun, 12 Jul 2020 23:08:42 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:41 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Marcel Holtmann , Sathish Narsimman Subject: [PATCH 3/8] Bluetooth: Update resolving list when updating whitelist Date: Mon, 13 Jul 2020 11:42:15 +0530 Message-Id: <20200713061220.3252-4-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Marcel Holtmann When the whitelist is updated, then also update the entries of the resolving list for devices where IRKs are available. Signed-off-by: Marcel Holtmann Signed-off-by: Sathish Narsimman --- net/bluetooth/hci_request.c | 41 +++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index d3c7ddbcff33..2dc00604412c 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -694,6 +694,21 @@ static void del_from_white_list(struct hci_request *req, bdaddr_t *bdaddr, bt_dev_dbg(req->hdev, "Remove %pMR (0x%x) from whitelist", &cp.bdaddr, cp.bdaddr_type); hci_req_add(req, HCI_OP_LE_DEL_FROM_WHITE_LIST, sizeof(cp), &cp); + + if (use_ll_privacy(req->hdev)) { + struct smp_irk *irk; + + irk = hci_find_irk_by_addr(req->hdev, bdaddr, bdaddr_type); + if (irk) { + struct hci_cp_le_del_from_resolv_list cp; + + cp.bdaddr_type = bdaddr_type; + bacpy(&cp.bdaddr, bdaddr); + + hci_req_add(req, HCI_OP_LE_DEL_FROM_RESOLV_LIST, + sizeof(cp), &cp); + } + } } /* Adds connection to white list if needed. On error, returns -1. */ @@ -714,7 +729,7 @@ static int add_to_white_list(struct hci_request *req, return -1; /* White list can not be used with RPAs */ - if (!allow_rpa && + if (!allow_rpa && !use_ll_privacy(hdev) && hci_find_irk_by_addr(hdev, ¶ms->addr, params->addr_type)) { return -1; } @@ -732,6 +747,28 @@ static int add_to_white_list(struct hci_request *req, cp.bdaddr_type); hci_req_add(req, HCI_OP_LE_ADD_TO_WHITE_LIST, sizeof(cp), &cp); + if (use_ll_privacy(hdev)) { + struct smp_irk *irk; + + irk = hci_find_irk_by_addr(hdev, ¶ms->addr, + params->addr_type); + if (irk) { + struct hci_cp_le_add_to_resolv_list cp; + + cp.bdaddr_type = params->addr_type; + bacpy(&cp.bdaddr, ¶ms->addr); + memcpy(cp.peer_irk, irk->val, 16); + + if (hci_dev_test_flag(hdev, HCI_PRIVACY)) + memcpy(cp.local_irk, hdev->irk, 16); + else + memset(cp.local_irk, 0, 16); + + hci_req_add(req, HCI_OP_LE_ADD_TO_RESOLV_LIST, + sizeof(cp), &cp); + } + } + return 0; } @@ -772,7 +809,7 @@ static u8 update_white_list(struct hci_request *req) } /* White list can not be used with RPAs */ - if (!allow_rpa && + if (!allow_rpa && !use_ll_privacy(hdev) && hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) { return 0x00; } From patchwork Mon Jul 13 06:12:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658735 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CCBFE913 for ; Mon, 13 Jul 2020 06:08:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B5D912075F for ; Mon, 13 Jul 2020 06:08:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UX+daJPI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729049AbgGMGIq (ORCPT ); Mon, 13 Jul 2020 02:08:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35138 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIq (ORCPT ); Mon, 13 Jul 2020 02:08:46 -0400 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 191C3C061794 for ; Sun, 12 Jul 2020 23:08:46 -0700 (PDT) Received: by mail-pg1-x544.google.com with SMTP id p3so5591558pgh.3 for ; Sun, 12 Jul 2020 23:08:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=s2IcTEAY6E8gqIiH1UvcKWcRD7F04eaPXNmCRRgH/EI=; b=UX+daJPIEuP+dPh8PvOHWEB96LtLs8zZGJ2Sf6WAnNrDdiFL7t/n21KdDqUnkzJveF l1a2A2P+XBmqMMCP+uYgo6Pf87yzjZL5IGshlMRuYCUKLKtw0XITUOmgFkUucLXU3MGJ tOPq6Y+HdDZm6OO1gmb0Dsy06o+ARmCygSpY8YIiASNNvctF2xTldH9i2b56lM6+jiF0 IzCDAU34IH1JzG1TPiVFk+zcbMXR5cp04DR3X3sqPYs4v3ufcVGrGJvKam9r1YLG11nj n8GeXfceaekQGucTVpDOrSOeqiFtmSyBCl82v0u8qoX0H6J2CMyllQDebbzYI4sR8Sxe VcOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=s2IcTEAY6E8gqIiH1UvcKWcRD7F04eaPXNmCRRgH/EI=; b=Qi8/aEk01bResru4tJGJF5ldsmP0RdybwUXTCISyhtgd0uetS2xdlHugC7pXg8zBf4 oW8fcY/3ACIo8tpVKQJQX9Pa37LZv7bLxmSj/2LLJiwaJiSGd7R2Gb1f2RM1TMn5EHnt 5nO9T17azBNaKt415eGnVTMCTgWa1P6cga7M5rNdq5rSd6YsKu1w8cXCqIYYDANegzXl X5MOHdfwg3aYHXvpZqy2sVAlM4jDz8w3QtgilUlXNNMmh1VlgIOIoItRj9CaZARQbnNj xirXRlxt+d2cSDgsnsUHkwLkodGbgz2dchHhIVctH+70TR8CbNSDVjmBkgld5K4/ZyFj y3LQ== X-Gm-Message-State: AOAM532Ie/wNtOuyLFCe0j7fihVapDZql/ZD5q9dGo9XteCMw9K5LjjV y+4LVPA5aDnlQFv9Qf4w8DyEydfFFzyJ8g== X-Google-Smtp-Source: ABdhPJy9Uc1Yz2TEZcgp9KLzQFPJzYdZ/F1ZFmHPYFIvdbA+QirBsDe7f06Zg1P2gijcyDo5EGDIrA== X-Received: by 2002:a63:b90a:: with SMTP id z10mr64900272pge.277.1594620525467; Sun, 12 Jul 2020 23:08:45 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:45 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Sathish Narasimman Subject: [PATCH 4/8] Bluetooth: Translate additional address type during le_conn Date: Mon, 13 Jul 2020 11:42:16 +0530 Message-Id: <20200713061220.3252-5-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org When using controller based address resolution, then the new address types 0x02 and 0x03 are used. These types need to be converted back into either public address or random address types. This patch is specially during LE_CREATE_CONN if using own_add_type as 0x02 or 0x03. Signed-off-by: Sathish Narasimman --- net/bluetooth/hci_event.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 927bde511170..eae5bd4a53ac 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -2296,6 +2296,22 @@ static void cs_le_create_conn(struct hci_dev *hdev, bdaddr_t *peer_addr, if (!conn) return; + /* When using controller based address resolution, then the new + * address types 0x02 and 0x03 are used. These types need to be + * converted back into either public address or random address type + */ + if (use_ll_privacy(hdev) && + hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) { + switch (own_address_type) { + case ADDR_LE_DEV_PUBLIC_RESOLVED: + own_address_type = ADDR_LE_DEV_PUBLIC; + break; + case ADDR_LE_DEV_RANDOM_RESOLVED: + own_address_type = ADDR_LE_DEV_RANDOM; + break; + } + } + /* Store the initiator and responder address information which * is needed for SMP. These values will not change during the * lifetime of the connection. From patchwork Mon Jul 13 06:12:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658737 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1C3C4913 for ; Mon, 13 Jul 2020 06:08:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 025A22068F for ; Mon, 13 Jul 2020 06:08:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GBQNpsxH" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729053AbgGMGIt (ORCPT ); Mon, 13 Jul 2020 02:08:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIt (ORCPT ); Mon, 13 Jul 2020 02:08:49 -0400 Received: from mail-pf1-x442.google.com (mail-pf1-x442.google.com [IPv6:2607:f8b0:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 72626C061794 for ; Sun, 12 Jul 2020 23:08:49 -0700 (PDT) Received: by mail-pf1-x442.google.com with SMTP id z3so5525690pfn.12 for ; Sun, 12 Jul 2020 23:08:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=nCVTz/TW1C8kDWW89hWnxqM0hLVoG7bmfidmPtnLD50=; b=GBQNpsxHWzus4iheWeS6lUiRhY4S92H+Qhv+rsw/+d2OrsJcTor9RmgbSXLwwfaytM kaKiuadUNhQS2YFRJWV7n5pin7xM5GlNrYXNP/fTJEzKfsLt2BO86GnfoUZptuEfi1gu NE8htptB+Q6h8QjHIVq92I0PcT7WjouvoyU1wKVoh6ZUf5hJxgO2i0seP0Pckxb38rPo umckJzxaCwf/AUoHGPykj65MgYS2zKI7uYrF8eEdQYg7GFLJauT1UcQFx2/Qo+IsVeno 6R/gqG2UUFtHsVkRug9R2DpgXs/OfQaDSrrCj6ONSFj5uFdPfGYubQMODAcqZZbm9710 B5lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=nCVTz/TW1C8kDWW89hWnxqM0hLVoG7bmfidmPtnLD50=; b=j6Tdy5C2uPP66ZFJnwDeWYloeYbV9bYX9nbJBR1/sP8dVSdf7neI4hwl7jYgwLwzPX BHDUsdKoNfEQlsTamjW95OgV2fS0G/r0x+4Blm6GfaFomIeJOTxXuX2imgHjhZjzCrFP PWwhzi1dlxqLtrUQAwfi2NmS9KDN8De6R61zW8F5N4t8lUMy6+mxDJgGPsfnvb4gxx4f qMDXw1Xhmzv6kRcci6KO9HgbhuTpwcG7kyL8s8X/qLMrx7CRlbv4kmpNeIaJUyCaNu3s KHR0nLkwKP5pbFkkak969g7AkEBQBl6V2tJPvXvheybP2j1CrsqAafQ6Ci+ij1D0CA7t fmtw== X-Gm-Message-State: AOAM5320YcXWnWXyPjLqkv07J+pbFtyx6/8b1dQcyHUGPaESJBYB3YAe RgkT3c4e9sDNnXCwhNiHgdmi2FXmsy3J1Q== X-Google-Smtp-Source: ABdhPJwl3t7rbzBeWndSz7LewxAbB+WZaDknkJGrAGoZQkxaRQ4+Gftkk/MD3qzFtLqu/4r8KPZObA== X-Received: by 2002:a63:2241:: with SMTP id t1mr66885154pgm.440.1594620528835; Sun, 12 Jul 2020 23:08:48 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:48 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Sathish Narasimman Subject: [PATCH 5/8] Bluetooth: Let controller creates RPA during le create conn Date: Mon, 13 Jul 2020 11:42:17 +0530 Message-Id: <20200713061220.3252-6-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org When address resolution is enabled and set_privacy is enabled let's use own address type as 0x03 Signed-off-by: Sathish Narasimman --- net/bluetooth/hci_request.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 2dc00604412c..e16d5154b2cf 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -2201,7 +2201,13 @@ int hci_update_random_address(struct hci_request *req, bool require_privacy, if (use_rpa) { int to; - *own_addr_type = ADDR_LE_DEV_RANDOM; + /* If Controller supports LL Privacy use own address type is + * 0x03 + */ + if (use_ll_privacy(hdev)) + *own_addr_type = ADDR_LE_DEV_RANDOM_RESOLVED; + else + *own_addr_type = ADDR_LE_DEV_RANDOM; if (!hci_dev_test_and_clear_flag(hdev, HCI_RPA_EXPIRED) && !bacmp(&hdev->random_addr, &hdev->rpa)) From patchwork Mon Jul 13 06:12:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658739 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 509C0913 for ; Mon, 13 Jul 2020 06:08:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 32F192075F for ; Mon, 13 Jul 2020 06:08:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SSBHmv6M" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729059AbgGMGIw (ORCPT ); Mon, 13 Jul 2020 02:08:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIw (ORCPT ); Mon, 13 Jul 2020 02:08:52 -0400 Received: from mail-pg1-x542.google.com (mail-pg1-x542.google.com [IPv6:2607:f8b0:4864:20::542]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76530C061794 for ; Sun, 12 Jul 2020 23:08:52 -0700 (PDT) Received: by mail-pg1-x542.google.com with SMTP id z5so5577355pgb.6 for ; Sun, 12 Jul 2020 23:08:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gqesOFNLs3tg0XsWgFXS5D1nTeu/tqmZApdWPI1nKEU=; b=SSBHmv6MrXGTdUjKJlZ6wRDj8BYpx0/JsYTjUEAP/hhWS4PoLO1jdYGLn8o3PkdBkU eQySQiT2EA0MfgvDByFUIV8C7lRm6bQXaPLR6isltPw6MFkkNpBcTzpFfsgLO+wy7lxB bhKT7gYlOT8TtM8rGYis7AAEr/UUFmovp6m7TzPkpejgGCCiby4GMrBg2DP6CS29YZS7 BsVLSLsBbYscJ3kputOuiejbCDpWEBq/WQb4OTOF0vxZybuT632lIcx6skhVVWzg0rtn CcSCwIliYnp1lWIa9OhZQuZxySUAiZnn8N2m69s9TU6V3Wr3DdPLFTL1JWE0/MuQbpti PdWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gqesOFNLs3tg0XsWgFXS5D1nTeu/tqmZApdWPI1nKEU=; b=Ya4gIQYMzFHCYlojdQhXSphowk7m2lRLZ6MgoFK8wSbAsemDFZQj93Klck2RdG74hn OIkdFBIyb1ygeW2oxiCwvKWHSYHeUKXWGzscewLsi5Gb3xpDWVc8QG/bI2bDZ89S1BmR +9fPR8Jph7cRBDHipRJu7LkNbMGn1d/eUtPZSWETHM+6IGWeNPILTyjqnd4uWVN2dG0X Eh/aKHvVnZQ+W+HGOuDwkNw0rTD3Z59tT5ujan6NNJUcUy0XYU5vWudaOYFmHGtPCCv+ 1Q8RmyMgBWVYJ6YhhGm8zD9+T/tHbYRnaKK9CLn4deF75iViDiVRBtL6oJMJL2fBAMQZ zo7g== X-Gm-Message-State: AOAM531N6ILq7KVURNL4JdCWdotnSQAFGrF5qkDJnzp5Bqr+j1sOwxwX PKw4/FzOc20o9nS42ib8MKlYXApY58NZ+g== X-Google-Smtp-Source: ABdhPJzJyTeFvqjbSipn7qyPqlMZ76dv/zUyZ7JuO6LH/Lc+cj4zebrwguLcfJTr04g/p9nRZJ/e3g== X-Received: by 2002:a63:2104:: with SMTP id h4mr69899532pgh.427.1594620531727; Sun, 12 Jul 2020 23:08:51 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:51 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Sathish Narasimman Subject: [PATCH 6/8] Bluetooth: Enable/Disable address resolution during le create conn Date: Mon, 13 Jul 2020 11:42:18 +0530 Message-Id: <20200713061220.3252-7-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org In this patch if le_create_conn process is started restrict to disable address resolution and same is disabled during le_enh_connection_complete Signed-off-by: Sathish Narasimman --- net/bluetooth/hci_conn.c | 7 +++++- net/bluetooth/hci_event.c | 4 ++++ net/bluetooth/hci_request.c | 45 ++++++++++++++++++++++++++++--------- net/bluetooth/hci_request.h | 3 ++- net/bluetooth/mgmt.c | 2 +- 5 files changed, 47 insertions(+), 14 deletions(-) diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index 8805d68e65f2..caf1598758bf 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -1003,6 +1003,11 @@ struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, struct hci_request req; int err; + /* This ensures that during disable le_scan address resolution + * will not be disabled if it is followed by le_create_conn + */ + bool rpa_le_conn = true; + /* Let's make sure that le is enabled.*/ if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { if (lmp_le_capable(hdev)) @@ -1103,7 +1108,7 @@ struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, * state. */ if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { - hci_req_add_le_scan_disable(&req); + hci_req_add_le_scan_disable(&req, rpa_le_conn); hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED); } diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index eae5bd4a53ac..684c68cb5c76 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -5221,6 +5221,10 @@ static void hci_le_enh_conn_complete_evt(struct hci_dev *hdev, le16_to_cpu(ev->interval), le16_to_cpu(ev->latency), le16_to_cpu(ev->supervision_timeout)); + + if (use_ll_privacy(hdev) && + hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) + hci_req_disable_address_resolution(hdev); } static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb) diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index e16d5154b2cf..c3193f7f9ff0 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -428,7 +428,7 @@ static void __hci_update_background_scan(struct hci_request *req) if (!hci_dev_test_flag(hdev, HCI_LE_SCAN)) return; - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); BT_DBG("%s stopping background scanning", hdev->name); } else { @@ -447,7 +447,7 @@ static void __hci_update_background_scan(struct hci_request *req) * don't miss any advertising (due to duplicates filter). */ if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); hci_req_add_le_passive_scan(req); @@ -652,7 +652,7 @@ void __hci_req_update_eir(struct hci_request *req) hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp); } -void hci_req_add_le_scan_disable(struct hci_request *req) +void hci_req_add_le_scan_disable(struct hci_request *req, bool rpa_le_conn) { struct hci_dev *hdev = req->hdev; @@ -676,8 +676,9 @@ void hci_req_add_le_scan_disable(struct hci_request *req) hci_req_add(req, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp); } + /* Disable address resolution */ if (use_ll_privacy(hdev) && - hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) { + hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION) && !rpa_le_conn) { __u8 enable = 0x00; hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); } @@ -1072,7 +1073,7 @@ static void hci_req_config_le_suspend_scan(struct hci_request *req) { /* Before changing params disable scan if enabled */ if (hci_dev_test_flag(req->hdev, HCI_LE_SCAN)) - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); /* Configure params and enable scanning */ hci_req_add_le_passive_scan(req); @@ -1140,7 +1141,7 @@ void hci_req_prepare_suspend(struct hci_dev *hdev, enum suspended_state next) /* Disable LE passive scan if enabled */ if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) - hci_req_add_le_scan_disable(&req); + hci_req_add_le_scan_disable(&req, false); /* Mark task needing completion */ set_bit(SUSPEND_SCAN_DISABLE, hdev->suspend_tasks); @@ -1701,6 +1702,28 @@ int hci_req_update_adv_data(struct hci_dev *hdev, u8 instance) return hci_req_run(&req, NULL); } +static void enable_addr_resolution_complete(struct hci_dev *hdev, u8 status, + u16 opcode) +{ + BT_DBG("%s status %u", hdev->name, status); +} + +void hci_req_disable_address_resolution(struct hci_dev *hdev) +{ + struct hci_request req; + __u8 enable = 0x00; + + if (!use_ll_privacy(hdev) && + !hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) + return; + + hci_req_init(&req, hdev); + + hci_req_add(&req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); + + hci_req_run(&req, enable_addr_resolution_complete); +} + static void adv_enable_complete(struct hci_dev *hdev, u8 status, u16 opcode) { BT_DBG("%s status %u", hdev->name, status); @@ -2626,7 +2649,7 @@ static void bg_scan_update(struct work_struct *work) static int le_scan_disable(struct hci_request *req, unsigned long opt) { - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); return 0; } @@ -2729,7 +2752,7 @@ static int le_scan_restart(struct hci_request *req, unsigned long opt) return 0; } - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); if (use_ext_scan(hdev)) { struct hci_cp_le_set_ext_scan_enable ext_enable_cp; @@ -2820,7 +2843,7 @@ static int active_scan(struct hci_request *req, unsigned long opt) * discovery scanning parameters. */ if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); /* All active scans will be done with either a resolvable private * address (when privacy feature has been enabled) or non-resolvable @@ -2935,14 +2958,14 @@ bool hci_req_stop_discovery(struct hci_request *req) if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { cancel_delayed_work(&hdev->le_scan_disable); - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); } ret = true; } else { /* Passive scanning */ if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { - hci_req_add_le_scan_disable(req); + hci_req_add_le_scan_disable(req, false); ret = true; } } diff --git a/net/bluetooth/hci_request.h b/net/bluetooth/hci_request.h index 0e81614d235e..12bea10e7d70 100644 --- a/net/bluetooth/hci_request.h +++ b/net/bluetooth/hci_request.h @@ -65,11 +65,12 @@ void __hci_req_write_fast_connectable(struct hci_request *req, bool enable); void __hci_req_update_name(struct hci_request *req); void __hci_req_update_eir(struct hci_request *req); -void hci_req_add_le_scan_disable(struct hci_request *req); +void hci_req_add_le_scan_disable(struct hci_request *req, bool rpa_le_conn); void hci_req_add_le_passive_scan(struct hci_request *req); void hci_req_prepare_suspend(struct hci_dev *hdev, enum suspended_state next); +void hci_req_disable_address_resolution(struct hci_dev *hdev); void hci_req_reenable_advertising(struct hci_dev *hdev); void __hci_req_enable_advertising(struct hci_request *req); void __hci_req_disable_advertising(struct hci_request *req); diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index 686ef4792831..c292d5de4dc3 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -5226,7 +5226,7 @@ static int set_scan_params(struct sock *sk, struct hci_dev *hdev, hci_req_init(&req, hdev); - hci_req_add_le_scan_disable(&req); + hci_req_add_le_scan_disable(&req, false); hci_req_add_le_passive_scan(&req); hci_req_run(&req, NULL); From patchwork Mon Jul 13 06:12:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658741 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1B42E13B1 for ; Mon, 13 Jul 2020 06:08:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 024A12075F for ; Mon, 13 Jul 2020 06:08:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mSGENNWu" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729069AbgGMGIz (ORCPT ); Mon, 13 Jul 2020 02:08:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGIz (ORCPT ); Mon, 13 Jul 2020 02:08:55 -0400 Received: from mail-pl1-x643.google.com (mail-pl1-x643.google.com [IPv6:2607:f8b0:4864:20::643]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4B13FC061794 for ; Sun, 12 Jul 2020 23:08:55 -0700 (PDT) Received: by mail-pl1-x643.google.com with SMTP id m16so3856788pls.5 for ; Sun, 12 Jul 2020 23:08:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=PK9IFrqGA8tYf+eWNXSfj5UIMsffCcBtO2fOhU2TTN4=; b=mSGENNWuz+5DFcCC++eo64EguI3yOMGm+wbneGECzOF+p3uN2wnjo82+pBQDToUzOq glUk9u3mTEWocdjxMo41FNifcAmUveljzUTvjSvLgQmN64evIJZdyLY93Uy++YGXRFWc iOn9I5Daktdi0Zn3NJoj7W0SV4glqhfgdb3NlFRiEl4GeTfBJvvLe6plxy6aqc5aGuBx emMCW0DU/F4bJV5Pn9qkTixAta17IsJjOTWskH5Ra6XM9snQ5k1m3OXx+99Oyheg4BZW OMEEwAk4jZqyWTMPJit+rPUcKCoWJHznO7oTw/eB5vr0/foUbcUigz5snvWiziBfyrKu yT9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=PK9IFrqGA8tYf+eWNXSfj5UIMsffCcBtO2fOhU2TTN4=; b=NmSuAuztgRWvO9Jtz/CWtbfTuGfut/AMbEj53YSmj9Q4psZas56eg7Odu6Z2MuJ8R+ 8Wbn4kuKvN5w6JLxmN4ez5jPqbKyNxW8aayqebm9euAhVH8tjPW7v+Uh/XWwUxPM1sQ/ /8jf31SuNAZl+l2B38l//6dfQKKlWOzjN188VLpRwvvLtb8hC72xxnllCVzksP2yjAwl PysC0ksTteoGZU48jxyAOQu52+SogGUkJ2kBKFSBxnmy8CQF4g5lVCFXDFsRj3KkKcFk Kxy6tA6vaSqdrJtv+o+nAbwFPHUh4IfHjDgKMx8lkG7bvRtAASUESuc6ub5hGQGm3fCp Jk0g== X-Gm-Message-State: AOAM5317LATQWkN4di7Mu3+qbZUJ6XaiRdBMh+tN+6DvOT/WG7lj9jZL qm0g+vOV1WE71GCxJNCYEi6591nnGfhQiw== X-Google-Smtp-Source: ABdhPJx2384XBpTsijDnW4mdF4LV1bBMe5R6BRfL9GoNcFsij5XZ1yQVyfU+y5reTHiSHJqM9ql3yA== X-Received: by 2002:a17:90b:33c5:: with SMTP id lk5mr18743064pjb.181.1594620534693; Sun, 12 Jul 2020 23:08:54 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:54 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Sathish Narasimman Subject: [PATCH 7/8] Bluetooth: Enable RPA Timeout Date: Mon, 13 Jul 2020 11:42:19 +0530 Message-Id: <20200713061220.3252-8-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Enable RPA timeout during bluetooth initialization. The RPA timeout value is used from hdev, which initialized from debug_fs Signed-off-by: Sathish Narasimman --- include/net/bluetooth/hci.h | 2 ++ net/bluetooth/hci_core.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index abab8b5981a7..4ff2fc4498f3 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h @@ -1637,6 +1637,8 @@ struct hci_rp_le_read_resolv_list_size { #define HCI_OP_LE_SET_ADDR_RESOLV_ENABLE 0x202d +#define HCI_OP_LE_SET_RPA_TIMEOUT 0x202e + #define HCI_OP_LE_READ_MAX_DATA_LEN 0x202f struct hci_rp_le_read_max_data_len { __u8 status; diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 4af208b82138..2030536cc5d8 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -762,6 +762,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt) hci_req_add(req, HCI_OP_LE_CLEAR_RESOLV_LIST, 0, NULL); } + if (hdev->commands[35] & 0x40) { + __le16 rpa_timeout = cpu_to_le16(hdev->rpa_timeout); + + /* Set RPA timeout */ + hci_req_add(req, HCI_OP_LE_SET_RPA_TIMEOUT, 2, + &rpa_timeout); + } + if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) { /* Read LE Maximum Data Length */ hci_req_add(req, HCI_OP_LE_READ_MAX_DATA_LEN, 0, NULL); From patchwork Mon Jul 13 06:12:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sathish Narasimman X-Patchwork-Id: 11658743 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0F467913 for ; Mon, 13 Jul 2020 06:08:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id EBC7F20791 for ; Mon, 13 Jul 2020 06:08:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="opUp1mgi" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729076AbgGMGI6 (ORCPT ); Mon, 13 Jul 2020 02:08:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35176 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726571AbgGMGI6 (ORCPT ); Mon, 13 Jul 2020 02:08:58 -0400 Received: from mail-pf1-x443.google.com (mail-pf1-x443.google.com [IPv6:2607:f8b0:4864:20::443]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B686C061794 for ; Sun, 12 Jul 2020 23:08:58 -0700 (PDT) Received: by mail-pf1-x443.google.com with SMTP id z3so5525810pfn.12 for ; Sun, 12 Jul 2020 23:08:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=f1oHIKp+Xl1MtDR3jCF7Dp+Qm8VEDoGCEovuZWBlKwk=; b=opUp1mgiqEffoAGAiGzfX0j/sMLfLwQUNb1w+FbqcvexS5XvmotvlAln4jxDZDQ1kw 2IaVtk+P5h/AdjOEenkbm3sj9xOGPuKfHjcDOyuYJaO7SZRTGUyyjzfXegaJpKgTYcEB R6pddPdBPKJ+NsSyRzyBJsjoyvRRvVLsSHCwCEdfSWhS6uVBeUuIvRdODgTekF4ikSh2 7mTg5CkG/2zG7LrqvXkWQysgcpaOEKjrP5H6S0iTh2gXg0qnuW60OwReogjkDL4aw8Dp IBhgQMLqyjX4M+iy7vIJOq4oD7s8kVQSfsJGhRHDlrM672Dt974H8LkvVfpNfHVY1WaN Sz7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=f1oHIKp+Xl1MtDR3jCF7Dp+Qm8VEDoGCEovuZWBlKwk=; b=ZzPsSWgyxlQ+2AtwgQ2YumV4RCMSAe4VBbc1Qeh3HE7A5ybyxu8bNPxIHcHYn5mUph OK4j6Od3HcL5HFcqVXQNzu+UYD/+lly+SDW/hggB9QeTIohKQASf8I5xKafutExLWpvZ 6jEvu6CU0QNyVoeAMcHfI7MCri7hV5HH6izOUmdGE7juXGg9Qx4jnfO+RYGMuAc6P7pE WeM9AqVqw3Au8B9r4Q5RFzcIO6/4hkByx1ZUH7wfVh4/sRGPHwqKoRxAabXm7H+CEF5V PNqLFsNbkUwjVbufh+RhiVptN0JcTooY9KQyr1OOWgcoM6Ca1G9bIfneXT88tpfHl617 8v0w== X-Gm-Message-State: AOAM531+38UmehCViCaAYBfuambuuRjHzck1OI2tJknZ1tfImsVhCxHE xL0/bZ8ZPHwPeDVr4dNj6ayJBUhLPZUxXw== X-Google-Smtp-Source: ABdhPJyXcXuFvO1GAtWOvs49o5HbgXpUT38BhwxbIFeklm2RDU2fJuvAmp/ASIx6L1qNLBEmeBtW0Q== X-Received: by 2002:a63:6cd:: with SMTP id 196mr67430676pgg.169.1594620537567; Sun, 12 Jul 2020 23:08:57 -0700 (PDT) Received: from nsathish-Latitude-7480.iind.intel.com ([192.55.54.40]) by smtp.gmail.com with ESMTPSA id e5sm12787172pjy.26.2020.07.12.23.08.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Jul 2020 23:08:57 -0700 (PDT) From: Sathish Narasimman X-Google-Original-From: Sathish Narasimman To: linux-bluetooth@vger.kernel.org Cc: Sathish Narasimman Subject: [PATCH 8/8] Bluetooth: Enable controller RPA resolution using Experimental feature Date: Mon, 13 Jul 2020 11:42:20 +0530 Message-Id: <20200713061220.3252-9-sathish.narasimman@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200713061220.3252-1-sathish.narasimman@intel.com> References: <20200713061220.3252-1-sathish.narasimman@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org This patch adds support to enable the use of RPA Address resolution using expermental feature mgmt command. Signed-off-by: Sathish Narasimman --- include/net/bluetooth/hci.h | 1 + net/bluetooth/hci_event.c | 3 ++- net/bluetooth/hci_request.c | 6 +++-- net/bluetooth/mgmt.c | 52 +++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h index 4ff2fc4498f3..cb284365b4c1 100644 --- a/include/net/bluetooth/hci.h +++ b/include/net/bluetooth/hci.h @@ -307,6 +307,7 @@ enum { HCI_FORCE_BREDR_SMP, HCI_FORCE_STATIC_ADDR, HCI_LL_RPA_RESOLUTION, + HCI_ENABLE_RPA_RESOLUTION, HCI_CMD_PENDING, HCI_FORCE_NO_MITM, diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 684c68cb5c76..c8a5e1e4dba2 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c @@ -5222,7 +5222,8 @@ static void hci_le_enh_conn_complete_evt(struct hci_dev *hdev, le16_to_cpu(ev->latency), le16_to_cpu(ev->supervision_timeout)); - if (use_ll_privacy(hdev) && + if (hci_dev_test_flag(hdev, HCI_ENABLE_RPA_RESOLUTION) && + use_ll_privacy(hdev) && hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) hci_req_disable_address_resolution(hdev); } diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index c3193f7f9ff0..cb44b83539e6 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -677,7 +677,8 @@ void hci_req_add_le_scan_disable(struct hci_request *req, bool rpa_le_conn) } /* Disable address resolution */ - if (use_ll_privacy(hdev) && + if (hci_dev_test_flag(hdev, HCI_ENABLE_RPA_RESOLUTION) && + use_ll_privacy(hdev) && hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION) && !rpa_le_conn) { __u8 enable = 0x00; hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); @@ -870,7 +871,8 @@ static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval, return; } - if (use_ll_privacy(hdev) && addr_resolv) { + if (hci_dev_test_flag(hdev, HCI_ENABLE_RPA_RESOLUTION) && + use_ll_privacy(hdev) && addr_resolv) { u8 enable = 0x01; hci_req_add(req, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE, 1, &enable); } diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index c292d5de4dc3..fbe02ab5fa05 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -3759,6 +3759,12 @@ static const u8 simult_central_periph_uuid[16] = { 0x96, 0x46, 0xc0, 0x42, 0xb5, 0x10, 0x1b, 0x67, }; +/* 15c0a148-c273-11ea-b3de-0242ac130004 */ +static const u8 rpa_resolution_uuid[16] = { + 0x04, 0x00, 0x13, 0xac, 0x42, 0x02, 0xde, 0xb3, + 0xea, 0x11, 0x73, 0xc2, 0x48, 0xa1, 0xc0, 0x15, +}; + static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev, void *data, u16 data_len) { @@ -3795,6 +3801,17 @@ static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev, idx++; } + if (hdev) { + if (hci_dev_test_flag(hdev, HCI_ENABLE_RPA_RESOLUTION)) + flags = BIT(0); + else + flags = 0; + + memcpy(rp->features[idx].uuid, rpa_resolution_uuid, 16); + rp->features[idx].flags = cpu_to_le32(flags); + idx++; + } + rp->feature_count = cpu_to_le16(idx); /* After reading the experimental features information, enable @@ -3895,6 +3912,41 @@ static int set_exp_feature(struct sock *sk, struct hci_dev *hdev, } #endif + if (!memcmp(cp->uuid, rpa_resolution_uuid, 16)) { + bool val; + int err; + + /* Parameters are limited to a single octet */ + if (data_len != MGMT_SET_EXP_FEATURE_SIZE + 1) + return mgmt_cmd_status(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); + + /* Only boolean on/off is supported */ + if (cp->param[0] != 0x00 && cp->param[0] != 0x01) + return mgmt_cmd_status(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, + MGMT_STATUS_INVALID_PARAMS); + + val = !!cp->param[0]; + + if (val) + hci_dev_set_flag(hdev, HCI_ENABLE_RPA_RESOLUTION); + else + hci_dev_clear_flag(hdev, HCI_ENABLE_RPA_RESOLUTION); + + memcpy(rp.uuid, rpa_resolution_uuid, 16); + rp.flags = cpu_to_le32(val ? BIT(0) : 0); + + hci_sock_set_flag(sk, HCI_MGMT_EXP_FEATURE_EVENTS); + + err = mgmt_cmd_complete(sk, MGMT_INDEX_NONE, + MGMT_OP_SET_EXP_FEATURE, 0, + &rp, sizeof(rp)); + + return err; + } + return mgmt_cmd_status(sk, hdev ? hdev->id : MGMT_INDEX_NONE, MGMT_OP_SET_EXP_FEATURE, MGMT_STATUS_NOT_SUPPORTED);