Linux-Bluetooth Archive on lore.kernel.org
 help / color / Atom feed
From: "Frédéric Danis" <frederic.danis.oss@gmail.com>
To: "Pali Rohár" <pali.rohar@gmail.com>,
	"Luiz Augusto von Dentz" <luiz.dentz@gmail.com>
Cc: "linux-bluetooth@vger.kernel.org" <linux-bluetooth@vger.kernel.org>
Subject: Re: bluez A2DP socket reliability
Date: Mon, 10 Jun 2019 18:06:53 +0200
Message-ID: <b7e5978c-7ebc-82ad-2c44-878712cd14cd@gmail.com> (raw)
In-Reply-To: <20190610105130.un3muj4knwoua5cb@pali>

Hi,

Le 10/06/2019 à 12:51, Pali Rohár a écrit :
> On Friday 07 June 2019 18:23:41 Luiz Augusto von Dentz wrote:
>> Hi Pali,
>>
>> On Fri, Jun 7, 2019 at 4:00 PM Pali Rohár<pali.rohar@gmail.com>  wrote:
>>> On Sunday 19 May 2019 14:22:23 Pali Rohár wrote:
>>>> On Sunday 19 May 2019 11:13:09 Luiz Augusto von Dentz wrote:
>>>>> Hi Pali,
>>>>>
>>>>> On Sat, May 18, 2019 at 11:12 PM Pali Rohár<pali.rohar@gmail.com>  wrote:
>>>>>> Hello! How is L2CAP layer of bluetooth socket used for A2DP audio
>>>>>> transfer configured in bluez? It is reliable with big/infinite
>>>>>> retransmit count? Or in best-effort manner and some packets may be
>>>>>> dropped? And it is possible to change between these two modes for
>>>>>> application which uses bluez DBUS API? I'm asking because some A2DP
>>>>>> audio codecs are designed to deal with packet loss and for those codecs
>>>>>> it would be probably better to configure L2CAP socket to unreliable
>>>>>> mode.
>>>>> We don't use ERTM with AVDTP, both signaling and transport sockets are
>>>>> using basic mode which don't support retransmissions, there the
>>>>> concept of flush timeout which iirc we don't currently it.
>>>> On bluez.org site there is no information how to use bluez sockets and
>>>> the only documentation/tutorial which I found on internet was this:
>>>>
>>>>    https://people.csail.mit.edu/albert/bluez-intro/x559.html
>>>>
>>>> I do not know how up-to-date it is, but seems that by default bluez
>>>> L2CAP sockets are reliable and to change them to unreliable mode it is
>>>> needed to issue OGF_HOST_CTL / OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT (0x28)
>>>> request. As default is zero = infinity = reliable connection.
>>>>
>>>> I do not understand low level bluetooth details, but is ERTM related to
>>>> OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT?
>>>>
>>>> So what are default settings for L2CAP socket used by AVDTP/A2DP
>>>> profiles which are transferred to user application via DBUS?
>>> Hi! Do you have any idea about OCF_WRITE_AUTOMATIC_FLUSH_TIMEOUT? It is
>>> related to ERTM or not?
>> The OCF usually describes an HCI command which may affect the entire
>> ACL connection, ERTM is a L2CAP channel mode that includes
>> retransmissions. The A2DP stream transport doesn't ERTM so no
>> retransmissions shall take place.
> Fine, no retransmission is good for A2DP.

I am not sure there is no retransmission with current implementation.
AFAIU, ERTM and automatic flush timeout are not linked. ERTM operates at 
L2CAP level while automatic flush timeout [1] operates at ACL level.
When I read the automatic flush timeout set for an A2DP SBC connection 
it returns 0, which means that the connection uses an infinite timeout. 
So, even if higher levels set packets as flushable, the ACL policy 
requests baseband to indefinitely try to send data [3]:
   "The default Flush Timeout shall be infinite,
     i.e. re-transmissions are carried out until
     physical link loss occurs. This is also
     referred to as a 'reliable channel.'"

[1] Bluetooth core Vol 2, Part E, 6.19
[2] Bluetooth core Vol 2, Part E, 7.3.29
[3] Bluetooth core Vol 2, Part B, 7.6.3

-- 
Frédéric Danis                       Embedded Linux Consultant
frederic.danis.oss@gmail.com


  parent reply index

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-18 19:06 Pali Rohár
2019-05-19  8:13 ` Luiz Augusto von Dentz
2019-05-19 12:22   ` Pali Rohár
2019-06-07 13:00     ` Pali Rohár
2019-06-07 15:23       ` Luiz Augusto von Dentz
2019-06-10 10:51         ` Pali Rohár
2019-06-10 12:16           ` Luiz Augusto von Dentz
2019-06-10 16:06           ` Frédéric Danis [this message]
2019-06-14  7:16             ` Pali Rohár

Reply instructions:

You may reply publically 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=b7e5978c-7ebc-82ad-2c44-878712cd14cd@gmail.com \
    --to=frederic.danis.oss@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=luiz.dentz@gmail.com \
    --cc=pali.rohar@gmail.com \
    /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

Linux-Bluetooth Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-bluetooth/0 linux-bluetooth/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-bluetooth linux-bluetooth/ https://lore.kernel.org/linux-bluetooth \
		linux-bluetooth@vger.kernel.org linux-bluetooth@archiver.kernel.org
	public-inbox-index linux-bluetooth


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-bluetooth


AGPL code for this site: git clone https://public-inbox.org/ public-inbox