Re: [PATCH] Bluetooth: Don't treat connection timeout as a failure

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

 



Hi Johan,

>>> When we're doing background scanning and connection attempts it's
>>> possible we timeout trying to connect and go back to scanning again.
>>> The timeout triggers a HCI_LE_Create_Connection_Cancel which will
>>> trigger a Connection Complete with "Unknown Connection Identifier"
>>> error status. Since we go back to scanning this isn't really a failure
>>> and shouldn't be presented as such to user space through mgmt.
>>> 
>>> The exception to this is if the connection attempt was due to an
>>> explicit request on an L2CAP socket (indicated by
>>> params->explicit_connect being true). Since the socket will get an
>>> error it's consistent to also notify the failure on mgmt in this case.
>>> 
>>> Signed-off-by: Johan Hedberg <johan.hedberg@xxxxxxxxx>
>>> ---
>>> net/bluetooth/hci_conn.c | 12 ++++++++++--
>>> 1 file changed, 10 insertions(+), 2 deletions(-)
>>> 
>>> diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
>>> index f28741d78e0b..de7fa9f78cbe 100644
>>> --- a/net/bluetooth/hci_conn.c
>>> +++ b/net/bluetooth/hci_conn.c
>>> @@ -668,8 +668,16 @@ void hci_le_conn_failed(struct hci_conn *conn, u8 status)
>>> 
>>> 	conn->state = BT_CLOSED;
>>> 
>>> -	mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type,
>>> -			    status);
>>> +	/* If the failure was due to a timeout and cancelation of the
>>> +	 * attempt there's no point of notifying failure since we'll go
>>> +	 * back to keep trying to connect. The only exception is
>>> +	 * explicit connect requests where a timeout + cancel does
>>> +	 * indicate an actual failure.
>>> +	 */
>>> +	if (status != HCI_ERROR_UNKNOWN_CONN_ID ||
>>> +	    (params && params->explicit_connect))
>>> +		mgmt_connect_failed(hdev, &conn->dst, conn->type,
>>> +				    conn->dst_type, status);
>> 
>> are we okay with the oversimplified error handling. I think the HCI is
>> pretty clear that an Unknown Connection Identifier error can only be
>> traced back to the fact that LE Create Connection Cancel was issued,
>> but the connection had already been established.
> 
> Where in the spec do you conclude this from? The section for
> HCI_LE_Create_Connection_Cancel states:
> 
> "
> If the cancellation was successful then, after the Command Complete
> event for the LE_Create_Connection_Cancel command:
> 
> - if the LE Enhanced Connection Complete event is unmasked, then that
>   event shall be sent.
> - otherwise the LE Connection Complete event shall be sent.
> 
> In either case, the event shall be sent with the error code Unknown
> Connection Identifier (0x02).
> "
> 
> That doesn't talk anything about a connection already having been
> established but rather a successful cancellation. The
> hci_le_conn_failed() gets called from the event handler for LE
> Connection Complete, so this error code here means that the cancellation
> was successful.
> 
>> Can you cause that error also with LE Create Connection itself? I
>> doubt it, but we want to be 100% clear here and maybe also be event
>> clear in the the comment on what kind of errors we are catching and
>> why. I think citing the spec might be a good idea here as well.
> 
> I can clarify in the comment that specifically Unknown Conn ID means
> that the cancellation was successful.

I think that would be a good idea.

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