Commit Graph

60 Commits

Author SHA1 Message Date
Jonathan Rico
c1baa8282d tests: Bluetooth: Add ATT sequential procedures test
The purpose of this test is to prove that the zephyr host can handle the
behavior described in the Bluetooth Core Specification Vol.3 Part.F
3.3.2 "Sequential protocol".

The host should be able to handle all of those in parallel: one
indication, one write request, multiple commands and multiple
notifications.

The "tester" part had to be written with a "tiny host" implementation
instead of the Zephyr host, as the ZH conflates GATT client and server
and doesn't allow a device to enqueue an ATT request + an ATT indication
on the same bearer.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-09-28 14:21:27 +03:00
Emil Gydesen
0f9f528214 tests: bsim: Bluetooth: ISO: Add host CIS tests
Add a simple central and peripheral CIS test that
exercises the ISO host API for unicast ISO (CIS).

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2023-09-28 13:12:19 +02:00
Théo Battrel
2e13802a38 Bluetooth: Test: Update security/ccc_update
Previous commit reverted the `link_encrypted` filed of CCC config.
Update the test to match the new expected behavior.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-09-28 09:21:57 +02:00
Théo Battrel
888a8c644c Bluetooth: Test: SC Indication
Test that SC Indication is correctly sent when the client reconnect and
the server updated the GATT database since last connection. Test that
the indication is sent even if the bond is not restored.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-09-28 09:21:57 +02:00
Alberto Escolar Piedras
03b601f0a9 tests BT privacy: Simplify a bit scripts
Reduce the unnecessary hidding and indirection,
as it makes the scripts more difficult to follow
for no benefit.
If somebody wants to debug these tests, they'll want
to see the sim_id, and won't benefit from going around
opening files needlessly.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-09-26 08:38:36 +02:00
Alberto Escolar Piedras
0ff2ba8c8e tests: BT privacy: Fix printf format
Fix the print format string so the "%" is printed
instead of a bogus value.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-09-25 19:48:15 +02:00
Théo Battrel
4e467a9bee Bluetooth: Test: Remove dead code
Remove unused code in `host/gatt/settings` test. The conditional block
could never be reached because the type of the discovery parameter is
`BT_GATT_DISCOVER_CHARACTERISTIC`.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-09-20 08:56:57 +02:00
Gerard Marull-Paretas
aaeb0a672e toolchain: only include <zephyr/toolchain.h>
It is wrong to use toolchain-specific header files.

Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com>
2023-09-15 09:27:30 +02:00
Donatien Garnier
185a6117c0 Bluetooth: Host: Amend existing L2CAP accept callbacks
This patch amends the existing L2CAP accept callbacks to use the new
accept signature that includes a pointer to the L2CAP server structure.

Signed-off-by: Donatien Garnier <donatien.garnier@blecon.net>
2023-09-14 14:36:34 +02:00
Gerard Marull-Paretas
691facc20f include: always use <> for Zephyr includes
Double quotes "" should only be used for local headers.

Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com>
2023-09-14 13:49:58 +02:00
Jonathan Rico
0f8b357d0a tests: Bluetooth: split id_addr_update test
Split FW into two images, one for central one for peripheral.

The SoftDevice controller's connection contexts are not role-agnostic:
some are reserved for the peripheral roles some for the central roles.

Splitting the test into two images is anyway "The right thing (TM)",
it's just that we sometimes take the shortcut of using a single image to
go faster.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-09-11 19:58:16 +02:00
Théo Battrel
95ac71893c Bluetooth: Test: Add tests to reproduce SMP issues
This test reproduce two issues, #59788 and #61465.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-09-06 09:35:01 +02:00
Kamil Piszczek
2f90ef488a bluetooth: tests: add bsim test for identity address update
Added a BabbleSim test to check the update of the destination address
of all active connections during the identity resolution operation.
All connection objects associated with the same private peer address
should convert it to the identity address.

Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
2023-09-04 18:41:48 +02:00
Tom Finet
4474860744 tests: fix bsim bt l2cap send_on_connect to fail on err < 0
bt_l2cap_chan_send returns the total bytes sent from the buf,
hence test should only fail when it returns a negative error code
and not a positive number of bytes sent.

