OSDN Git Service

Bluetooth: Allow scannable adv with extended MGMT APIs
authorDaniel Winkler <danielwinkler@google.com>
Wed, 3 Mar 2021 19:15:23 +0000 (11:15 -0800)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 3 Mar 2021 17:14:38 +0000 (18:14 +0100)
commitff02db13e9bfa01e0d66c5fa53da29bd1f1b208a
tree7b7ca51623eb72558ce72fdc128e9ce17493ab55
parente5b0ad69c97a04f42834b24a6a0323ab15ccc9bb
Bluetooth: Allow scannable adv with extended MGMT APIs

An issue was found, where if a bluetooth client requests a broadcast
advertisement with scan response data, it will not be properly
registered with the controller. This is because at the time that the
hci_cp_le_set_scan_param structure is created, the scan response will
not yet have been received since it comes in a second MGMT call. With
empty scan response, the request defaults to a non-scannable PDU type.
On some controllers, the subsequent scan response request will fail due
to incorrect PDU type, and others will succeed and not use the scan
response.

This fix allows the advertising parameters MGMT call to include a flag
to let the kernel know whether a scan response will be coming, so that
the correct PDU type is used in the first place. A bluetoothd change is
also incoming to take advantage of it.

To test this, I created a broadcast advertisement with scan response
data and registered it on the hatch chromebook. Without this change, the
request fails, and with it will succeed.

Reviewed-by: Alain Michaud <alainm@chromium.org>
Reviewed-by: Sonny Sasaka <sonnysasaka@chromium.org>
Reviewed-by: Miao-chen Chou <mcchou@chromium.org>
Signed-off-by: Daniel Winkler <danielwinkler@google.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/net/bluetooth/mgmt.h
net/bluetooth/hci_request.c
net/bluetooth/mgmt.c