Skip to contentSkip to conversation

Cleanup patches for LL Privacy work

PATCH In review Marcel Holtmann 3 participants 8 messages Apr 9, 2020 – Apr 15, 2020

Subsystems (2)
lore
Share & tools
lore

Marcel Holtmann

author maintainer
#0 lore raw

cover Cleanup patches for LL Privacy work

These are are few cleanup patches before the LL Privacy work can continue.

Marcel Holtmann (4):
Bluetooth: Sort list of LE features constants
Bluetooth: Use extra variable to make code more readable
Bluetooth: Enable LE Enhanced Connection Complete event.
Bluetooth: Clear HCI_LL_RPA_RESOLUTION flag on reset

 include/net/bluetooth/hci.h      | 5 ++---
 include/net/bluetooth/hci_core.h | 1 +
 net/bluetooth/hci_core.c         | 8 ++++++++
 net/bluetooth/hci_request.c      | 4 +++-
 4 files changed, 14 insertions(+), 4 deletions(-)
Signature · 1 line
2.25.2
author maintainer
#1 lore raw

PATCH 1/4 Bluetooth: Sort list of LE features constants

The list of LE features constants has gotten a bit confused. It lost the order and gained duplicated. Clean this up.

---
 include/net/bluetooth/hci.h | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)
include/net/bluetooth/hci.h +1 -3
index f4e8e2a0b7c1..ff42d05b3e72 100644
@@ -460,12 +460,10 @@ enum {
 #define HCI_LE_SLAVE_FEATURES		0x08
 #define HCI_LE_PING			0x10
 #define HCI_LE_DATA_LEN_EXT		0x20
-#define HCI_LE_PHY_2M			0x01
-#define HCI_LE_PHY_CODED		0x08
-#define HCI_LE_EXT_ADV			0x10
 #define HCI_LE_EXT_SCAN_POLICY		0x80
 #define HCI_LE_PHY_2M			0x01
 #define HCI_LE_PHY_CODED		0x08
+#define HCI_LE_EXT_ADV			0x10
 #define HCI_LE_CHAN_SEL_ALG2		0x40
 #define HCI_LE_CIS_MASTER		0x10
 #define HCI_LE_CIS_SLAVE		0x20
Signature · 1 line
2.25.2
author maintainer
#2 lore raw

PATCH 2/4 Bluetooth: Use extra variable to make code more readable

In reply to Marcel Holtmann

When starting active scanning for discovery the whitelist is not needed to be used. So the filter_policy is 0x00. To make the core more readable use a variable name instead of just setting 0 as paramter.

---
 net/bluetooth/hci_request.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
net/bluetooth/hci_request.c +3 -1
index 649e1e5ed446..9ea40106ef17 100644
@@ -2723,6 +2723,8 @@ static int active_scan(struct hci_request *req, unsigned long opt)
 	uint16_t interval = opt;
 	struct hci_dev *hdev = req->hdev;
 	u8 own_addr_type;
+	/* White list is not used for discovery */
+	u8 filter_policy = 0x00;
 	int err;
 
 	BT_DBG("%s", hdev->name);
@@ -2744,7 +2746,7 @@ static int active_scan(struct hci_request *req, unsigned long opt)
 		own_addr_type = ADDR_LE_DEV_PUBLIC;
 
 	hci_req_start_scan(req, LE_SCAN_ACTIVE, interval, DISCOV_LE_SCAN_WIN,
-			   own_addr_type, 0);
+			   own_addr_type, filter_policy);
 	return 0;
 }
 
Signature · 1 line
2.25.2
author maintainer
#3 lore raw

PATCH 3/4 Bluetooth: Enable LE Enhanced Connection Complete event.

In reply to Marcel Holtmann

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.

---
 include/net/bluetooth/hci.h | 1 +
 net/bluetooth/hci_core.c    | 8 ++++++++
 2 files changed, 9 insertions(+)
