Bluetooth: Translate additional address type during le_conn_comp
authorSathish Narasimman <sathish.narasimman@intel.com>
Thu, 20 May 2021 11:42:01 +0000 (17:12 +0530)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 26 Jun 2021 05:12:33 +0000 (07:12 +0200)
When using controller based address resolution, then the destination
address type during le_conn_complete uses 0x02 & 0x03 if controller
resolves the destination address(RPA).
These address types need to be converted back into either 0x00 0r 0x01

Signed-off-by: Sathish Narasimman <sathish.narasimman@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_event.c

index 04b2509..7c94824 100644 (file)
@@ -5196,6 +5196,23 @@ static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
                conn->dst_type = irk->addr_type;
        }
 
+       /* When using controller based address resolution, then the new
+        * address types 0x02 and 0x03 are used. These types need to be
+        * converted back into either public address or random address type
+        */
+       if (use_ll_privacy(hdev) &&
+           hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
+           hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) {
+               switch (conn->dst_type) {
+               case ADDR_LE_DEV_PUBLIC_RESOLVED:
+                       conn->dst_type = ADDR_LE_DEV_PUBLIC;
+                       break;
+               case ADDR_LE_DEV_RANDOM_RESOLVED:
+                       conn->dst_type = ADDR_LE_DEV_RANDOM;
+                       break;
+               }
+       }
+
        if (status) {
                hci_le_conn_failed(conn, status);
                goto unlock;