linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: Alain Michaud <alainm@chromium.org>
Cc: linux-bluetooth <linux-bluetooth@vger.kernel.org>,
	Sonny Sasaka <sonnysasaka@chromium.org>
Subject: Re: [Bluez PATCH] main: adding configurable eir_max_name_len
Date: Tue, 28 Jul 2020 08:58:29 +0200	[thread overview]
Message-ID: <17DA93F5-AB77-4C40-A5F2-38D8FE6C98A3@holtmann.org> (raw)
In-Reply-To: <20200727173720.2700327-1-alainm@chromium.org>

Hi Alain,

> This change adds support for a configurable eir_max_name_len for
> platforms which requires a larger than 48 bytes complete name in EIR.
> 
> From bluetoothctl:
> [bluetooth]# system-alias
> 012345678901234567890123456789012345678901234567890123456789
> Changing 012345678901234567890123456789012345678901234567890123456789
> succeeded
> [CHG] Controller DC:71:96:69:02:89 Alias:
> 012345678901234567890123456789012345678901234567890123456789
> 
> From btmon:
> < HCI Command: Write Local Name (0x03|0x0013) plen 248             #109
> [hci0] 88.567990
>         Name:
> 012345678901234567890123456789012345678901234567890123456789
>> HCI Event: Command Complete (0x0e) plen 4                             
>    #110 [hci0] 88.663854
>       Write Local Name (0x03|0x0013) ncmd 1
>         Status: Success (0x00)
> @ MGMT Event: Local Name Changed (0x0008) plen 260               
> {0x0004} [hci0] 88.663948
>         Name:
> 012345678901234567890123456789012345678901234567890123456789
>         Short name:
> < HCI Command: Write Extended Inquiry Response (0x03|0x0052) plen 241 
>         FEC: Not required (0x00)
>         Name (complete):
> 012345678901234567890123456789012345678901234567890123456789
>         TX power: 12 dBm
>         Device ID: Bluetooth SIG assigned (0x0001)
>           Vendor: Google (224)
>           Product: 0xc405
>           Version: 0.5.6 (0x0056)
>         16-bit Service UUIDs (complete): 7 entries
>           Generic Access Profile (0x1800)
>           Generic Attribute Profile (0x1801)
>           Device Information (0x180a)
>           A/V Remote Control (0x110e)
>           A/V Remote Control Target (0x110c)
>           Handsfree Audio Gateway (0x111f)
>           Audio Source (0x110a)
>> HCI Event: Command Complete (0x0e) plen 4                           
>       Write Extended Inquiry Response (0x03|0x0052) ncmd 1
>         Status: Success (0x00)
> 
> Reviewed-by: Sonny Sasaka <sonnysasaka@chromium.org>
> Signed-off-by: Alain Michaud <alainm@chromium.org>
> ---
> 
> doc/mgmt-api.txt |  1 +
> src/adapter.c    | 10 +++++++++-
> src/hcid.h       |  1 +
> src/main.c       |  5 +++++
> src/main.conf    |  5 +++++
> 5 files changed, 21 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt
> index ca0d38469..1bc0f0c12 100644
> --- a/doc/mgmt-api.txt
> +++ b/doc/mgmt-api.txt
> @@ -3279,6 +3279,7 @@ Read Default System Configuration Command
> 		0x0019	LE Connection Latency
> 		0x001a	LE Connection Supervision Timeout
> 		0x001b	LE Autoconnect Timeout
> +		0x001c	Max EIR Name Length

we can certainly do this, but I prefer that do this for LE and BR/EDR and name it that way as well.

> 
> 	This command can be used at any time and will return a list of
> 	supported default parameters as well as their current value.
> diff --git a/src/adapter.c b/src/adapter.c
> index 5e896a9f0..3adc67b63 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -2375,7 +2375,7 @@ static bool parse_pathloss(DBusMessageIter *value,
> 	return true;
> }
> 
> -static bool parse_transport(DBusMessageIter *value, 
> +static bool parse_transport(DBusMessageIter *value,
> 					struct discovery_filter *filter)
> {
> 	char *transport_str;
> @@ -4435,6 +4435,14 @@ static void load_default_system_params(struct btd_adapter *adapter)
> 		len += sizeof(params[i].u16);
> 	}
> 
> +	if (main_opts.default_params.eir_max_name_len) {
> +		params[i].entry.type = 0x001c;
> +		params[i].entry.length = sizeof(params[i].u16);
> +		params[i].u16 = main_opts.default_params.eir_max_name_len;
> +		++i;
> +		len += sizeof(params[i].u16);
> +	}
> +

Do you really want to keep it as uint16_t or is that just laziness since changing the kernel to support anything other than uint16_t is complicated?

On a side note, you need to provide a uint16_t value in little endian to the MGMT wire protocol.

> 	err = mgmt_send(adapter->mgmt, MGMT_OP_SET_DEF_SYSTEM_CONFIG,
> 			adapter->dev_id, len, params, NULL, NULL, NULL);
> 	if (!err)
> diff --git a/src/hcid.h b/src/hcid.h
> index 5f249ebf9..c9b59a374 100644
> --- a/src/hcid.h
> +++ b/src/hcid.h
> @@ -93,6 +93,7 @@ struct main_opts {
> 		uint16_t	le_conn_latency;
> 		uint16_t	le_conn_lsto;
> 		uint16_t	le_autoconnect_timeout;
> +		uint16_t	eir_max_name_len;
> 	} default_params;
> 
> 
> diff --git a/src/main.c b/src/main.c
> index ec7a9fbd7..74876e01d 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -123,6 +123,7 @@ static const char *controller_options[] = {
> 	"LEConnectionLatency",
> 	"LEConnectionSupervisionTimeout",
> 	"LEAutoconnecttimeout",
> +	"EirMaxNameLength",
> 	NULL
> };
> 
> @@ -433,6 +434,10 @@ static void parse_controller_config(GKeyFile *config)
> 		  &main_opts.default_params.le_autoconnect_timeout,
> 		  0x0001,
> 		  0x4000},
> +		{ "EirMaxNameLength",
> +		  &main_opts.default_params.eir_max_name_len,
> +		  0x0001,
> +		  0x00EE},
> 	};
> 	uint16_t i;
> 
> diff --git a/src/main.conf b/src/main.conf
> index f41203b96..7ecac5930 100644
> --- a/src/main.conf
> +++ b/src/main.conf
> @@ -148,6 +148,11 @@
> #LEConnectionSupervisionTimeout=
> #LEAutoconnecttimeout=
> 
> +# EIR Max Name. This is the maximum length for the COMPLETE_NAME EIR section.
> +# If the name length exceeds this size, a SHORT_NAME section is used.
> +# Default: 48
> +#EirMaxNameLength = 48
> +
> [GATT]
> # GATT attribute cache.
> # Possible values:

Regards

Marcel


  reply	other threads:[~2020-07-28  6:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-27 17:37 [Bluez PATCH] main: adding configurable eir_max_name_len Alain Michaud
2020-07-28  6:58 ` Marcel Holtmann [this message]
2020-07-28 13:10   ` Alain Michaud

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=17DA93F5-AB77-4C40-A5F2-38D8FE6C98A3@holtmann.org \
    --to=marcel@holtmann.org \
    --cc=alainm@chromium.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=sonnysasaka@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).