include/net/bluetooth/hci.h +1 -0
index ff42d05b3e72..1da8cec8e210 100644
@@ -460,6 +460,7 @@ enum {
 #define HCI_LE_SLAVE_FEATURES		0x08
 #define HCI_LE_PING			0x10
 #define HCI_LE_DATA_LEN_EXT		0x20
+#define HCI_LE_LL_PRIVACY		0x40
 #define HCI_LE_EXT_SCAN_POLICY		0x80
 #define HCI_LE_PHY_2M			0x01
 #define HCI_LE_PHY_CODED		0x08
net/bluetooth/hci_core.c +8 -0
index 589c4085499c..0d726d59a492 100644
@@ -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.
 		 */
Signature · 1 line
2.25.2
author maintainer
#6 lore raw

PATCH 4/4 Bluetooth: Clear HCI_LL_RPA_RESOLUTION flag on reset

In reply to Marcel Holtmann

When the controller is being reset or power cycled, then the flag HCI_LL_RPA_RESOLUTION which indicates if controller based address resolution is active needs to be also reset.

---
 include/net/bluetooth/hci_core.h | 1 +
 1 file changed, 1 insertion(+)
include/net/bluetooth/hci_core.h +1 -0
index 2f3275f1d1c4..239ab72f16c6 100644
@@ -645,6 +645,7 @@ extern struct mutex hci_cb_list_lock;
 	do {							\
 		hci_dev_clear_flag(hdev, HCI_LE_SCAN);		\
 		hci_dev_clear_flag(hdev, HCI_LE_ADV);		\
+		hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);\
 		hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);	\
 	} while (0)
 
Signature · 1 line
2.25.2
#4 lore raw

Re: [PATCH 3/4] Bluetooth: Enable LE Enhanced Connection Complete event.

In reply to Marcel Holtmann

Hi Marcel

Quoted 43 lines · Marcel Holtmann

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.

---
 include/net/bluetooth/hci.h | 1 +
 net/bluetooth/hci_core.c    | 8 ++++++++
 2 files changed, 9 insertions(+)
include/net/bluetooth/hci.h +1 -0
index ff42d05b3e72..1da8cec8e210 100644
@@ -460,6 +460,7 @@ enum {
 #define HCI_LE_SLAVE_FEATURES          0x08
 #define HCI_LE_PING                    0x10
 #define HCI_LE_DATA_LEN_EXT            0x20
+#define HCI_LE_LL_PRIVACY              0x40
 #define HCI_LE_EXT_SCAN_POLICY         0x80
 #define HCI_LE_PHY_2M                  0x01
 #define HCI_LE_PHY_CODED               0x08
net/bluetooth/hci_core.c +8 -1
index 589c4085499c..0d726d59a492 100644
@@ -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.
                 */
--
Quoted 2 lines

2.25.2

https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git/tree/net/bluetooth/hci_core.c#n717

I see LE Enhanced Connection complete event is enabled here.

Regards
Sathish N

author maintainer
#5 lore raw

Re: [PATCH 3/4] Bluetooth: Enable LE Enhanced Connection Complete event.

Hi Sathish,

Quoted 46 lines
Quoted 42 lines

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.

---
include/net/bluetooth/hci.h | 1 +
net/bluetooth/hci_core.c | 8 ++++++++

2 files changed, 9 insertions(+)
include/net/bluetooth/hci.h +1 -0
index ff42d05b3e72..1da8cec8e210 100644
@@ -460,6 +460,7 @@ enum {
 #define HCI_LE_SLAVE_FEATURES          0x08
 #define HCI_LE_PING                    0x10
 #define HCI_LE_DATA_LEN_EXT            0x20
+#define HCI_LE_LL_PRIVACY              0x40
 #define HCI_LE_EXT_SCAN_POLICY         0x80
 #define HCI_LE_PHY_2M                  0x01
 #define HCI_LE_PHY_CODED               0x08
net/bluetooth/hci_core.c +8 -1
index 589c4085499c..0d726d59a492 100644
@@ -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.
                */
--
Quoted 2 lines

2.25.2

https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git/tree/net/bluetooth/hci_core.c#n717

Quoted 1 line

I see LE Enhanced Connection complete event is enabled here.

I see. However LE Enhanced Connection complete event has been added for LL Privacy and not for Extended Advertising. The current setting of the event needs to be removed. If you look at the difference on what the event is adding compared to the legacy one, you see it is only about RPAs.

Regards

Marcel

#7 lore raw
In reply to Marcel Holtmann

Hi Marcel,

Quoted 9 lines · Marcel Holtmann

These are are few cleanup patches before the LL Privacy work can continue.

Marcel Holtmann (4):
Bluetooth: Sort list of LE features constants
Bluetooth: Use extra variable to make code more readable
Bluetooth: Enable LE Enhanced Connection Complete event.
Bluetooth: Clear HCI_LL_RPA_RESOLUTION flag on reset

Quoted 5 lines
 include/net/bluetooth/hci.h      | 5 ++---
 include/net/bluetooth/hci_core.h | 1 +
 net/bluetooth/hci_core.c         | 8 ++++++++
 net/bluetooth/hci_request.c      | 4 +++-
 4 files changed, 14 insertions(+), 4 deletions(-)

All patches in this set have been applied to bluetooth-next. Thanks.

Johan