Re: [PATCH 1/3] Bluetooth: Fix local name in scan rsp

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

 



Hi Michal,

> Use complete name if it fits. If not and there is short name
> check if it fits. If not then use shortened name as prefix
> of complete name.
> 
> Signed-off-by: Michał Narajowski <michal.narajowski@xxxxxxxxxxx>
> ---
> net/bluetooth/hci_request.c | 46 +++++++++++++++++++++++++++++++++------------
> 1 file changed, 34 insertions(+), 12 deletions(-)
> 
> diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c
> index c813568..880758c 100644
> --- a/net/bluetooth/hci_request.c
> +++ b/net/bluetooth/hci_request.c
> @@ -973,25 +973,47 @@ void __hci_req_enable_advertising(struct hci_request *req)
> 
> static u8 append_local_name(struct hci_dev *hdev, u8 *ptr, u8 ad_len)
> {
> -	size_t name_len;
> +	size_t complete_len;
> +	size_t short_len;
> 	int max_len;
> 
> 	max_len = HCI_MAX_AD_LENGTH - ad_len - 2;
> -	name_len = strlen(hdev->dev_name);
> -	if (name_len > 0 && max_len > 0) {
> +	complete_len = strlen(hdev->dev_name);
> +	short_len = strlen(hdev->short_name);
> 
> -		if (name_len > max_len) {
> -			name_len = max_len;
> -			ptr[1] = EIR_NAME_SHORT;
> -		} else
> -			ptr[1] = EIR_NAME_COMPLETE;
> +	/* no space left for name */
> +	if (max_len < 1)
> +		return ad_len;
> 
> -		ptr[0] = name_len + 1;
> +	/* no name set */
> +	if (!complete_len)
> +		return ad_len;
> 
> -		memcpy(ptr + 2, hdev->dev_name, name_len);
> +	/* complete name fits */
> +	if (complete_len <= max_len) {
> +		ptr[0] = complete_len + 1;
> +		ptr[1] = EIR_NAME_COMPLETE;
> +		memcpy(ptr + 2, hdev->dev_name, complete_len);
> 
> -		ad_len += (name_len + 2);
> -		ptr += (name_len + 2);
> +		return ad_len + complete_len + 2;
> +	}

so what we discussed is that at minimum 11 octets of name will be included into the scan response. That is the same size of the Short_name (which includes the nul-byte).

If the full name is 11 octets or smaller, then that is included. If the full name is longer and a short name has been set, then the short name is used. If the short name is not set, then the full name is truncated to 11 octets.

For the case where the full name is 11 octets or smaller, the complete tag is used. For the case where the short name is used or the full name is truncated, the partial tag is used.

> +
> +	/* shortened name set and fits */

Just a note here, it is not called shortened name. It is the short name. We clearly separated the full name vs short name in the mgmt API.

Regards

Marcel

--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[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