There is special handling done for resolved addresses to convert
them to "regular" addresses for the upper layers.
This commits adds two helper functions to check if they are
resolved, and if so, then properly copied.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
We only expose random/public address types to the upper layers.
This is done by checking if the address type of events are
resolved addresses, and if so, then we translate them to
public/random.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Clear the `ATT_CONNECTED` flag when a channel is detached (could be after
an ATT timeout).
Also convert the assert checking it in `chan send` to an `if` test, since
the channel could be disconnected from a different thread than the one
triggering `chan_send`.
Fixes#53247.
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
ISO Synchronized Receiver only builds do not transmit and
hence may not have any tx buffers allocated in a
Controller, leaving bt_dev.le.acl_pkts semaphore
uninitialized or bt_conn_get_pkts() returning NULL.
Do not use the semaphore if no Tx buffers allocated in a
Controller.
Regression in commit ef19c64f1b ("Bluetooth: host: poll on
CTLR buffers instead of host TX queue").
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
The way that the braodcast clause for handling failing
ISO data path would end up in the __ASSERT. It has been
slightly modified to make it use if-else properly.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
The macro BT_CONN_INTERVAL_TO_MS was used a fair amount
of places, but it often was used with integers. This meant
that sometimes the resulting (integer) value would be
incorrect, as something like 7.5ms interval would not
be properly stored as a integer in millisecond units.
Adding BT_CONN_INTERVAL_TO_US allows users to still use
integers to store the result, but in a more accurate unit.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This fixes deadlock that happened waiting for meta data in system
workqueue.
The meta data always get freed in the system workqueue,
so if we're in the same workqueue but there are no immediate
contexts available, there's no chance we'll get one by waiting.
Fixes: #53455
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
The hci_le_setup_iso_data_path function required that if
the path->cc was set, the length could not be 0.
There is no reason why it should not be allowed to be 0
in that case.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Clean up occurrences of "#if IS_ENABLED(CONFIG_FOO)" an replace
with classical "#if defined(CONFIG_FOO)".
Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
Add logging of the fields in the sent and received pairing
requests and responses. This makes it easier to debug
why a pairing would be e.g. rejected, or simply to get
more insight in the resulting pairing.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
If CONFIG_BT_BREDR=y and bt_dev.le.acl_mtu == 0, then we
would report the bt_dev.br.mtu for ISO channels.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
If the bt_dev.le.iso_mtu was 0, then we would report
bt_dev.le.acl_mtu if CONFIG_BT_CONN=y (which is often true when
CONFIG_BT_ISO=y). Thus if the ISO MTU is 0, we would often
return a non-0 value.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
The address could have changed. The issue linked (and bsim test in previous
commit) shows a scenario where that could happen:
- we start scanning, host will use NRPA
- we start advertising, host will use identity address
- a device connects (as a central)
-> advertising resume fails for some unrelated reason
- another device connects (as a peripheral)
- the central device disconnects, we resume scanning
- the peripheral disconnects, the stack resumes advertising
-> but it mistakenly advertises using the NRPA set by the scanner
Fixes#52059 .
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
Only copy the data from the 'parent' buf into the segment buf if we
successfully acquired the HCI semaphore (ie there are available controller
buffers).
This way we avoid pulling and pushing back the data in the case where there
aren't any controller buffers available.
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
When there are no buffers, it doesn't make sense to repeatedly try to send
the host TX queue.
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
Make the ACL fragmentation asynchronous, freeing the TX thread for sending
commands when the ACL buffers are full.
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
bt_le_per_adv_set_data would not accept the ad to be NULL or
the ad_len to be 0, making it impossible to set no data (which
effectively clears existing data).
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Add the advertised length, and the actual length, in the log statement
so it is more clear what the issue is.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Added a new Kconfig option for the Bluetooth Host to allow
unauthenticated pairing attempts made by the peer where an
unauthenticated bond already exists on other local identity.
Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
The Bluetooth spec states that a K-frame exceeding the device's MPS
should trigger a disconnection of the channel.
Fixes two PTS tests that verify this behavior:
L2CAP/LE/CFC/BV-27-C
L2CAP/ECFC/BV-34-C
The current behavior is a silent truncation, which is not very nice for
the user, even if the spec would allow it.
Fixes#52228 and #51174.
Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
The `bluetooth/common/log.h` and `bluetooth/common/log.c` files have been
removed. Files that were using them have been updated to use
`zephyr/logging/log.h` instead.
Those replacement have been done consequently:
- `/BT_DBG/LOG_DBG/`
- `/BT_ERR/LOG_ERR/`
- `/BT_WARN/LOG_WRN/`
- `/BT_INFO/LOG_INF/`
- `/BT_HEXDUMP_DBG/LOG_HEXDUMP_DBG/`
- `/BT_DBG_OBJ_ID/LOG_DBG_OBJ_ID/`
Also, some files were relying on the `common/log.h` include to include
`zephyr/bluetooth/hci.h`, in those cases the include of `hci.h` has
been added.
For files that were including `common/log.h` but not using any logs,
the include has been removed and not replaced.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
Add the local advertising address to bt_le_ext_adv_get_info.
This may help with debugging, but is also needed to
properly support something like the BAP Broadcast Assistant.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Call the RPA expired callback on advertising sets even when they are
not enabled.
The RPA expired callback will now be called on advertising sets
when the BT_ADV_RPA_VALID flag is cleared for the set.
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
Fix RPA timeout expiration when BT_EXT_ADV has been enabled.
Always invalidate the device RPA on RPA timeout.
This RPA is used by the scan roles, and the advertiser that was started
using the bt_le_adv_start API.
Call the RPA expire callback only on advertising sets that are enabled
and not being limited by a timeout and not using the identity address.
On RPA timeout always invalidate the RPA of advertising sets that are
disabled.
Fixes: #51208Fixes: #51228Fixes: #51247
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
Rename BASS to BAP Scan Delegator and BASS Client
to BAP Broadcast Assistant. This is the first step towards
integrating the BASS with the rest of BAP.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
In file `subsys/bluetooth/mesh/net.c`:
renamed `loopback` to `net_loopback`.
In file `subsys/bluetooth/host/settings.c`:
Renamed `set` to `set_setting` and `commit` to `commit_settings`.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
If adv stop was called form connected callback,
it would continue and unref the wrong conn object
if there where 2 connectable advertisers running,
but with only one 1 id configured.
Fixes#52196
Signed-off-by: Martin Tverdal <martin.tverdal@nordicsemi.no>
After merging #51809, a few things were spotted that needed tweaking.
Among them:
- Rename the folder from bt_crypto to crypto, since the prefix is
unnecesary
- Remove the include folder
- Remove the path from the global include paths
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
Add to the cryptographic toolbox the h8 function, defined in the Bluetooth
Core Vol. 6, part E 1.1.1.
Also add test and SMP self test for this function. The data used for those
are from the Bluetooth Core.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
Move functions defined in the Cryptographic toolbox of the Bluetooth
specification inside their own files in the following folder:
`zephyr/subsys/bluetooth/bt_crypto`. The functions were previously
implemented in `zephyr/subsys/bluetooth/host/smp.c`.
The cryptographic toolbox functions can now be accessed from outside of the
host.
In addition to that, tests for each cryptographic toolbox functions have
been added.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
Instead of guarding all BT ISO data log statements with
CONFIG_BT_DEBUG_ISO_DATA, a new macro, BT_ISO_DATA_DBG, is
implemented to handle the guarding.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Guard additional debug statements in ISO that deals
with TX/RX with CONFIG_BT_DEBUG_ISO_DATA to avoid spamming
the log.
Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
bt_eatt_init currently registers a l2cap server, however should not
register a new one if it has already been registered - for example in
bt_enable previously.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
Init bt_workq in bt_enable so it can be safely disabled.
Cancel rpa_update work upon disable as it is no longer required.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
Add bt_pub_key_hci_disrupted function for when hci is disrupted during
a pub key hci command, to clear callbacks and BT_DEV_PUB_KEY_BUSY flag.
Call this from bt_disable for the case bt_disable disrupts the pub key
hci command.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
Reset disconnected handles as is no longer needed after disable.
Created a destroy function to clear all connection states and cancel any
deferred work.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
Reset the adv_pool in disable so that advertising can be started after
re-enabling without issue.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
In bt_att_init, bt_conn_init and bt_l2cap_init, init the fifos and
slists before use. This means that they can be used after disable
without memory leakage.
Signed-off-by: Sean Madigan <sean.madigan@nordicsemi.no>
Add implementation to retry the automatic peripheral
perferred connection parameter request with a configurable
retry countdown and retry back-off timeout.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
The bt_iso_chan contains vaild pointers for Tx and Rx QoS parameters.
This unifies the implementation between different roles.
This fixes checking ISO type that is done based on ISO type that
is kept inside of conn.
Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
Remove the `bt_hex`, `bt_addr_str`, `bt_addr_le_str` and `bt_uuid_str`
macros from `bt_str.h` as they were just aliases for the `*_real` functions
in the same file.
The functions has been renamed without the `_real` suffix.
Some files were using the functions and not the macros, they have been
updated to use the new name of the functions.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
Functions related to string manipulation that were defined in
`common/log.h` has been moved to the `common/bt_str.h` file and their
implementation in `common/bt_str.c`.
Files that were using those functions has been updated consequently.
Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
There were a bug in a prepare_cl_cte_rx_enable_cmd_params function.
The size of command buffer was wrong when CTE enabled in AoD mode.
The command buffer was extended by param->num_ant_ids, that was
zero in case of AoD. Then a dummy antenna switch pattern was copied
into the command buffer.
That lead to: memory overwrite, and wrong command buffer length.
The command was rejected by Controller.
To fix, use cp->switch_pattern_len that was already assigned with
correct antenna pattern length.
Signed-off-by: Piotr Pryga <piotr.pryga@nordicsemi.no>