From patchwork Fri Nov 5 21:12:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606041 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 88D2BC433F5 for ; Fri, 5 Nov 2021 21:12:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6898061157 for ; Fri, 5 Nov 2021 21:12:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232771AbhKEVP2 (ORCPT ); Fri, 5 Nov 2021 17:15:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229961AbhKEVP1 (ORCPT ); Fri, 5 Nov 2021 17:15:27 -0400 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C4887C061570 for ; Fri, 5 Nov 2021 14:12:47 -0700 (PDT) Received: by mail-pj1-x102a.google.com with SMTP id n11-20020a17090a2bcb00b001a1e7a0a6a6so4250436pje.0 for ; Fri, 05 Nov 2021 14:12:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=v+jlaIrPeh8post1bqeTS+Sa76sib7DaRQHzBSBB9XM=; b=HCrP1yOzt0KK2Wt16Hxy4Vva5DfPh/EBBBk4JlRQrN0FRUGlAxrcQS/FkaW9kot1K+ eR30jU1pElItAq6jZySJ2KvwTeBhACE8Y46tcO5QR5dtdFwZhZr6s4vJsHjz4QRJklfi 2aZOABMMQooCe1gzBgG2SiZriqCFkBrFa4ar1cB4HF1zk//xZWG52UQbIrHqOM1nFSRd Cl64Gf7u+xhylOsdHK3wFslWf6y8ff3sZLm5sBwtIEJuajKeiUUKvw45PQ69LA+hDFMC o4B1LBmP6zEpufBV5p00x2vhoqgzrYEsrYITuo9VW151qHFkqcH6CIh/Q997+PAK7jSu eqYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=v+jlaIrPeh8post1bqeTS+Sa76sib7DaRQHzBSBB9XM=; b=ge5Ffdw40Lg/bc7+vPHhJZJ1lAAX1z2P9/XWh2tq3usDWT50O261dib9XFUx0ntMd/ xSyFOySQ5KTsxfKIlqunaVZRsRwEdXxfvT7S0tzwMA3tW8eaWclEd8ATGAosdDTeaIbL ffLXu4iEIAoAphaDtwiKKHzDnWpf3foC2tY3NlXVxcr3KIAgThNd/IsDkqKq46gbRDx2 o5RPc4ZoZRTwcTzDIAbjP2Gq32CStJemuAQoSdp5hwkVzOIHKFvB/KxJiU+PUK5hCXpy o6U+e3f0VIokpqjt7eRMeT75HSY4bq6rwh70YzmyLSBPYWHyQDxecRumZCJXwNosVDPY er0A== X-Gm-Message-State: AOAM531H+HebnOEKGmByH8toY7jCAsRnOMKiQziiReh17bfRmXAI5H2h Ms6rddP749vHIBbA1ld7AEV724Ex+r4= X-Google-Smtp-Source: ABdhPJzkekbKreNckOYI0gx2k3Hq32VLNCLcyEUOYvX04Pr+9tty+aFyA47vaOMcbOFeCVsBOP76sg== X-Received: by 2002:a17:90b:3b8e:: with SMTP id pc14mr32056500pjb.129.1636146766825; Fri, 05 Nov 2021 14:12:46 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:46 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 1/6] btdev: Add support for LE Set Privacy mode Date: Fri, 5 Nov 2021 14:12:40 -0700 Message-Id: <20211105211245.424024-1-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This adds support for LE Set Privacy mode which is required when using Device Privacy mode: < HCI Command: LE Set Priva.. (0x08|0x004e) plen 8 Peer Identity address type: Public (0x00) Peer Identity address: BC:9A:78:56:34:12 (OUI BC-9A-78) Privacy Mode: Use Device Privacy (0x01) > HCI Event: Command Complete (0x0e) plen 4 LE Set Privacy Mode (0x08|0x004e) ncmd 1 --- emulator/btdev.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/emulator/btdev.c b/emulator/btdev.c index 7b311f347..72ce21517 100644 --- a/emulator/btdev.c +++ b/emulator/btdev.c @@ -72,6 +72,7 @@ struct btdev_al { struct btdev_rl { uint8_t type; bdaddr_t addr; + uint8_t mode; uint8_t peer_irk[16]; uint8_t local_irk[16]; }; @@ -5336,6 +5337,48 @@ static int cmd_read_tx_power(struct btdev *dev, const void *data, uint8_t len) return 0; } +static int cmd_set_privacy_mode(struct btdev *dev, const void *data, + uint8_t len) +{ + const struct bt_hci_cmd_le_set_priv_mode *cmd = data; + const struct btdev_rl *rl; + uint8_t status; + + /* This command shall not be used when address resolution is enabled in + * the Controller and: + * • Advertising (other than periodic advertising) is enabled, + * • Scanning is enabled, or + * • an HCI_LE_Create_Connection, HCI_LE_Extended_Create_Connection, + * or HCI_LE_Periodic_Advertising_Create_Sync command is pending. + */ + if (dev->le_rl_enable || dev->le_adv_enable || dev->le_scan_enable) { + status = BT_HCI_ERR_COMMAND_DISALLOWED; + goto done; + } + + /* If the device is not on the resolving list, the Controller shall + * return the error code Unknown Connection Identifier (0x02). + */ + rl = rl_find(dev, cmd->peer_id_addr_type, cmd->peer_id_addr); + if (!rl) { + status = BT_HCI_ERR_UNKNOWN_CONN_ID; + goto done; + } + + if (cmd->priv_mode > 0x01) { + status = BT_HCI_ERR_INVALID_PARAMETERS; + goto done; + } + + ((struct btdev_rl *)rl)->mode = cmd->priv_mode; + status = BT_HCI_ERR_SUCCESS; + +done: + cmd_complete(dev, BT_HCI_CMD_LE_SET_PRIV_MODE, &status, sizeof(status)); + + return 0; +} + #define CMD_LE_50 \ CMD(BT_HCI_CMD_LE_SET_DEFAULT_PHY, cmd_set_default_phy, NULL), \ CMD(BT_HCI_CMD_LE_SET_ADV_SET_RAND_ADDR, cmd_set_adv_rand_addr, NULL), \ @@ -5372,7 +5415,8 @@ static int cmd_read_tx_power(struct btdev *dev, const void *data, uint8_t len) CMD(BT_HCI_CMD_LE_CLEAR_PERIODIC_ADV_LIST, cmd_per_adv_clear, NULL), \ CMD(BT_HCI_CMD_LE_READ_PERIODIC_ADV_LIST_SIZE, \ cmd_read_per_adv_list_size, NULL), \ - CMD(BT_HCI_CMD_LE_READ_TX_POWER, cmd_read_tx_power, NULL) + CMD(BT_HCI_CMD_LE_READ_TX_POWER, cmd_read_tx_power, NULL), \ + CMD(BT_HCI_CMD_LE_SET_PRIV_MODE, cmd_set_privacy_mode, NULL) static const struct btdev_cmd cmd_le_5_0[] = { CMD_COMMON_ALL, @@ -5408,6 +5452,7 @@ static void set_le_50_commands(struct btdev *btdev) btdev->commands[38] |= 0x20; /* LE Clear Periodic Adv List */ btdev->commands[38] |= 0x40; /* LE Read Periodic Adv List Size */ btdev->commands[38] |= 0x80; /* LE Read Transmit Power */ + btdev->commands[39] |= 0x04; /* LE Set Privacy Mode */ btdev->cmds = cmd_le_5_0; } From patchwork Fri Nov 5 21:12:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606043 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A55DC433EF for ; Fri, 5 Nov 2021 21:12:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 343346113B for ; Fri, 5 Nov 2021 21:12:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232798AbhKEVP3 (ORCPT ); Fri, 5 Nov 2021 17:15:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229961AbhKEVP2 (ORCPT ); Fri, 5 Nov 2021 17:15:28 -0400 Received: from mail-pj1-x1035.google.com (mail-pj1-x1035.google.com [IPv6:2607:f8b0:4864:20::1035]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8F4B1C061570 for ; Fri, 5 Nov 2021 14:12:48 -0700 (PDT) Received: by mail-pj1-x1035.google.com with SMTP id gx15-20020a17090b124f00b001a695f3734aso4236185pjb.0 for ; Fri, 05 Nov 2021 14:12:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=FmAlti555ldAvkBkqitSOTT11RXzmUOqFhA3gOPv/ps=; b=X8wL54kvrjl9V9KnXZ0ZDPWGNV34EePJm3N5Smo42t5enDxz/TvIrixkxKyxz8faxI ESbNPgdbkkX3NMaownFfMPP36ZhlCcef4fDHjlIIhnOOOKwExZAOlkdXG+VHJi/V8lAL h6J+WBrCRRfKPeOdZbI6NXGjoyG3aPqC8sdefDUL+Vbt5nTnBImT0ehZdQEsBdMpi1uF sctXTtYJCNB3nCOeARTRiljw4TrZSkc6Rwq270wsJJvMNSPtDDwj+al2j/eLBUQ9VQgv V2zTBgF7jKjbyZUoz396BY8IT3dZxk6tLn/t1ys8SuRiFYejMXHlQy376HP8LRtmyW8W ehGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=FmAlti555ldAvkBkqitSOTT11RXzmUOqFhA3gOPv/ps=; b=nfUD/0Gtju/VtrIWrdIVNmkmthRHRLJ1i11XowLNHm/bWwHlIdbrbfyXYtZuYtltzf KDANaaLx8WLkpJaHviVxw6Xfi04+bbgcUy3pQPKcN90Z3YmVZHIvzdFCjh135Tq888Mc TtMSthUSdL4w+eSfJJaJaMUwnSphTIxsn83+Tg1ugzVgwDYCdL2AicSEvRY5QO+GuHBT 3lZaofawUo0opyVSkNyhdWnPQ9aIH1HeybD3nelR+IonxIcUjiBNNyUK+NwIPPeW4ijF 7RWs5TZMMOeSEDsBRq/qRo2vrnmOhbe1IOPn/V5AG+6Gqa/jTtmZwCBaA4kRsi3Ya2MM hkBA== X-Gm-Message-State: AOAM532Hp7Tk46DQkBjZayNGFsiPHsfHo/0OMr4Rr6AtSBwLNgsLorJt ZA35HaYs0+yYF1oOpnTS+jAcGLFq9gc= X-Google-Smtp-Source: ABdhPJxNA44GWdLZPSbsxoioMCmfGwizKeQ2CHA/1A21+7Ta2BwzkBIlYpHsJAuxB3I5RIKvzFahig== X-Received: by 2002:a17:90b:224f:: with SMTP id hk15mr14089886pjb.173.1636146767825; Fri, 05 Nov 2021 14:12:47 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:47 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 2/6] mgmt-api: Add new Device Flag to use Device Privacy Mode Date: Fri, 5 Nov 2021 14:12:41 -0700 Message-Id: <20211105211245.424024-2-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211105211245.424024-1-luiz.dentz@gmail.com> References: <20211105211245.424024-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This adds a new flag to Get/Set Device Flag commands so it is possible to set the Device Privacy Mode which allows to connect when the remote device uses either identity or random address. --- doc/mgmt-api.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt index 97d33e30a..b7a152c14 100644 --- a/doc/mgmt-api.txt +++ b/doc/mgmt-api.txt @@ -3421,6 +3421,7 @@ Get Device Flags Command available bits: 0 Remote Wakeup enabled + 1 Device Privacy Mode enabled This command generates a Command Complete event on success or a Command Status event on failure. From patchwork Fri Nov 5 21:12:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606047 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BD1AC433EF for ; Fri, 5 Nov 2021 21:12:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 26C4F60EE9 for ; Fri, 5 Nov 2021 21:12:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233875AbhKEVPb (ORCPT ); Fri, 5 Nov 2021 17:15:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34146 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232995AbhKEVPa (ORCPT ); Fri, 5 Nov 2021 17:15:30 -0400 Received: from mail-pl1-x631.google.com (mail-pl1-x631.google.com [IPv6:2607:f8b0:4864:20::631]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E3DDC061714 for ; Fri, 5 Nov 2021 14:12:49 -0700 (PDT) Received: by mail-pl1-x631.google.com with SMTP id y1so11804759plk.10 for ; Fri, 05 Nov 2021 14:12:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=pUF8cFIXRCrIuKF6pXVJj4xsEb6l2WKd0y6NYJG0m9c=; b=n92Gy3rhly0VtRP73BDTa0zq27mMxGMdR2kIJbGBTIKyi9ihVqpjnBiq8Wd9ChG1BA N3+uB5HGhT2T/htIyp9CCqO0LgGrF5CEJkarDdm7J25Cyn8ttSZGLe2xsX8tHGhGMv5f Cq1vl63x2L1PgXF9SdvoxOGDFN11lvv3Qb+VEjTjmPM6t8+o//ZWx7/XAIykXg17KmGe 26+loFxwssJMk/ZUaH5fpQueUFvZKhNyGwa9gJNw87+jn9ZBgFnh9gZPH2YchAoL5pzA pGnkJmsD25OzjpYtnaMUbRVc+Y1UX1es88tAND4VHj52IzfmuaCPd/uDbMhmJwoWC9hy qU0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pUF8cFIXRCrIuKF6pXVJj4xsEb6l2WKd0y6NYJG0m9c=; b=nhb5FUtSXK68EZcQpPP7uBoAu3mvw+LhePztLHFdArF3QMFysJjPtffN+rtzXQIZ2d kHx5wyzWI4bU2VY6MQzCyDeKqF0RjSb8PEZ14ZRMqlDu1WqLAcnH2S/AipygyxttM0zj CKQv8U5AdssS0Zm9qn+2+LV0Ry2GA0VntuM9EL+4CpZRWkd+DHZqwmeSuWO8UqB//uqY s29FmN9xUDUbQbi0l0hmTa8ABkCKUenfI/VUftzz1orDCRJJB4S/w/ge3ud9PqzAJ/qu HP+AFJUcfgo4bl3PTUKvwonlDi1zM0EGIzD0tvYhHKjvhTcvDDJtWn7TuKXEPNU0Lusy 4amg== X-Gm-Message-State: AOAM530NLfd5MSU68JY0I34S1qmWmRz/da0CwOjVpcUjhvOZQDJQUyp+ q1L1KZaKRQ7JSUkpeIyNIxAoDCXFi+0= X-Google-Smtp-Source: ABdhPJzUZqfr/q1FDnNVEjPsY4WzLm8ixLlNTC/yiJ2jEmKmNgsEmCuTqmFhQm+CCvQOc9BFjZuO+A== X-Received: by 2002:a17:90b:105:: with SMTP id p5mr32804988pjz.60.1636146768609; Fri, 05 Nov 2021 14:12:48 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:48 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 3/6] main.conf: Rework privacy options Date: Fri, 5 Nov 2021 14:12:42 -0700 Message-Id: <20211105211245.424024-3-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211105211245.424024-1-luiz.dentz@gmail.com> References: <20211105211245.424024-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This reworks privacy options so the limited discoverable is only available when controller mode is set to dual. --- src/btd.h | 1 + src/main.c | 22 ++++++++++++++++++---- src/main.conf | 25 ++++++++++++++++++++----- 3 files changed, 39 insertions(+), 9 deletions(-) diff --git a/src/btd.h b/src/btd.h index f83591f8f..ff9f082f1 100644 --- a/src/btd.h +++ b/src/btd.h @@ -103,6 +103,7 @@ struct btd_opts { uint32_t discovto; uint32_t tmpto; uint8_t privacy; + bool device_privacy; struct btd_defaults defaults; diff --git a/src/main.c b/src/main.c index 2835c81b2..dd954e1ab 100644 --- a/src/main.c +++ b/src/main.c @@ -666,13 +666,27 @@ static void parse_config(GKeyFile *config) } else { DBG("privacy=%s", str); - if (!strcmp(str, "network") || !strcmp(str, "on")) + if (!strcmp(str, "network") || !strcmp(str, "on")) { btd_opts.privacy = 0x01; - if (!strcmp(str, "device") || !strcmp(str, "limited")) + } else if (!strcmp(str, "device")) { + btd_opts.privacy = 0x01; + btd_opts.device_privacy = true; + } else if (!strcmp(str, "limited-network")) { + if (btd_opts.mode != BT_MODE_DUAL) { + DBG("Invalid privacy option: %s", str); + btd_opts.privacy = 0x00; + } + btd_opts.privacy = 0x01; + } else if (!strcmp(str, "limited-device")) { + if (btd_opts.mode != BT_MODE_DUAL) { + DBG("Invalid privacy option: %s", str); + btd_opts.privacy = 0x00; + } btd_opts.privacy = 0x02; - else if (!strcmp(str, "off")) + btd_opts.device_privacy = true; + } else if (!strcmp(str, "off")) { btd_opts.privacy = 0x00; - else { + } else { DBG("Invalid privacy option: %s", str); btd_opts.privacy = 0x00; } diff --git a/src/main.conf b/src/main.conf index 4019ea903..c82d7e648 100644 --- a/src/main.conf +++ b/src/main.conf @@ -67,14 +67,29 @@ # Default privacy setting. # Enables use of private address. -# Possible values: "off", "network/on", "device/limited" -# "network/on": a device will only accept advertising packets from peer devices -# that contain private addresses. It may not be compatible with some legacy -# devices since it requires the use of RPA(s) all the time. -# "device/limited": A device in device privacy mode is only concerned about the +# Possible values for LE mode: "off", "network/on", "device" +# Possible values for Dual mode: "off", "network/on", "device", +# "limited-network", "limited-device" +# +# - off: Local privacy disabled. +# +# - network/on: A device will only accept advertising packets from peer +# devices that contain private addresses. It may not be compatible with some +# legacy devices since it requires the use of RPA(s) all the time. +# +# - device: A device in device privacy mode is only concerned about the # privacy of the device and will accept advertising packets from peer devices # that contain their Identity Address as well as ones that contain a private # address, even if the peer device has distributed its IRK in the past. + +# - limited-network: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Network Privacy Mode for scanning. +# +# - limited-device: Apply Limited Discoverable Mode to advertising, which +# follows the same policy as to BR/EDR that publishes the identity address when +# discoverable, and Device Privacy Mode for scanning. +# # Defaults to "off" #Privacy = off From patchwork Fri Nov 5 21:12:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606045 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 90F05C433F5 for ; Fri, 5 Nov 2021 21:12:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7533561159 for ; Fri, 5 Nov 2021 21:12:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233841AbhKEVPa (ORCPT ); Fri, 5 Nov 2021 17:15:30 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229961AbhKEVPa (ORCPT ); Fri, 5 Nov 2021 17:15:30 -0400 Received: from mail-pg1-x52b.google.com (mail-pg1-x52b.google.com [IPv6:2607:f8b0:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4C8B7C061570 for ; Fri, 5 Nov 2021 14:12:50 -0700 (PDT) Received: by mail-pg1-x52b.google.com with SMTP id r28so9365938pga.0 for ; Fri, 05 Nov 2021 14:12:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=Pfv/cnvgiSwS5FWpcgo7yOZIZbZrRdEtNYrReT3xGBE=; b=U0VyrMsct2BAGkJrMN1AfXtLaqH1CSpbUiJAOwe29F8CLLNMrgjLeUn7qGXtAfXgt1 zZVjnoYe5tjnQ/nFpbMJAct3J5FXe/w7VWidQriHwuhivLmtrHybfALRf+1ydL3JU+eE OTQQKLy4iJ8dtIshseuCBguYDRLV4FgbP/TyKjtRh/SDtDOQLriabNextpM1ty02t2LF WlZGGW77887rTBZoEx5UgcHLVwk2b+4xOqBufePuhyxuahKy2lkau29qt0335hDya5lz O4lTniqbLcD8rtV0jNf2/1CboF+GXh4eN3rOHnM90lZNAfkvY4+H3VeCfzslaPzL7BZe CjVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Pfv/cnvgiSwS5FWpcgo7yOZIZbZrRdEtNYrReT3xGBE=; b=5w7AV+ky98rymQ81CqbtysbjdJD/eO2JtCu0b398kvTx2ISoEYqdey7TLht/YjRYtQ xnCy8ISjBSZVLxT8IkYTLTnFXFOUI8dksWzWVtUlbvoXM85K2Pby4CkHzS+ng7U92+7E wer6gXU/RN5WaHZ603wsCkIX7O58lwikUGFLPERtj3AYc/Cv5HNhaQjHDlSPQMpmZcd3 ni5NNqDjh6Pkuu5dPTj1f5UFBV1U7q82le3cZC1SWX+oHkZznnA3LFrJz5E0UgaJTs+U nr2UJq0edSUyw4caOxNeFKGZOTEjcmvG0eJjnerCly2gJRaGghfcymGu8ukW/8yzuCcV YcJg== X-Gm-Message-State: AOAM531HKXvBHmuc62h6ucWQsnydUcoIKWFpyDVe9Nm29WVQ1rjc6TXf giBW95t2U9hKlZI0hTov6i7bVIL/bbA= X-Google-Smtp-Source: ABdhPJzElY3ga9UtBmQNpcRBeQWZvqNq+GuCDV24Vh+X/glvTjsyldahKmNJAinamd1UrU0OtksibQ== X-Received: by 2002:aa7:8019:0:b0:44d:d761:6f79 with SMTP id j25-20020aa78019000000b0044dd7616f79mr62713052pfi.3.1636146769414; Fri, 05 Nov 2021 14:12:49 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:49 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 4/6] adapter: Set Device Privacy Mode Date: Fri, 5 Nov 2021 14:12:43 -0700 Message-Id: <20211105211245.424024-4-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211105211245.424024-1-luiz.dentz@gmail.com> References: <20211105211245.424024-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This adds support for setting Device Privacy flag when enabled in main.conf via Privacy = device,limited-device. --- lib/mgmt.h | 3 +- src/adapter.c | 76 +++++++++++++++++++++++---------------------------- src/adapter.h | 9 ++++-- src/device.c | 58 +++++++++++++++++++++++++++++---------- src/device.h | 1 - 5 files changed, 86 insertions(+), 61 deletions(-) diff --git a/lib/mgmt.h b/lib/mgmt.h index 0d1678f01..400167e9b 100644 --- a/lib/mgmt.h +++ b/lib/mgmt.h @@ -665,7 +665,8 @@ struct mgmt_rp_get_device_flags { uint32_t current_flags; } __packed; -#define DEVICE_FLAG_REMOTE_WAKEUP (1 << 0) +#define DEVICE_FLAG_REMOTE_WAKEUP BIT(0) +#define DEVICE_FLAG_DEVICE_PRIVACY BIT(1) #define MGMT_OP_SET_DEVICE_FLAGS 0x0050 #define MGMT_SET_DEVICE_FLAGS_SIZE 11 diff --git a/src/adapter.c b/src/adapter.c index 508917e58..309956bbb 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -5308,6 +5308,23 @@ void adapter_accept_list_remove(struct btd_adapter *adapter, remove_accept_list_complete, adapter, NULL); } +static void set_device_privacy_complete(uint8_t status, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_rp_set_device_flags *rp = param; + + if (status != MGMT_STATUS_SUCCESS) { + error("Set device flags return status: %s", + mgmt_errstr(status)); + return; + } + + if (length < sizeof(*rp)) { + error("Too small Set Device Flags complete event: %d", length); + return; + } +} + static void add_device_complete(uint8_t status, uint16_t length, const void *param, void *user_data) { @@ -5342,6 +5359,18 @@ static void add_device_complete(uint8_t status, uint16_t length, } DBG("%s (%u) added to kernel connect list", addr, rp->addr.type); + + if (btd_opts.device_privacy) { + uint32_t flags = btd_device_get_current_flags(dev); + + /* Set Device Privacy Mode has not set the flag yet. */ + if (!(flags & DEVICE_FLAG_DEVICE_PRIVACY)) { + adapter_set_device_flags(adapter, dev, flags | + DEVICE_FLAG_DEVICE_PRIVACY, + set_device_privacy_complete, + NULL); + } + } } void adapter_auto_connect_add(struct btd_adapter *adapter, @@ -5383,42 +5412,9 @@ void adapter_auto_connect_add(struct btd_adapter *adapter, adapter->connect_list = g_slist_append(adapter->connect_list, device); } -static void set_device_wakeable_complete(uint8_t status, uint16_t length, - const void *param, void *user_data) -{ - const struct mgmt_rp_set_device_flags *rp = param; - struct btd_adapter *adapter = user_data; - struct btd_device *dev; - char addr[18]; - - if (status != MGMT_STATUS_SUCCESS) { - btd_error(adapter->dev_id, "Set device flags return status: %s", - mgmt_errstr(status)); - return; - } - - if (length < sizeof(*rp)) { - btd_error(adapter->dev_id, - "Too small Set Device Flags complete event: %d", - length); - return; - } - - ba2str(&rp->addr.bdaddr, addr); - - dev = btd_adapter_find_device(adapter, &rp->addr.bdaddr, rp->addr.type); - if (!dev) { - btd_error(adapter->dev_id, - "Set Device Flags complete for unknown device %s", - addr); - return; - } - - device_set_wake_allowed_complete(dev); -} - -void adapter_set_device_wakeable(struct btd_adapter *adapter, - struct btd_device *device, bool wakeable) +void adapter_set_device_flags(struct btd_adapter *adapter, + struct btd_device *device, uint32_t flags, + mgmt_request_func_t func, void *user_data) { struct mgmt_cp_set_device_flags cp; const bdaddr_t *bdaddr; @@ -5433,14 +5429,10 @@ void adapter_set_device_wakeable(struct btd_adapter *adapter, memset(&cp, 0, sizeof(cp)); bacpy(&cp.addr.bdaddr, bdaddr); cp.addr.type = bdaddr_type; - cp.current_flags = btd_device_get_current_flags(device); - if (wakeable) - cp.current_flags |= DEVICE_FLAG_REMOTE_WAKEUP; - else - cp.current_flags &= ~DEVICE_FLAG_REMOTE_WAKEUP; + cp.current_flags = cpu_to_le32(flags); mgmt_send(adapter->mgmt, MGMT_OP_SET_DEVICE_FLAGS, adapter->dev_id, - sizeof(cp), &cp, set_device_wakeable_complete, adapter, NULL); + sizeof(cp), &cp, func, user_data, NULL); } static void device_flags_changed_callback(uint16_t index, uint16_t length, diff --git a/src/adapter.h b/src/adapter.h index db3c17f23..d191daf5d 100644 --- a/src/adapter.h +++ b/src/adapter.h @@ -219,8 +219,13 @@ int adapter_connect_list_add(struct btd_adapter *adapter, struct btd_device *device); void adapter_connect_list_remove(struct btd_adapter *adapter, struct btd_device *device); -void adapter_set_device_wakeable(struct btd_adapter *adapter, - struct btd_device *dev, bool wakeable); +typedef void (*adapter_set_device_flags_func_t)(uint8_t status, uint16_t length, + const void *param, + void *user_data); +void adapter_set_device_flags(struct btd_adapter *adapter, + struct btd_device *device, uint32_t flags, + adapter_set_device_flags_func_t func, + void *user_data); void adapter_auto_connect_add(struct btd_adapter *adapter, struct btd_device *device); void adapter_auto_connect_remove(struct btd_adapter *adapter, diff --git a/src/device.c b/src/device.c index 1b4dae685..6b398bd39 100644 --- a/src/device.c +++ b/src/device.c @@ -1403,9 +1403,45 @@ void device_set_wake_override(struct btd_device *device, bool wake_override) } } +static void device_set_wake_allowed_complete(struct btd_device *device) +{ + if (device->wake_id != -1U) { + g_dbus_pending_property_success(device->wake_id); + device->wake_id = -1U; + } + + device->wake_allowed = device->pending_wake_allowed; + g_dbus_emit_property_changed(dbus_conn, device->path, + DEVICE_INTERFACE, "WakeAllowed"); + + store_device_info(device); +} + +static void set_wake_allowed_complete(uint8_t status, uint16_t length, + const void *param, void *user_data) +{ + const struct mgmt_rp_set_device_flags *rp = param; + struct btd_device *dev = user_data; + + if (status != MGMT_STATUS_SUCCESS) { + error("Set device flags return status: %s", + mgmt_errstr(status)); + return; + } + + if (length < sizeof(*rp)) { + error("Too small Set Device Flags complete event: %d", length); + return; + } + + device_set_wake_allowed_complete(dev); +} + void device_set_wake_allowed(struct btd_device *device, bool wake_allowed, GDBusPendingPropertySet id) { + uint32_t flags; + /* Pending and current value are the same unless there is a change in * progress. Only update wake allowed if pending value doesn't match the * new value. @@ -1415,25 +1451,17 @@ void device_set_wake_allowed(struct btd_device *device, bool wake_allowed, device->wake_id = id; device->pending_wake_allowed = wake_allowed; - adapter_set_device_wakeable(device_get_adapter(device), device, - wake_allowed); -} -void device_set_wake_allowed_complete(struct btd_device *device) -{ - if (device->wake_id != -1U) { - g_dbus_pending_property_success(device->wake_id); - device->wake_id = -1U; - } - - device->wake_allowed = device->pending_wake_allowed; - g_dbus_emit_property_changed(dbus_conn, device->path, - DEVICE_INTERFACE, "WakeAllowed"); + flags = device->current_flags; + if (wake_allowed) + flags |= DEVICE_FLAG_REMOTE_WAKEUP; + else + flags &= ~DEVICE_FLAG_REMOTE_WAKEUP; - store_device_info(device); + adapter_set_device_flags(device->adapter, device, flags, + set_wake_allowed_complete, device); } - static gboolean dev_property_get_wake_allowed(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) diff --git a/src/device.h b/src/device.h index 5f615cb4b..b37a0a3d2 100644 --- a/src/device.h +++ b/src/device.h @@ -132,7 +132,6 @@ void device_set_wake_support(struct btd_device *device, bool wake_support); void device_set_wake_override(struct btd_device *device, bool wake_override); void device_set_wake_allowed(struct btd_device *device, bool wake_allowed, guint32 id); -void device_set_wake_allowed_complete(struct btd_device *device); void device_set_refresh_discovery(struct btd_device *dev, bool refresh); typedef void (*disconnect_watch) (struct btd_device *device, gboolean removal, From patchwork Fri Nov 5 21:12:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606049 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6383C4332F for ; Fri, 5 Nov 2021 21:12:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CDF4B611C1 for ; Fri, 5 Nov 2021 21:12:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233876AbhKEVPb (ORCPT ); Fri, 5 Nov 2021 17:15:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233869AbhKEVPb (ORCPT ); Fri, 5 Nov 2021 17:15:31 -0400 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E5D8C061570 for ; Fri, 5 Nov 2021 14:12:51 -0700 (PDT) Received: by mail-pj1-x1029.google.com with SMTP id w9-20020a17090a1b8900b001a6b3b7ec17so4118468pjc.3 for ; Fri, 05 Nov 2021 14:12:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=KPFsCeKStHLUmfZlK4Puuq02SsEfAOOKUWK1jQCadbY=; b=PmYR5POEFpatu61DslOiOqLU0Xbish4JkYTfrEAf6mBZdO9fnW2RMxMUsCgW6jlVLj kz1BW/JjxQqNUnrkXS6zchzc1qfCXtPa68AxCKffXI9ljLEPMEBAwwx+5ebcofuB/U73 lxnxjCxh+qk9DnKtND21xaAzmrpKvZKJeaSy94pd2d3Oiu6LP5WBBAY2mFJcYZB853Oi Rmvb4dYAREi+wrUg3ulMKP6HChKFiahHVNkMsGJikTN5XoTUcWeXwXW5e0YvPP9hJcra DG0P8GANv4YvOGK0lq5P2k2eEKbu/iJs/Sf0Xe0oz9aumqC1iKfSS9Vq8a8BR7X5BniX 7H+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=KPFsCeKStHLUmfZlK4Puuq02SsEfAOOKUWK1jQCadbY=; b=0qZ3O6pNT+RCsSSiTaDuT1BDxfPKFB5Qd1sYpJVYMXgUHCUSAOvmYZPFwfozEE23ta 2H79OEuXDyepRWH7HlgdWWF2MpNuA1qNxpWJEL8OAgAr01nRtigyXX8BYYyH2ru53N8P ppxXtgueuTbc5w15uj4BLYafGgaU+zP1GDqR8eu8qcj7GLH2Cz07O9ArLBsU86yWuiGX nHnsFmfU3PWZPkbuoLu0eWOWitik4RDmJv8zKO6lzx+N4UFVIAayD7z/dAr8ny81v1bc +HAnXZrZfwu6NljF9a41zkv6OXHckyKR3SMxrsQd2Y/aiy90k4dpNcFJLb0bHD7NQBrr RHzQ== X-Gm-Message-State: AOAM532X9bMVtPWulebCcU39CgS2KrrmcqIn/le3fooFn3NZM1i30t8z bzs6eUEiEDt5NPzQ9mAHGD9Qi3rjg6M= X-Google-Smtp-Source: ABdhPJyiX3cCrkwBU3YBv5FH9+K6WR8CwI6NwTxVtABOC8D5iOyKLZTSMt/pPbXJL0OGv71M00Uaxg== X-Received: by 2002:a17:90b:4f4c:: with SMTP id pj12mr32786005pjb.218.1636146770498; Fri, 05 Nov 2021 14:12:50 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:50 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 5/6] monitor: Add support for Device Privacy Mode flag Date: Fri, 5 Nov 2021 14:12:44 -0700 Message-Id: <20211105211245.424024-5-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211105211245.424024-1-luiz.dentz@gmail.com> References: <20211105211245.424024-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This adds proper decoding for Device Privacy Mode flag: @ MGMT Command: Set Device... (0x0050) plen 11 {0x0001} LE Address: BC:9A:78:56:34:12 (OUI BC-9A-78) Current Flags: 0x00000002 Device Privacy Mode @ MGMT Event: Device Flags... (0x002a) plen 15 {0x0002} LE Address: BC:9A:78:56:34:12 (OUI BC-9A-78) Supported Flags: 0x00000003 Remote Wakeup Device Privacy Mode Current Flags: 0x00000002 Device Privacy Mode --- monitor/packet.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/monitor/packet.c b/monitor/packet.c index 9030f2493..71f711dc5 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -13378,7 +13378,8 @@ static void mgmt_set_exp_feature_rsp(const void *data, uint16_t size) } static const struct bitfield_data mgmt_added_device_flags_table[] = { - { 0, "Remote Wakeup" }, + { 0, "Remote Wakeup" }, + { 1, "Device Privacy Mode" }, { } }; From patchwork Fri Nov 5 21:12:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luiz Augusto von Dentz X-Patchwork-Id: 12606051 X-Patchwork-Delegate: luiz.dentz@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1AE0AC433F5 for ; Fri, 5 Nov 2021 21:12:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 032A661159 for ; Fri, 5 Nov 2021 21:12:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233879AbhKEVPd (ORCPT ); Fri, 5 Nov 2021 17:15:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233866AbhKEVPc (ORCPT ); Fri, 5 Nov 2021 17:15:32 -0400 Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2E1F9C061570 for ; Fri, 5 Nov 2021 14:12:52 -0700 (PDT) Received: by mail-pf1-x434.google.com with SMTP id s5so9981167pfg.2 for ; Fri, 05 Nov 2021 14:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=YOw6foaMeZxG38K+pATPyi0RjjRyGzjcJJWw5ABs3ks=; b=BjFWwcU9HYVvpQRh1iYV/XL+/F54AmSD8DGjBPB+t/U8G9DH+tLIDqERgDFOhG4Qft IMN3h7CSPatcp2unw3slk9ReUeA8zf25uSdPDMSxDPmY9ymb4B5Apy/ZdBu7fz3f+Sta gI1dmAAwpa5XJVm2O5CNKnMUyNPaET1rJaCeC8fDnAzorMb/LcC3FRaN/+9LTaZc4YiN fhG8BFO2Pe7uY38BlNl9Yg4r+k4e8D05MdThjvh4tAu41CrjlMSW+eQZbOb1GzWJrhzY ovoSvg7d2CzxNuhpO4AyD/pA65kdY9P9x1bCKubLVungEFcKr7zWLQuvop1VLtCxyUhP rqUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YOw6foaMeZxG38K+pATPyi0RjjRyGzjcJJWw5ABs3ks=; b=PxUlEdUp++ap7VxbB3PWJ9EseI0cgxfQNdZZ675pqKLFcKgiCaNkB9ytwOOu2NAoFP la88SYAOuju46m2NnXxhkY1K2y8P7qCwafMzU8KsX9BNw1GulkZ6homTwPpnSDbPNdN3 3gYf5KqfDFVoBV7uTLPgdKnpdNvBTQCfDlk9N2jncLV0BtKGxtr2PBKxboMcQfFdy4eD f3tKSASCkbh15w4vy5RlnpRk5pLv5N2xTSSFZd8bbJ628+l1hbG8Y4ZXFFs4xSygA43c IK/63Df1ZjzCk9I1/g3RzeVs5AthePiMJ74//ByWbRm0NhftXLJiLExFHHgxZZv16f5C YpjQ== X-Gm-Message-State: AOAM532ut1yfzW8BUdSrOfIpD3GW/Gnof9AzDKBoYna1D3r9F9Tb37vo liSHgpNJRMuQWxpK35xylZExqtiNuvo= X-Google-Smtp-Source: ABdhPJz9jUe5CM3kcj3MqiOsqbIIijxm69YbhHX+LNXJ0V7hIO7BL+rROA0xdV4zd6neCEXevP3YYg== X-Received: by 2002:a05:6a00:1311:b0:455:c1f8:4637 with SMTP id j17-20020a056a00131100b00455c1f84637mr61241694pfu.83.1636146771272; Fri, 05 Nov 2021 14:12:51 -0700 (PDT) Received: from lvondent-mobl4.. (c-71-56-157-77.hsd1.or.comcast.net. [71.56.157.77]) by smtp.gmail.com with ESMTPSA id om8sm2250553pjb.12.2021.11.05.14.12.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Nov 2021 14:12:50 -0700 (PDT) From: Luiz Augusto von Dentz To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 6/6] mgmt-tester: Add test for Device Privacy Mode flag Date: Fri, 5 Nov 2021 14:12:45 -0700 Message-Id: <20211105211245.424024-6-luiz.dentz@gmail.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211105211245.424024-1-luiz.dentz@gmail.com> References: <20211105211245.424024-1-luiz.dentz@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Luiz Augusto von Dentz This tests the use of Set Device Flags to set Device Privacy Mode which results in the following sequence: @ MGMT Event: Command Compl.. (0x0001) plen 10 {0x0001} Set Device Flags (0x0050) plen 7 Status: Success (0x00) LE Address: BC:9A:78:56:34:12 (OUI BC-9A-78) < HCI Command: LE Set Exten.. (0x08|0x0042) plen 6 Extended scan: Disabled (0x00) Filter duplicates: Disabled (0x00) Duration: 0 msec (0x0000) Period: 0.00 sec (0x0000) = mgmt-tester: Set Device Flags (0x0050): Success (0x00) = mgmt-tester: Test condition complete, 4 left = mgmt-tester: New Device Flags Changed event received = mgmt-tester: Test condition complete, 3 left > HCI Event: Command Complete (0x0e) plen 4 LE Set Extended Scan Enable (0x08|0x0042) ncmd 1 Status: Success (0x00) < HCI Command: LE Set Addre.. (0x08|0x002d) plen 1 Address resolution: Disabled (0x00) = mgmt-tester: HCI Command 0x2042 length 6 > HCI Event: Command Complete (0x0e) plen 4 LE Set Address Resolution Enable (0x08|0x002d) ncmd 1 Status: Success (0x00) < HCI Command: LE Set Priva.. (0x08|0x004e) plen 8 Peer Identity address type: Public (0x00) Peer Identity address: BC:9A:78:56:34:12 (OUI BC-9A-78) Privacy Mode: Use Device Privacy (0x01) = mgmt-tester: HCI Command 0x202d length 1 = mgmt-tester: Test condition complete, 2 left > HCI Event: Command Complete (0x0e) plen 4 LE Set Privacy Mode (0x08|0x004e) ncmd 1 Status: Success (0x00) < HCI Command: LE Set Addre.. (0x08|0x002d) plen 1 Address resolution: Enabled (0x01) = mgmt-tester: HCI Command 0x204e length 8 = mgmt-tester: Test condition complete, 1 left > HCI Event: Command Complete (0x0e) plen 4 LE Set Address Resolution Enable (0x08|0x002d) ncmd 1 Status: Success (0x00) < HCI Command: LE Set Exten.. (0x08|0x0041) plen 8 Own address type: Random (0x03) Filter policy: Ignore not in accept list (0x01) PHYs: 0x01 Entry 0: LE 1M Type: Passive (0x00) Interval: 60.000 msec (0x0060) Window: 30.000 msec (0x0030) = mgmt-tester: HCI Command 0x202d length 1 = mgmt-tester: Test condition complete, 0 left --- tools/mgmt-tester.c | 88 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/tools/mgmt-tester.c b/tools/mgmt-tester.c index e9fcb2602..e5319d123 100644 --- a/tools/mgmt-tester.c +++ b/tools/mgmt-tester.c @@ -10578,6 +10578,63 @@ static const struct generic_data ll_privacy_unpair_2 = { .expect_hci_len = sizeof(add_to_al_client), }; +static const uint8_t set_device_flags_param_1[] = { + 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */ + 0x01, /* Type - LE Public */ + 0x02, 0x00, 0x00, 0x00 /* Flags - Device Privacy */ +}; + +static const uint8_t set_device_flags_rsp[] = { + 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */ + 0x01 /* Type - LE Public */ +}; + +static const uint8_t le_set_priv_mode_param[] = { + 0x00, /* Type */ + 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */ + 0x01 /* Privacy Mode */ +}; + +static const struct hci_cmd_data ll_privacy_set_device_flags_1_hci_list[] = { + { + .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE, + .param = set_resolv_off_param, + .len = sizeof(set_resolv_off_param), + }, + { + .opcode = BT_HCI_CMD_LE_SET_PRIV_MODE, + .param = le_set_priv_mode_param, + .len = sizeof(le_set_priv_mode_param), + }, + { + .opcode = BT_HCI_CMD_LE_SET_RESOLV_ENABLE, + .param = set_resolv_on_param, + .len = sizeof(set_resolv_on_param), + }, +}; + +static const uint8_t device_flags_changed_params_1[] = { + 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, /* BDADDR */ + 0x01, /* Type - LE Public */ + 0x03, 0x00, 0x00, 0x00, /* Supported Flags */ + 0x02, 0x00, 0x00, 0x00 /* Current Flags */ +}; + +static const struct generic_data ll_privacy_set_device_flag_1 = { + .setup_settings = settings_le_privacy_ll_privacy, + .setup_exp_feat_param = set_exp_feat_param_ll_privacy, + .send_opcode = MGMT_OP_SET_DEVICE_FLAGS, + .send_param = set_device_flags_param_1, + .send_len = sizeof(set_device_flags_param_1), + .expect_param = set_device_flags_rsp, + .expect_len = sizeof(set_device_flags_rsp), + .expect_status = MGMT_STATUS_SUCCESS, + .expect_alt_ev = MGMT_EV_DEVICE_FLAGS_CHANGED, + .expect_alt_ev_param = device_flags_changed_params_1, + .expect_alt_ev_len = sizeof(device_flags_changed_params_1), + .expect_hci_list = ll_privacy_set_device_flags_1_hci_list, +}; + static void setup_load_irks_callback(uint8_t status, uint16_t length, const void *param, void *user_data) { @@ -11085,6 +11142,27 @@ static void setup_ll_privacy_add_adv(const void *test_data) setup_powered_callback, NULL, NULL); } +static void setup_ll_privacy_add_device(const void *test_data) +{ + struct test_data *data = tester_get_data(); + unsigned char param[] = { 0x01 }; + + mgmt_send(data->mgmt, MGMT_OP_LOAD_IRKS, data->mgmt_index, + sizeof(load_irks_le_public_param_1), + load_irks_le_public_param_1, + setup_load_irks_callback, NULL, NULL); + + mgmt_send(data->mgmt, MGMT_OP_SET_POWERED, data->mgmt_index, + sizeof(param), param, + setup_powered_callback, NULL, NULL); + + mgmt_send(data->mgmt, MGMT_OP_ADD_DEVICE, data->mgmt_index, + sizeof(add_device_le_public_param_1), + add_device_le_public_param_1, + setup_add_device_callback, NULL, NULL); + +} + static bool power_off(uint16_t index) { int sk, err; @@ -14406,5 +14484,15 @@ int main(int argc, char *argv[]) NULL, test_ll_privacy_unpair_2, 5); + /* LL Privacy + * Setup: Enable LL Privacy, add IRK of new device, Add Device + * Run: Set Device Flags + * Expect: Device Privacy Mode is set. + */ + test_bredrle50("LL Privacy - Set Device Flag 1 (Device Privacy)", + &ll_privacy_set_device_flag_1, + setup_ll_privacy_add_device, + test_command_generic); + return tester_run(); }