2020-04-06 23:04:57

by Olivier MARTIN

[permalink] [raw]
Subject: btvirt with two virtual controllers: Cannot connect to GATT server

Hi all,

I am trying to test BLE connection between two virtual controllers
(created with 'btvirt'). But when trying to connect to the GATT server
running on the first virtual controller, I have the error
"src/device.c:att_connect_cb() connect error: Transport endpoint is not
connected (107)"


To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
5th April).

Here is the test case:

1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will need my
patch to fix command line parsing I sent a couple of minutes ago)

2. Start bluetoothctl to initialize the Virtual Controller that would
play the role of GATT Server:

$ bluetoothctl
[NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
[NEW] Device E3:01:36:88:4C:DE TestAdvertisement
[NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
[NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement

[bluetooth]# list
Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480

[bluetooth]# power on
Changing power on succeeded
[CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes

[bluetooth]# discoverable on
Changing discoverable on succeeded
[CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes

[bluetooth]# advertise on
[CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
[CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
Advertising object registered


3. Use './test/example-gatt-server' to simulate GATT server. I confirm
the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)

4. Return to bluetoothctl to switch to second virtual controller and
connect to the first one

[bluetooth]# select E3:01:36:88:4C:DE
Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]

[bluetooth]# power on
Changing power on succeeded
[CHG] Controller E3:01:36:88:4C:DE Powered: yes

[bluetooth]# scan on
Discovery started
[CHG] Controller E3:01:36:88:4C:DE Discovering: yes
[NEW] Device DB:E3:2A:E8:90:C4
[bluetooth]# scan off
Discovery stopped
[CHG] Controller E3:01:36:88:4C:DE Discovering: no

[bluetooth]# connect DB:E3:2A:E8:90:C4
Attempting to connect to DB:E3:2A:E8:90:C4
Failed to connect: org.bluez.Error.Failed
[CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no


And in the bluetoothd log:

bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
bluetoothd[15175]: src/adapter.c:update_discovery_filter()
bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
bluetoothd[15175]: src/adapter.c:start_discovery_timeout() adapter->current_discovery_filter == 0
bluetoothd[15175]: src/adapter.c:start_discovery_complete() status 0x00
bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 1 method 0
bluetoothd[15175]: src/adapter.c:device_found_callback() hci0 addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
bluetoothd[15175]: src/device.c:device_set_flags() flags 6
bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
bluetoothd[15175]: src/adapter.c:stop_discovery_complete() status 0x00
bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 0 method 0
bluetoothd[15175]: src/device.c:device_connect_le() Connection attempt to: DB:E3:2A:E8:90:C4
bluetoothd[15175]: src/device.c:att_connect_cb() connect error: Transport endpoint is not connected (107)


2020-04-07 00:26:37

by Luiz Augusto von Dentz

[permalink] [raw]
Subject: Re: btvirt with two virtual controllers: Cannot connect to GATT server

Hi Olivier,

On Mon, Apr 6, 2020 at 4:06 PM Olivier MARTIN <[email protected]> wrote:
>
> Hi all,
>
> I am trying to test BLE connection between two virtual controllers
> (created with 'btvirt'). But when trying to connect to the GATT server
> running on the first virtual controller, I have the error
> "src/device.c:att_connect_cb() connect error: Transport endpoint is not
> connected (107)"
>
>
> To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
> 5th April).
>
> Here is the test case:
>
> 1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will need my
> patch to fix command line parsing I sent a couple of minutes ago)
>
> 2. Start bluetoothctl to initialize the Virtual Controller that would
> play the role of GATT Server:
>
> $ bluetoothctl
> [NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
> [NEW] Device E3:01:36:88:4C:DE TestAdvertisement
> [NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
> [NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement
>
> [bluetooth]# list
> Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>
> [bluetooth]# power on
> Changing power on succeeded
> [CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes
>
> [bluetooth]# discoverable on
> Changing discoverable on succeeded
> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes

Try with advertise.discoverable on, advertise instances actually have
their discoverable flag.

> [bluetooth]# advertise on
> [CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
> [CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
> Advertising object registered
>
>
> 3. Use './test/example-gatt-server' to simulate GATT server. I confirm
> the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)
>
> 4. Return to bluetoothctl to switch to second virtual controller and
> connect to the first one
>
> [bluetooth]# select E3:01:36:88:4C:DE
> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]
>
> [bluetooth]# power on
> Changing power on succeeded
> [CHG] Controller E3:01:36:88:4C:DE Powered: yes
>
> [bluetooth]# scan on
> Discovery started
> [CHG] Controller E3:01:36:88:4C:DE Discovering: yes
> [NEW] Device DB:E3:2A:E8:90:C4
> [bluetooth]# scan off
> Discovery stopped
> [CHG] Controller E3:01:36:88:4C:DE Discovering: no
>
> [bluetooth]# connect DB:E3:2A:E8:90:C4
> Attempting to connect to DB:E3:2A:E8:90:C4
> Failed to connect: org.bluez.Error.Failed
> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no
>
>
> And in the bluetoothd log:
>
> bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
> bluetoothd[15175]: src/adapter.c:update_discovery_filter()
> bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
> bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
> bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
> bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
> bluetoothd[15175]: src/adapter.c:start_discovery_timeout() adapter->current_discovery_filter == 0
> bluetoothd[15175]: src/adapter.c:start_discovery_complete() status 0x00
> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 1 method 0
> bluetoothd[15175]: src/adapter.c:device_found_callback() hci0 addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
> bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
> bluetoothd[15175]: src/device.c:device_set_flags() flags 6
> bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
> bluetoothd[15175]: src/adapter.c:stop_discovery_complete() status 0x00
> bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
> bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 0 method 0
> bluetoothd[15175]: src/device.c:device_connect_le() Connection attempt to: DB:E3:2A:E8:90:C4
> bluetoothd[15175]: src/device.c:att_connect_cb() connect error: Transport endpoint is not connected (107)
>


--
Luiz Augusto von Dentz

2020-04-07 06:39:44

by Olivier MARTIN

[permalink] [raw]
Subject: Re: btvirt with two virtual controllers: Cannot connect to GATT server

Hi Luiz,

On 07.04.20 02:26, Luiz Augusto von Dentz wrote:
> Hi Olivier,
>
> On Mon, Apr 6, 2020 at 4:06 PM Olivier MARTIN <[email protected]> wrote:
>> Hi all,
>>
>> I am trying to test BLE connection between two virtual controllers
>> (created with 'btvirt'). But when trying to connect to the GATT server
>> running on the first virtual controller, I have the error
>> "src/device.c:att_connect_cb() connect error: Transport endpoint is not
>> connected (107)"
>>
>>
>> To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
>> 5th April).
>>
>> Here is the test case:
>>
>> 1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will need my
>> patch to fix command line parsing I sent a couple of minutes ago)
>>
>> 2. Start bluetoothctl to initialize the Virtual Controller that would
>> play the role of GATT Server:
>>
>> $ bluetoothctl
>> [NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
>> [NEW] Device E3:01:36:88:4C:DE TestAdvertisement
>> [NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>> [NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement
>>
>> [bluetooth]# list
>> Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
>> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>
>> [bluetooth]# power on
>> Changing power on succeeded
>> [CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes
>>
>> [bluetooth]# discoverable on
>> Changing discoverable on succeeded
>> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes
> Try with advertise.discoverable on, advertise instances actually have
> their discoverable flag.

I am not sure to understand how "advertise.discoverable on" will fix my
issue.

I do not have any issue to discover the GATT server running on the first
instance of the virtual controller from the second one (see log below).

The only issue is when I try connecting to the GATT server with 'connect
DB:E3:2A:E8:90:C4', I have the error "Failed to connect:
org.bluez.Error.Failed" with the error in bluetoothd
"src/device.c:att_connect_cb() connect error: Transport endpoint is not
connected (107)".

>> [bluetooth]# advertise on
>> [CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
>> [CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
>> Advertising object registered
>>
>>
>> 3. Use './test/example-gatt-server' to simulate GATT server. I confirm
>> the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)
>>
>> 4. Return to bluetoothctl to switch to second virtual controller and
>> connect to the first one
>>
>> [bluetooth]# select E3:01:36:88:4C:DE
>> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]
>>
>> [bluetooth]# power on
>> Changing power on succeeded
>> [CHG] Controller E3:01:36:88:4C:DE Powered: yes
>>
>> [bluetooth]# scan on
>> Discovery started
>> [CHG] Controller E3:01:36:88:4C:DE Discovering: yes
>> [NEW] Device DB:E3:2A:E8:90:C4
>> [bluetooth]# scan off
>> Discovery stopped
>> [CHG] Controller E3:01:36:88:4C:DE Discovering: no
>>
>> [bluetooth]# connect DB:E3:2A:E8:90:C4
>> Attempting to connect to DB:E3:2A:E8:90:C4
>> Failed to connect: org.bluez.Error.Failed
>> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no
>>
>>
>> And in the bluetoothd log:
>>
>> bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
>> bluetoothd[15175]: src/adapter.c:update_discovery_filter()
>> bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
>> bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
>> bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
>> bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>> bluetoothd[15175]: src/adapter.c:start_discovery_timeout() adapter->current_discovery_filter == 0
>> bluetoothd[15175]: src/adapter.c:start_discovery_complete() status 0x00
>> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 1 method 0
>> bluetoothd[15175]: src/adapter.c:device_found_callback() hci0 addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
>> bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
>> bluetoothd[15175]: src/device.c:device_set_flags() flags 6
>> bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
>> bluetoothd[15175]: src/adapter.c:stop_discovery_complete() status 0x00
>> bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
>> bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
>> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0 type 6 discovering 0 method 0
>> bluetoothd[15175]: src/device.c:device_connect_le() Connection attempt to: DB:E3:2A:E8:90:C4
>> bluetoothd[15175]: src/device.c:att_connect_cb() connect error: Transport endpoint is not connected (107)
>>
>

2020-04-08 22:00:37

by Olivier MARTIN

[permalink] [raw]
Subject: Re: btvirt with two virtual controllers: Cannot connect to GATT server

Hi Luiz,

On 07.04.20 08:30, Olivier MARTIN wrote:
> Hi Luiz,
>
> On 07.04.20 02:26, Luiz Augusto von Dentz wrote:
>> Hi Olivier,
>>
>> On Mon, Apr 6, 2020 at 4:06 PM Olivier MARTIN <[email protected]>
>> wrote:
>>> Hi all,
>>>
>>> I am trying to test BLE connection between two virtual controllers
>>> (created with 'btvirt'). But when trying to connect to the GATT server
>>> running on the first virtual controller, I have the error
>>> "src/device.c:att_connect_cb() connect error: Transport endpoint is not
>>> connected (107)"
>>>
>>>
>>> To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
>>> 5th April).
>>>
>>> Here is the test case:
>>>
>>> 1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will
>>> need my
>>> patch to fix command line parsing I sent a couple of minutes ago)
>>>
>>> 2. Start bluetoothctl to initialize the Virtual Controller that would
>>> play the role of GATT Server:
>>>
>>>      $ bluetoothctl
>>>      [NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2
>>> [default]
>>>      [NEW] Device E3:01:36:88:4C:DE TestAdvertisement
>>>      [NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>      [NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement
>>>
>>>      [bluetooth]# list
>>>      Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
>>>      Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>
>>>      [bluetooth]# power on
>>>      Changing power on succeeded
>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes
>>>
>>>      [bluetooth]# discoverable on
>>>      Changing discoverable on succeeded
>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes
>> Try with advertise.discoverable on, advertise instances actually have
>> their discoverable flag.
>
> I am not sure to understand how "advertise.discoverable on" will fix
> my issue.
>
> I do not have any issue to discover the GATT server running on the
> first instance of the virtual controller from the second one (see log
> below).
>
> The only issue is when I try connecting to the GATT server with
> 'connect DB:E3:2A:E8:90:C4', I have the error "Failed to connect:
> org.bluez.Error.Failed" with the error in bluetoothd
> "src/device.c:att_connect_cb() connect error: Transport endpoint is
> not connected (107)".

I still wanted to make sure "advertise.discoverable on" would not solve
my issue. I have just tested with the latest bluez (commit 60423fed392a)
by adding "menu advertise" + "discoverable on" to the steps to duplicate
the issue. And I still see the error:

bluetoothd[14755]: src/device.c:btd_device_set_temporary() temporary 0
bluetoothd[14755]: src/device.c:device_connect_le() Connection attempt
to: DB:E3:2A:E8:90:C4
bluetoothd[14755]: src/device.c:att_connect_cb() connect error:
Transport endpoint is not connected (107)


>
>>>      [bluetooth]# advertise on
>>>      [CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
>>>      [CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
>>>      Advertising object registered
>>>
>>>
>>> 3. Use './test/example-gatt-server' to simulate GATT server. I confirm
>>> the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)
>>>
>>> 4. Return to bluetoothctl to switch to second virtual controller and
>>> connect to the first one
>>>
>>>      [bluetooth]# select E3:01:36:88:4C:DE
>>>      Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]
>>>
>>>      [bluetooth]# power on
>>>      Changing power on succeeded
>>>      [CHG] Controller E3:01:36:88:4C:DE Powered: yes
>>>
>>>      [bluetooth]# scan on
>>>      Discovery started
>>>      [CHG] Controller E3:01:36:88:4C:DE Discovering: yes
>>>      [NEW] Device DB:E3:2A:E8:90:C4
>>>      [bluetooth]# scan off
>>>      Discovery stopped
>>>      [CHG] Controller E3:01:36:88:4C:DE Discovering: no
>>>
>>>      [bluetooth]# connect DB:E3:2A:E8:90:C4
>>>      Attempting to connect to DB:E3:2A:E8:90:C4
>>>      Failed to connect: org.bluez.Error.Failed
>>>      [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no
>>>
>>>
>>> And in the bluetoothd log:
>>>
>>>      bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
>>>      bluetoothd[15175]: src/adapter.c:update_discovery_filter()
>>>      bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
>>>      bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
>>>      bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
>>>      bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>>      bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>> adapter->current_discovery_filter == 0
>>>      bluetoothd[15175]: src/adapter.c:start_discovery_complete()
>>> status 0x00
>>>      bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>> type 6 discovering 1 method 0
>>>      bluetoothd[15175]: src/adapter.c:device_found_callback() hci0
>>> addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
>>>      bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
>>>      bluetoothd[15175]: src/device.c:device_set_flags() flags 6
>>>      bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
>>>      bluetoothd[15175]: src/adapter.c:stop_discovery_complete()
>>> status 0x00
>>>      bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
>>>      bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
>>>      bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>> type 6 discovering 0 method 0
>>>      bluetoothd[15175]: src/device.c:device_connect_le() Connection
>>> attempt to: DB:E3:2A:E8:90:C4
>>>      bluetoothd[15175]: src/device.c:att_connect_cb() connect error:
>>> Transport endpoint is not connected (107)
>>>
>>

2021-01-05 09:00:48

by Barry Byford

[permalink] [raw]
Subject: Re: btvirt with two virtual controllers: Cannot connect to GATT server

Hi Olivier,

On 2020-04-08 21:40:03, Olivier MARTIN wrote:
> Hi Luiz,
>
> On 07.04.20 08:30, Olivier MARTIN wrote:
>> Hi Luiz,
>>
>> On 07.04.20 02:26, Luiz Augusto von Dentz wrote:
>>> Hi Olivier,
>>>
>>> On Mon, Apr 6, 2020 at 4:06 PM Olivier MARTIN <[email protected]>
>>> wrote:
>>>> Hi all,
>>>>
>>>> I am trying to test BLE connection between two virtual controllers
>>>> (created with 'btvirt'). But when trying to connect to the GATT server
>>>> running on the first virtual controller, I have the error
>>>> "src/device.c:att_connect_cb() connect error: Transport endpoint is not
>>>> connected (107)"
>>>>
>>>>
>>>> To test my test case, I am using the head of Bluez (2a7df9323e, Sunday
>>>> 5th April).
>>>>
>>>> Here is the test case:
>>>>
>>>> 1. Start btvirt for BLE: sudo ./emulator/btvirt -L -U2 (you will
>>>> need my
>>>> patch to fix command line parsing I sent a couple of minutes ago)
>>>>
>>>> 2. Start bluetoothctl to initialize the Virtual Controller that would
>>>> play the role of GATT Server:
>>>>
>>>> $ bluetoothctl
>>>> [NEW] Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2
>>>> [default]
>>>> [NEW] Device E3:01:36:88:4C:DE TestAdvertisement
>>>> [NEW] Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>> [NEW] Device DB:E3:2A:E8:90:C4 TestAdvertisement
>>>>
>>>> [bluetooth]# list
>>>> Controller DB:E3:2A:E8:90:C4 olivier-ThinkPad-T480 #2 [default]
>>>> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480
>>>>
>>>> [bluetooth]# power on
>>>> Changing power on succeeded
>>>> [CHG] Controller DB:E3:2A:E8:90:C4 Powered: yes
>>>>
>>>> [bluetooth]# discoverable on
>>>> Changing discoverable on succeeded
>>>> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: yes
>>> Try with advertise.discoverable on, advertise instances actually have
>>> their discoverable flag.
>>
>> I am not sure to understand how "advertise.discoverable on" will fix
>> my issue.
>>
>> I do not have any issue to discover the GATT server running on the
>> first instance of the virtual controller from the second one (see log
>> below).
>>
>> The only issue is when I try connecting to the GATT server with
>> 'connect DB:E3:2A:E8:90:C4', I have the error "Failed to connect:
>> org.bluez.Error.Failed" with the error in bluetoothd
>> "src/device.c:att_connect_cb() connect error: Transport endpoint is
>> not connected (107)".
>
> I still wanted to make sure "advertise.discoverable on" would not solve
> my issue. I have just tested with the latest bluez (commit 60423fed392a)
> by adding "menu advertise" + "discoverable on" to the steps to duplicate
> the issue. And I still see the error:
>
> bluetoothd[14755]: src/device.c:btd_device_set_temporary() temporary 0
> bluetoothd[14755]: src/device.c:device_connect_le() Connection attempt
> to: DB:E3:2A:E8:90:C4
> bluetoothd[14755]: src/device.c:att_connect_cb() connect error:
> Transport endpoint is not connected (107)
>

I was having similar issues with getting btvirt working. I resolved my
issue by using btmgmt to set the virtual adapter I was trying to
connect to have "connectable on".

As you can see below, the two virtual adapters are created without
being connectable:

pi@raspberrypi:~ $ btmgmt info | grep -P "hci|current settings"
hci2: Primary controller
current settings: powered bondable ssp br/edr le secure-conn
hci1: Primary controller
current settings: powered bondable ssp br/edr le secure-conn
hci0: Primary controller
current settings: powered connectable bondable ssp br/edr le secure-conn
pi@raspberrypi:~ $ sudo btmgmt --index 1 connectable on
hci1 Set Connectable complete, settings: powered connectable bondable
ssp br/edr le secure-conn
pi@raspberrypi:~ $ btmgmt info | grep -P "hci|current settings"
hci2: Primary controller
current settings: powered bondable ssp br/edr le secure-conn
hci1: Primary controller
current settings: powered connectable bondable ssp br/edr le secure-conn
hci0: Primary controller
current settings: powered connectable bondable ssp br/edr le secure-conn

>
>>
>>>> [bluetooth]# advertise on
>>>> [CHG] Controller DB:E3:2A:E8:90:C4 SupportedInstances: 0x04
>>>> [CHG] Controller DB:E3:2A:E8:90:C4 ActiveInstances: 0x01
>>>> Advertising object registered
>>>>
>>>>
>>>> 3. Use './test/example-gatt-server' to simulate GATT server. I confirm
>>>> the server is started on DB:E3:2A:E8:90:C4 (first virtual controller)
>>>>
>>>> 4. Return to bluetoothctl to switch to second virtual controller and
>>>> connect to the first one
>>>>
>>>> [bluetooth]# select E3:01:36:88:4C:DE
>>>> Controller E3:01:36:88:4C:DE olivier-ThinkPad-T480 [default]
>>>>
>>>> [bluetooth]# power on
>>>> Changing power on succeeded
>>>> [CHG] Controller E3:01:36:88:4C:DE Powered: yes
>>>>
>>>> [bluetooth]# scan on
>>>> Discovery started
>>>> [CHG] Controller E3:01:36:88:4C:DE Discovering: yes
>>>> [NEW] Device DB:E3:2A:E8:90:C4
>>>> [bluetooth]# scan off
>>>> Discovery stopped
>>>> [CHG] Controller E3:01:36:88:4C:DE Discovering: no
>>>>
>>>> [bluetooth]# connect DB:E3:2A:E8:90:C4
>>>> Attempting to connect to DB:E3:2A:E8:90:C4
>>>> Failed to connect: org.bluez.Error.Failed
>>>> [CHG] Controller DB:E3:2A:E8:90:C4 Discoverable: no
>>>>
>>>>
>>>> And in the bluetoothd log:
>>>>
>>>> bluetoothd[15175]: src/adapter.c:start_discovery() sender :1.6483
>>>> bluetoothd[15175]: src/adapter.c:update_discovery_filter()
>>>> bluetoothd[15175]: src/adapter.c:discovery_filter_to_mgmt_cp()
>>>> bluetoothd[15175]: src/adapter.c:trigger_start_discovery()
>>>> bluetoothd[15175]: src/adapter.c:cancel_passive_scanning()
>>>> bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>>> bluetoothd[15175]: src/adapter.c:start_discovery_timeout()
>>>> adapter->current_discovery_filter == 0
>>>> bluetoothd[15175]: src/adapter.c:start_discovery_complete()
>>>> status 0x00
>>>> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>>> type 6 discovering 1 method 0
>>>> bluetoothd[15175]: src/adapter.c:device_found_callback() hci0
>>>> addr DB:E3:2A:E8:90:C4, rssi 0 flags 0x0000 eir_len 3
>>>> bluetoothd[15175]: src/device.c:device_set_legacy() legacy 0
>>>> bluetoothd[15175]: src/device.c:device_set_flags() flags 6
>>>> bluetoothd[15175]: src/adapter.c:stop_discovery() sender :1.6483
>>>> bluetoothd[15175]: src/adapter.c:stop_discovery_complete()
>>>> status 0x00
>>>> bluetoothd[15175]: src/adapter.c:trigger_passive_scanning()
>>>> bluetoothd[15175]: src/adapter.c:discovery_remove() owner :1.6483
>>>> bluetoothd[15175]: src/adapter.c:discovering_callback() hci0
>>>> type 6 discovering 0 method 0
>>>> bluetoothd[15175]: src/device.c:device_connect_le() Connection
>>>> attempt to: DB:E3:2A:E8:90:C4
>>>> bluetoothd[15175]: src/device.c:att_connect_cb() connect error:
>>>> Transport endpoint is not connected (107)
>>>>
>>>