linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Bluetooth: Translate additional address type correctly
@ 2020-04-07 21:12 Marcel Holtmann
  2020-04-07 23:36 ` Abhishek Pandit-Subedi
  0 siblings, 1 reply; 3+ messages in thread
From: Marcel Holtmann @ 2020-04-07 21:12 UTC (permalink / raw)
  To: linux-bluetooth

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 types.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
---
 include/net/bluetooth/hci.h | 6 ++++--
 net/bluetooth/hci_core.c    | 9 +++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 58360538d42b..74896536ebce 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -2257,8 +2257,10 @@ struct hci_ev_le_conn_complete {
 #define LE_EXT_ADV_SCAN_RSP		0x0008
 #define LE_EXT_ADV_LEGACY_PDU		0x0010
 
-#define ADDR_LE_DEV_PUBLIC	0x00
-#define ADDR_LE_DEV_RANDOM	0x01
+#define ADDR_LE_DEV_PUBLIC		0x00
+#define ADDR_LE_DEV_RANDOM		0x01
+#define ADDR_LE_DEV_PUBLIC_RESOLVED	0x02
+#define ADDR_LE_DEV_RANDOM_RESOLVED	0x03
 
 #define HCI_EV_LE_ADVERTISING_REPORT	0x02
 struct hci_ev_le_advertising_info {
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 589c4085499c..fb210f7ab7ab 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -3145,6 +3145,15 @@ struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
 {
 	struct hci_conn_params *param;
 
+	switch (addr_type) {
+	case ADDR_LE_DEV_PUBLIC_RESOLVED:
+		addr_type = ADDR_LE_DEV_PUBLIC;
+		break;
+	case ADDR_LE_DEV_RANDOM:
+		addr_type = ADDR_LE_DEV_RANDOM;
+		break;
+	}
+
 	list_for_each_entry(param, list, action) {
 		if (bacmp(&param->addr, addr) == 0 &&
 		    param->addr_type == addr_type)
-- 
2.25.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] Bluetooth: Translate additional address type correctly
  2020-04-07 21:12 [PATCH] Bluetooth: Translate additional address type correctly Marcel Holtmann
@ 2020-04-07 23:36 ` Abhishek Pandit-Subedi
  2020-04-08  6:26   ` Marcel Holtmann
  0 siblings, 1 reply; 3+ messages in thread
From: Abhishek Pandit-Subedi @ 2020-04-07 23:36 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Bluez mailing list

Hi Marcel,

On Tue, Apr 7, 2020 at 2:12 PM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> 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 types.
>
> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  include/net/bluetooth/hci.h | 6 ++++--
>  net/bluetooth/hci_core.c    | 9 +++++++++
>  2 files changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 58360538d42b..74896536ebce 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -2257,8 +2257,10 @@ struct hci_ev_le_conn_complete {
>  #define LE_EXT_ADV_SCAN_RSP            0x0008
>  #define LE_EXT_ADV_LEGACY_PDU          0x0010
>
> -#define ADDR_LE_DEV_PUBLIC     0x00
> -#define ADDR_LE_DEV_RANDOM     0x01
> +#define ADDR_LE_DEV_PUBLIC             0x00
> +#define ADDR_LE_DEV_RANDOM             0x01
> +#define ADDR_LE_DEV_PUBLIC_RESOLVED    0x02
> +#define ADDR_LE_DEV_RANDOM_RESOLVED    0x03
>
>  #define HCI_EV_LE_ADVERTISING_REPORT   0x02
>  struct hci_ev_le_advertising_info {
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index 589c4085499c..fb210f7ab7ab 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -3145,6 +3145,15 @@ struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
>  {
>         struct hci_conn_params *param;
>
> +       switch (addr_type) {
> +       case ADDR_LE_DEV_PUBLIC_RESOLVED:
> +               addr_type = ADDR_LE_DEV_PUBLIC;
> +               break;
> +       case ADDR_LE_DEV_RANDOM:

This seems to be a typo. Should it be `case ADDR_LE_DEV_RANDOM_RESOLVED`?

> +               addr_type = ADDR_LE_DEV_RANDOM;
> +               break;
> +       }
> +
>         list_for_each_entry(param, list, action) {
>                 if (bacmp(&param->addr, addr) == 0 &&
>                     param->addr_type == addr_type)
> --
> 2.25.2
>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Bluetooth: Translate additional address type correctly
  2020-04-07 23:36 ` Abhishek Pandit-Subedi
@ 2020-04-08  6:26   ` Marcel Holtmann
  0 siblings, 0 replies; 3+ messages in thread
From: Marcel Holtmann @ 2020-04-08  6:26 UTC (permalink / raw)
  To: Abhishek Pandit-Subedi; +Cc: Bluez mailing list

Hi Abhishek,

>> 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 types.
>> 
>> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
>> ---
>> include/net/bluetooth/hci.h | 6 ++++--
>> net/bluetooth/hci_core.c    | 9 +++++++++
>> 2 files changed, 13 insertions(+), 2 deletions(-)
>> 
>> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
>> index 58360538d42b..74896536ebce 100644
>> --- a/include/net/bluetooth/hci.h
>> +++ b/include/net/bluetooth/hci.h
>> @@ -2257,8 +2257,10 @@ struct hci_ev_le_conn_complete {
>> #define LE_EXT_ADV_SCAN_RSP            0x0008
>> #define LE_EXT_ADV_LEGACY_PDU          0x0010
>> 
>> -#define ADDR_LE_DEV_PUBLIC     0x00
>> -#define ADDR_LE_DEV_RANDOM     0x01
>> +#define ADDR_LE_DEV_PUBLIC             0x00
>> +#define ADDR_LE_DEV_RANDOM             0x01
>> +#define ADDR_LE_DEV_PUBLIC_RESOLVED    0x02
>> +#define ADDR_LE_DEV_RANDOM_RESOLVED    0x03
>> 
>> #define HCI_EV_LE_ADVERTISING_REPORT   0x02
>> struct hci_ev_le_advertising_info {
>> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
>> index 589c4085499c..fb210f7ab7ab 100644
>> --- a/net/bluetooth/hci_core.c
>> +++ b/net/bluetooth/hci_core.c
>> @@ -3145,6 +3145,15 @@ struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
>> {
>>        struct hci_conn_params *param;
>> 
>> +       switch (addr_type) {
>> +       case ADDR_LE_DEV_PUBLIC_RESOLVED:
>> +               addr_type = ADDR_LE_DEV_PUBLIC;
>> +               break;
>> +       case ADDR_LE_DEV_RANDOM:
> 
> This seems to be a typo. Should it be `case ADDR_LE_DEV_RANDOM_RESOLVED`?

indeed. I have not tested this with static address and identity address yet.

This address translation is needed in a few more places. Especially also in the Connection Complete events. And we also need to store the RPA used for the connection since it would be required for SMP.

Regards

Marcel


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-04-08  6:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-07 21:12 [PATCH] Bluetooth: Translate additional address type correctly Marcel Holtmann
2020-04-07 23:36 ` Abhishek Pandit-Subedi
2020-04-08  6:26   ` Marcel Holtmann

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).