2020-04-07 23:25:44

by Marcel Holtmann

[permalink] [raw]
Subject: [PATCH] Bluetooth: Enable LE Enhanced Connection Complete event.

In case LL Privacy is supported by the controller, it is also a good
idea to use the LE Enhanced Connection Complete event for getting all
information about the new connection and its addresses.

Signed-off-by: Marcel Holtmann <[email protected]>
---
net/bluetooth/hci_core.c | 8 ++++++++
1 file changed, 8 insertions(+)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index fb210f7ab7ab..d8d543e3dc9f 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -638,6 +638,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT)
events[0] |= 0x40; /* LE Data Length Change */

+ /* If the controller supports LL Privacy feature, enable
+ * the corresponding event.
+ */
+ if (hdev->le_features[0] & HCI_LE_LL_PRIVACY)
+ events[1] |= 0x02; /* LE Enhanced Connection
+ * Complete
+ */
+
/* If the controller supports Extended Scanner Filter
* Policies, enable the correspondig event.
*/
--
2.25.2


2020-04-08 06:31:31

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Enable LE Enhanced Connection Complete event.

Hi,

> In case LL Privacy is supported by the controller, it is also a good
> idea to use the LE Enhanced Connection Complete event for getting all
> information about the new connection and its addresses.
>
> Signed-off-by: Marcel Holtmann <[email protected]>
> ---
> net/bluetooth/hci_core.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index fb210f7ab7ab..d8d543e3dc9f 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -638,6 +638,14 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
> if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT)
> events[0] |= 0x40; /* LE Data Length Change */
>
> + /* If the controller supports LL Privacy feature, enable
> + * the corresponding event.
> + */
> + if (hdev->le_features[0] & HCI_LE_LL_PRIVACY)
> + events[1] |= 0x02; /* LE Enhanced Connection
> + * Complete
> + */
> +

so this is sort of enough to get the events, but they don’t give any extra information if LL Privacy is not used. While the current code handles the non LL Privacy parts of this event, the important local RPA and peer RPA are not handled.

Both RPAs (if used) however need to be stored in hci_conn so that SMP can make use of them if needed.

Regards

Marcel