LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
To: marcel@holtmann.org
Cc: linux-bluetooth@vger.kernel.org,
chromeos-bluetooth-upstreaming@chromium.org,
Abhishek Pandit-Subedi <abhishekpandit@chromium.org>,
"David S. Miller" <davem@davemloft.net>,
Johan Hedberg <johan.hedberg@gmail.com>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH v2 1/1] Bluetooth: Update add_device with wakeable actions
Date: Wed, 25 Mar 2020 22:45:17 -0700 [thread overview]
Message-ID: <20200325224500.v2.1.I196e4af9cde6c6e6aa7102906722cb9df8c80a7b@changeid> (raw)
In-Reply-To: <20200326054517.71462-1-abhishekpandit@chromium.org>
Add new actions to add_device to allow it to set or unset a device as
wakeable. When the set wakeable and unset wakeable actions are used, the
autoconnect property is not updated and the device is not added to the
whitelist (if BR/EDR).
Signed-off-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
---
Changes in v2:
* Added missing goto unlock
net/bluetooth/mgmt.c | 57 ++++++++++++++++++++++++++++++++++++--------
1 file changed, 47 insertions(+), 10 deletions(-)
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 6552003a170e..8643089e758f 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -5775,6 +5775,7 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
void *data, u16 len)
{
struct mgmt_cp_add_device *cp = data;
+ struct hci_conn_params *params;
u8 auto_conn, addr_type;
int err;
@@ -5786,7 +5787,7 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
MGMT_STATUS_INVALID_PARAMS,
&cp->addr, sizeof(cp->addr));
- if (cp->action != 0x00 && cp->action != 0x01 && cp->action != 0x02)
+ if (cp->action > 0x04)
return mgmt_cmd_complete(sk, hdev->id, MGMT_OP_ADD_DEVICE,
MGMT_STATUS_INVALID_PARAMS,
&cp->addr, sizeof(cp->addr));
@@ -5794,8 +5795,35 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
hci_dev_lock(hdev);
if (cp->addr.type == BDADDR_BREDR) {
- /* Only incoming connections action is supported for now */
- if (cp->action != 0x01) {
+ switch (cp->action) {
+ case 0x3:
+ /* Set wakeable */
+ err = hci_bdaddr_list_add(&hdev->wakeable,
+ &cp->addr.bdaddr,
+ cp->addr.type);
+ if (err && err != -EEXIST)
+ goto unlock;
+ break;
+ case 0x4:
+ /* Remove wakeable */
+ err = hci_bdaddr_list_del(&hdev->wakeable,
+ &cp->addr.bdaddr,
+ cp->addr.type);
+ if (err)
+ goto unlock;
+
+ break;
+ case 0x1:
+ /* Allow incoming connection */
+ err = hci_bdaddr_list_add(&hdev->whitelist,
+ &cp->addr.bdaddr,
+ cp->addr.type);
+ if (err && err != -EEXIST)
+ goto unlock;
+
+ hci_req_update_scan(hdev);
+ break;
+ default:
err = mgmt_cmd_complete(sk, hdev->id,
MGMT_OP_ADD_DEVICE,
MGMT_STATUS_INVALID_PARAMS,
@@ -5803,13 +5831,6 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
goto unlock;
}
- err = hci_bdaddr_list_add(&hdev->whitelist, &cp->addr.bdaddr,
- cp->addr.type);
- if (err)
- goto unlock;
-
- hci_req_update_scan(hdev);
-
goto added;
}
@@ -5834,6 +5855,22 @@ static int add_device(struct sock *sk, struct hci_dev *hdev,
goto unlock;
}
+ /* Only allow wakeable property to be set/unset on existing device */
+ if (cp->action == 0x03 || cp->action == 0x04) {
+ params = hci_conn_params_lookup(hdev, &cp->addr.bdaddr,
+ addr_type);
+ if (!params) {
+ err = mgmt_cmd_complete(sk, hdev->id,
+ MGMT_OP_ADD_DEVICE,
+ MGMT_STATUS_FAILED, &cp->addr,
+ sizeof(cp->addr));
+ goto unlock;
+ }
+
+ params->wakeable = cp->action == 0x03;
+ goto added;
+ }
+
/* If the connection parameters don't exist for this device,
* they will be created and configured with defaults.
*/
--
2.25.1.696.g5e7596f4ac-goog
next prev parent reply other threads:[~2020-03-26 5:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-26 5:45 [PATCH v2 0/1] Bluetooth: Add actions to set wakeable in add device Abhishek Pandit-Subedi
2020-03-26 5:45 ` Abhishek Pandit-Subedi [this message]
2020-04-06 18:04 ` [PATCH v2 1/1] Bluetooth: Update add_device with wakeable actions Marcel Holtmann
2020-03-27 2:59 ` [PATCH v2 0/1] Bluetooth: Add actions to set wakeable in add device Abhishek Pandit-Subedi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200325224500.v2.1.I196e4af9cde6c6e6aa7102906722cb9df8c80a7b@changeid \
--to=abhishekpandit@chromium.org \
--cc=chromeos-bluetooth-upstreaming@chromium.org \
--cc=davem@davemloft.net \
--cc=johan.hedberg@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-bluetooth@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marcel@holtmann.org \
--cc=netdev@vger.kernel.org \
--subject='Re: [PATCH v2 1/1] Bluetooth: Update add_device with wakeable actions' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).