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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Since 3a197934fc
main() should be int main(void) instead of void main(void)
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
Since 3a197934fc
main() should be int main(void) instead of void main(void)
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
Since 3a197934fc
main() should be int main(void) instead of void main(void)
Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
- 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>
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>
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>
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>
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>
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>
These changes were automated using coccinelle with the following
script:
@@
@@
- void
+ int
main(...) {
...
- return;
+ return 0;
...
}
Signed-off-by: Keith Packard <keithp@keithp.com>