Re: [PATCH BlueZ v2] main.conf: Add FilterDiscoverable option

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2025-09-04 at 12:33 -0400, Luiz Augusto von Dentz wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
> 
> This adds FilterDiscoverable option which can be use to control if
> devices in non-discoverable mode shall be filtered or not, the
> default
> is true to adhere to core spec:

This needs more explanation as to where the filter is defined.

What happens if no filter is defined and FilterDiscoverable is set to
true?

In which circumstances would a system builder, integrator or admin want
to set this to false?

>  9.2. Discovery modes and procedures
> 
>  All devices shall be in either non-discoverable mode or one of the
>  discoverable modes. A device in the discoverable mode shall be in
>  either the general discoverable mode or the limited discoverable
> mode.
>  A device in the non-discoverable mode is not discoverable. Devices
>  operating in either the general discoverable mode or the limited
>  discoverable mode can be found by the discovering device.
> ---
>  src/adapter.c | 4 +++-
>  src/btd.h     | 1 +
>  src/main.c    | 4 ++++
>  src/main.conf | 5 +++++
>  4 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/src/adapter.c b/src/adapter.c
> index 549a6c0b8324..dc5ba65d73fa 100644
> --- a/src/adapter.c
> +++ b/src/adapter.c
> @@ -7239,8 +7239,10 @@ static bool device_is_discoverable(struct
> btd_adapter *adapter,
>  
>  	if (bdaddr_type == BDADDR_BREDR || adapter-
> >filtered_discovery)
>  		discoverable = true;
> -	else
> +	else if (btd_opts.filter_discoverable)
>  		discoverable = eir->flags & (EIR_LIM_DISC |
> EIR_GEN_DISC);
> +	else
> +		discoverable = true;
>  
>  	/*
>  	 * Mark as not discoverable if no client has requested
> discovery and
> diff --git a/src/btd.h b/src/btd.h
> index 18a5eb88696a..5c952bf17956 100644
> --- a/src/btd.h
> +++ b/src/btd.h
> @@ -142,6 +142,7 @@ struct btd_opts {
>  	bool		refresh_discovery;
>  	bool		experimental;
>  	bool		testing;
> +	bool		filter_discoverable;
>  	struct queue	*kernel;
>  
>  	uint16_t	did_source;
> diff --git a/src/main.c b/src/main.c
> index a542d0fc50b0..1c7390e6329d 100644
> --- a/src/main.c
> +++ b/src/main.c
> @@ -91,6 +91,7 @@ static const char *supported_options[] = {
>  	"Testing",
>  	"KernelExperimental",
>  	"RemoteNameRequestRetryDelay",
> +	"FilterDiscoverable",
>  	NULL
>  };
>  
> @@ -1062,6 +1063,8 @@ static void parse_general(GKeyFile *config)
>  	parse_config_u32(config, "General",
> "RemoteNameRequestRetryDelay",
>  					&btd_opts.name_request_retry
> _delay,
>  					0, UINT32_MAX);
> +	parse_config_bool(config, "General", "FilterDiscoverable",
> +						&btd_opts.filter_dis
> coverable);
>  }
>  
>  static void parse_gatt_cache(GKeyFile *config)
> @@ -1239,6 +1242,7 @@ static void init_defaults(void)
>  	btd_opts.refresh_discovery = TRUE;
>  	btd_opts.name_request_retry_delay =
> DEFAULT_NAME_REQUEST_RETRY_DELAY;
>  	btd_opts.secure_conn = SC_ON;
> +	btd_opts.filter_discoverable = true;
>  
>  	btd_opts.defaults.num_entries = 0;
>  	btd_opts.defaults.br.page_scan_type = 0xFFFF;
> diff --git a/src/main.conf b/src/main.conf
> index 86759d53c1f2..55618be5c923 100644
> --- a/src/main.conf
> +++ b/src/main.conf
> @@ -148,6 +148,11 @@
>  # The value is in seconds. Default is 300, i.e. 5 minutes.
>  #RemoteNameRequestRetryDelay = 300
>  
> +# Filter out non-discoverable devices based on discoverable flags
> (General or
> +# Limited).
> +# Defaults to true
> +#FilterDiscoverable = true
> +
>  [BR]
>  # The following values are used to load default adapter parameters
> for BR/EDR.
>  # BlueZ loads the values into the kernel before the adapter is
> powered if the





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux