Re: [PATCH v1] Bluetooth: Return whether a connection is outbound

From: Marcel Holtmann
Date: Fri Apr 09 2021 - 10:14:16 EST


Hi Yu,

> When an MGMT_EV_DEVICE_CONNECTED event is reported back to the user
> space we will set the flags to tell if the established connection is
> outbound or not. This is useful for the user space to log better metrics
> and error messages.
>
> Reviewed-by: Miao-chen Chou <mcchou@xxxxxxxxxxxx>
> Reviewed-by: Alain Michaud <alainm@xxxxxxxxxxxx>
> Signed-off-by: Yu Liu <yudiliu@xxxxxxxxxx>
> ---
>
> Changes in v1:
> - Initial change
>
> include/net/bluetooth/mgmt.h | 2 ++
> net/bluetooth/mgmt.c | 5 +++++
> 2 files changed, 7 insertions(+)
>
> diff --git a/include/net/bluetooth/mgmt.h b/include/net/bluetooth/mgmt.h
> index a7cffb069565..7cc724386b00 100644
> --- a/include/net/bluetooth/mgmt.h
> +++ b/include/net/bluetooth/mgmt.h
> @@ -885,6 +885,8 @@ struct mgmt_ev_new_long_term_key {
> struct mgmt_ltk_info key;
> } __packed;
>
> +#define MGMT_DEV_CONN_INITIATED_CONNECTION 0x08
> +

I would just add this to MGMT_DEV_FOUND_INITIATED_CONN 0x08. And yes, I realize that this is a bit weird, but then all values are in one place.

> #define MGMT_EV_DEVICE_CONNECTED 0x000B
> struct mgmt_ev_device_connected {
> struct mgmt_addr_info addr;
> diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
> index 09e099c419f2..77213e67e8e4 100644
> --- a/net/bluetooth/mgmt.c
> +++ b/net/bluetooth/mgmt.c
> @@ -8774,6 +8774,11 @@ void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
> bacpy(&ev->addr.bdaddr, &conn->dst);
> ev->addr.type = link_to_bdaddr(conn->type, conn->dst_type);

So the prototype of mgmt_device_connected needs to be changed to remove the flags parameter. It is not used at all.

>
> + if (conn->out)
> + flags |= MGMT_DEV_CONN_INITIATED_CONNECTION;
> + else
> + flags &= ~MGMT_DEV_CONN_INITIATED_CONNECTION;
> +

And then this should be just this:

if (conn->out)
flags |= MGMT_DEV_CONN_INITIATED_CONNECTION;

> ev->flags = __cpu_to_le32(flags);
>
> /* We must ensure that the EIR Data fields are ordered and

Regards

Marcel