Signed-off-by: Tom Finet <tom.codeninja@gmail.com>
2023-08-30 10:23:05 +02:00
Fabio Baltieri
a16f1cee4a bluetooth: host: fix few mismatched CONTAINER_OF
Fix a bunch of mismatched CONTAINER_OF, few missing
k_work_delayable_from_work conversions but also many
bt_l2cap_le_chan/bt_l2cap_chan and few others.

Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
2023-08-30 10:22:37 +02:00
Alberto Escolar Piedras
6d0aa678ef tests bsim ccc_store: Fix main return
Since 3a197934fc
main() should be int main(void) instead of void main(void)

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-08-09 16:09:47 +00:00
Alberto Escolar Piedras
c0e2b97948 tests bsim settings: Fix main return
Since 3a197934fc
main() should be int main(void) instead of void main(void)

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-08-09 16:09:47 +00:00
Alberto Escolar Piedras
f514ff887f tests bsim ccc_update: Fix main return
Since 3a197934fc
main() should be int main(void) instead of void main(void)

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-08-09 16:09:47 +00:00
Jonathan Rico
a7cf7eb393 Bluetooth: l2cap: change connected cb call condition for ECRED
This was recently refactored (in #58440). But it introduced a bug in which
some channels were connected but not the whole list asked for by the peer.

In that case, `result` will not be `SUCCESS` but we still want to call the
`connected` callback as the peer will consider those channels to be
connected when we send the response.

The symptom is that EATT channels are being instantiated, but not
considered connected (ie. usable by the stack).

Also introduce a test that has asymmetric channel resources (5 on central
vs 2 on peripheral) to reproduce the bug.

Fixes #60212

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-07-31 19:39:09 +00:00
Mateusz Kapala
8e5673ccd1 bluetooth: tests: Add bsim test for setting bondable flag per-conn
Added test for the bt_conn_set_bondable API function.
Check if we can pair without setting the bonding flag on the
per-connection basis if the device was already bonded on the
other identity.

Signed-off-by: Mateusz Kapala <mateusz.kapala@nordicsemi.no>
2023-07-07 14:55:29 +03:00
Théo Battrel
ac7cabf991 Bluetooth: Tests: Use the correct ad data size
The device privacy test was using the wrong value for the advertising
data.

To fix the error, the test now use the `BT_DATA_BYTES` macro to create
the `bt_data` structure.

Also use `BT_DATA_NAME_COMPLETE` instead of the raw value.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-07-07 09:17:56 +02:00
Jonathan Rico
8a65b3f337 tests: Bluetooth: don't assume handle is 0
Don't assume the connection handle will always be 0. This is currently the
case with the Zephyr link layer, but recently changed in the Softdevice
Controller.

Another problem is that apparently the spec allows the controller to just
blackhole data instead of returning `BT_HCI_ERR_UNKNOWN_CONN_ID` if the
host uses a wrong handle.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-06-21 16:07:05 +02:00
Jonathan Rico
931a089e2c Bluetooth: host: invalidate the RPA when starting legacy adv
This fixes the failure to use a resolvable private address in this
scenario.

1. call `bt_le_oob_get_local`, will generate and mark RPA as valid
2. start connectable adv w/ IDENTITY bit
3. start connectable adv w/o IDENTITY
4. RPA is not set (in `bt_id_set_private_addr`) because RPA
   is still marked as valid

When EXT_ADV is enabled and the controller supports it, a different code
path is taken that doesn't have this issue.

Unconditionally invalidating the RPA when starting advertising works around
this issue.

Fixes #56326

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-06-17 07:36:58 -04:00
Donatien Garnier
477dd86b78 Bluetooth: Host: Add sending L2CAP data from connection callback test
Add BabbleSim test to make sure data can be sent immediately upon
connection from the L2CAP channel connection callback

Signed-off-by: Donatien Garnier <donatien.garnier@blecon.net>
2023-06-17 07:33:11 -04:00
Théo Battrel
14200f82db Bluetooth: Tests: New bsim test for ID
Add a new BabbleSim test checking that the value of the Bluetooth
identity stored in the settings is correct.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-06-16 07:57:46 -04:00
Carles Cufi
22f73992b2 Bluetooth: Rework the HCI header set
In order to have clean, self-contained HCI headers that do not have any
dependencies towards the Host or any other part of the system (except
types), reorganize the headers in the following way:

- Split out the macros and structs from hci.h to a new hci_types.h
- Merge the existing hci_err.h into the new hci_types.h

Fixes #58214.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2023-06-12 06:20:24 -04:00
Théo Battrel
24ea25827c Bluetooth: Tests: Check CCC Update
Check that if a bonded peer subscribed to a CCC, a non-bonded peer with
the same address cannot update the CCC.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-06-08 04:10:58 -04:00
Théo Battrel
f5ff886260 Bluetooth: Tests: Remove usage of BT_DEBUG_LOG
Remove usage of Kconfig symbol `CONFIG_BT_DEBUG_LOG` from tests. It has
been deprecated since this PR:
https://github.com/zephyrproject-rtos/zephyr/pull/56183

The Kconfig symbols has been replaced by `CONFIG_LOG=y` on most of the
cases. Or it has been removed when not needed anymore.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-06-07 13:56:55 -04:00
Théo Battrel
cb48626399 Bluetooth: Test: Update ccc_store bsim test
Update `ccc_store` bsim test to remove the 'expected failure'. The issue
being fixed in the following commit.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-06-05 13:54:37 -04:00
Théo Battrel
f4ecc4e102 Bluetooth: Tests: Check CCC Store
The first test check that if a bonded peer subscribe to a CCC, this
change is correctly stored to flash.

The second test, which is currently failing, is included to reproduce a
bug that occur when CCC or CF store on write is disabled and the other
one is enabled, leading to the delayed store being enabled. Causing the
value of the corresponding `n` selected option to not be stored at all.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-06-01 14:58:39 +02:00
Aleksander Wasaznik
92fcd9ef40 Bluetooth: Host: Add L2CAP seg_recv API
This is an alternative API for the L2CAP receive functionality. It
allows an application the receive L2CAP segments directly and manage
credits explictly. The API is guarded by an experimental kconfig option.

Fixes: https://github.com/zephyrproject-rtos/zephyr/issues/57485

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2023-05-24 13:15:14 -04:00
Nithin Ramesh Myliattil
8d6b206064 subsys/bluetooth/host: Make rpa same for adv sets with same id
Add check to see if RPA is already generated for adv sets
with same id. If generated use the same address for all adv sets
with same id else create new RPA.

Signed-off-by: Nithin Ramesh Myliattil <niym@demant.com>
2023-05-11 08:31:24 +00:00
Kumar Gala
340ed20c12 samples, tests: cleanup void main usage.
Some samples, tests got missed in the switch from void main() to
int main().  Cleanup those samples/tests to use int main().

Signed-off-by: Kumar Gala <kumar.gala@intel.com>
2023-04-28 20:39:14 +02:00
Alberto Escolar Piedras
e1fabfa9a4 bsim: cmake: Remove unnecessary references to environment
These variables are now provided by the FindBabbleSim
cmake module, which finds them in the environment or thru
west.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-04-28 20:38:48 +02:00
Alberto Escolar Piedras
1bcffb2a45 tests bsim: Do not check for the simulator in apps cmake files
Let the board check for it instead, as it now does it
smarter and can try to find it using west if it was
fetched with the Zephyr manifest.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-04-28 13:57:21 +02:00
Jonathan Rico
3b0fd2906f tests: Bluetooth: build host/adv/resume without BT_CENTRAL
For the second test (test_2):
Build the DUT image without BT_CENTRAL.

The Softdevice Controller uses different memory pools for the central &
peripheral roles. In the configuration where BT_CENTRAL=y, BT_PERIPHERAL=y
and BT_MAX_CONN=2, the SDC will only have room for one central and one
peripheral role.

The test then won't pass as it expects the controller to have room for two
peripheral connections, and the SDC ends up with only one.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-28 10:31:56 +02:00
Jonathan Rico
c0ca7734c2 tests: Bluetooth: change host/adv/resume scan params
When running with the Softdevice Controller, the controller's scheduling
results in missing all of the advertising packets.

This only happens with this particular configuration (scan & adv params,
multirole device).

Use a smaller scan window & interval to work around that (test IUT is not
controller implementation, rather the host).

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-28 10:31:56 +02:00
Jonathan Rico
249741b6c4 tests: Bluetooth: change ifdef in host/adv/periodic
The host APIs shouldn't be gated by controller ifdefs.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 20:07:14 +02:00
Jonathan Rico
1bf036536b tests: Bluetooth: remove sleeps from host/att/eatt/reconfigure
Since the test didn't get deleted after #55976 as expected, use
backchannels to sync both sides instead of finicky sleeps.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 20:06:55 +02:00
Jonathan Rico
2809bace65 Bluetooth: host: l2cap: send only 1 credit
The API doesn't allow the stack to make any guarantees about the number of
available buffers that the app has.

Only send 1 credit at a time, as that is the only guarantee the stack can
give to the peer.

We can send MTU/MPS's worth of credits once we have acquired an SDU buffer
from the application (that is, on the first PDU of the SDU). Though we
still have to cap that to the buffer size we have just acquired.

------

The testcase added here shows a scenario where the relationship
between the number of credits and the number of available buffers does not
hold true any more:

In this test, the app only has one buffer in its pool.

The central will queue SDUs that are bigger than the stack's
buffers (so the user allocator is necessary) but lower than the
channel's MTU.

The device receiving the SDU keeps a reference to the buffer before
returning from the `recv` callback. It releases that reference after a
small delay.

The central will still have credits, so it will queue another SDU, but the
peripheral will not be able to receive the next SDU (as the allocator will
fail) and will close the channel.

To see the test fail, just revert the `l2cap.{c,h}` changes.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 13:53:08 +02:00
Jonathan Rico
68355349f6 tests: Bluetooth: make l2cap stress test fail
Running with a higher SDU length makes the devices get stuck at the start
of the transfer. To be fixed by next commits.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 13:53:08 +02:00
Jonathan Rico
3b97d8f181 tests: Bluetooth: refactor l2cap stress test
- move all the context for a channel in its own custom struct
- allow -EAGAIN when sending, try sending again later

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 13:53:08 +02:00
Jonathan Rico
bb9f7b3293 tests: Bluetooth: add l2cap MPS test
This test verifies the l2cap MPS workaround: when the other
side (non-zephyr host) sends PDUs that are < MPS.

The DUT is a host, while the Tester is a thin layer over the controller,
allowing fine control over l2cap packet contents.

Note that this test fails as-is. It is fixed by the next commits in the PR.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-26 13:53:08 +02:00
Aleksander Wasaznik
f90a70d003 Bluetooth: Host: Test GATT read buffer size
This test ensures the data from a charachteristic read callback is not
truncated anywhere. This test illuminates an existing failure, so it's
failing in this commit. The fix is in the same PR.

The test comes with an experimental "library" with easy-to-use
wrappers/utilities for Bluetooth API. The library starts its life in the
directory of the test, but it will be moved outwards when more tests
start using it. It is designed to not interfere with other users of the
Bluetooth API. The library does work just as well on real hardware,
outside of BabbleSim, so it can be used for target tests and
proof-of-concept applications.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2023-04-24 13:31:18 +02:00
Alberto Escolar Piedras
f0a6205831 tests/bsim: Clarify the compile scripts descriptions
And add an again an extra file for the top level.
(It was removed when the CI workflows for network and BT
were split, but the common script is still usefull).

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2023-04-20 10:51:58 +02:00
Martí Bolívar
26d3157ed4 apps: misc void main -> int main fixes
Fix some additional cases in in-tree applications (samples and tests).

Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
2023-04-18 05:45:36 -07:00
Jonathan Rico
6857755292 tests: Bluetooth: fix privacy/device test case
Fixes two problems:

1. bad argument type, leading to wrong test vector values

2. The central side was not verifying the type of the scan report. When
running with a different controller, it was then too quick to stop the
scanner, before the peripheral had received a scan request.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-17 10:16:31 +02:00
Théo Battrel
c700adafaf Bluetooth: Tests: Add bsim test for EAD sample
Add a new BabbleSim test that run the encrypted advertising sample and
check that the exchanged key material and data are correct.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2023-04-17 10:15:04 +02:00
Jonathan Rico
1588eaa2a4 tests: Bluetooth: move host/gatt/write bsim test to ll
The pass criteria for the test very much depends on the controller's
implementation.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2023-04-14 14:04:05 +02:00
Keith Packard
5681f942a8 tests/bsim: Switch main return type from void to int
These changes were automated using coccinelle with the following
script:

@@
@@
- void
+ int
main(...) {
    ...
-	return;
+	return 0;
    ...
}

Signed-off-by: Keith Packard <keithp@keithp.com>
2023-04-14 07:49:41 +09:00