Commit Graph

2182 Commits

Author SHA1 Message Date
Vinayak Kariappa Chettimada
8888681aa8 Bluetooth: Remove deprecated BT_WHITELIST KConfig option
Remove the deprecated BT_WHITELIST Kconfig option. Also,
remove a mention of the deleted bt_conn_create_auto_le API.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-05-23 10:45:44 +02:00
Marek Pieta
903672c394 bluetooth: att: Fix L2CAP channel section order
The L2CAP channel section is sorted lexicographically. Make sure
that ATT fixed channel will be placed as the last one to ensure
that SMP channel is properly initialized before bt_att_connected
tries to send security request.

Fixes #45820

Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
2022-05-20 12:43:16 +02:00
Herman Berget
e3ed783359 Bluetooth: Host: Fix missing callback in bt_gatt_write_without_response
The meta data was not set on the buffer.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-17 11:39:26 +02:00
Asbjørn Sæbø
bf361aff21 Bluetooth: Gatt: Replace callback in gatt subscription callback.
Add a "subscribe" callback in the bt_gatt_subscribe params, and
deprecate the "write" callback.

The purpose of this is to be able to return the subscription
parameters in the callback.  The write callback
- (in principle) returns write parameters
- in fact returns nothing - the pointer is set to NULL

Signed-off-by: Asbjørn Sæbø <asbjorn.sabo@nordicsemi.no>
2022-05-16 16:54:27 +02:00
Emil Gydesen
bcfb4df390 Bluetooth: ISO: Modify and add more debug for setup iso data path
Modify the function slightly to take a different
argument, and add more debugging to the function.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-15 21:32:19 +02:00
Emil Gydesen
f67e12ae8e Bluetooth: ISO: Add check for can_send in bt_iso_chan_send
Ensure that we don't attempt to send any data to the
controller if `can_send` is not set, and return an
error code to the application instead.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-15 21:32:19 +02:00
Emil Gydesen
24e38e90db Bluetooth: ISO: Use can_send, can_recv when setting up data paths
Besides checking for the rx/tx pointer, we now also validate
the can_send and can_recv values to ensure that we do
not setup a useless data path.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-15 21:32:19 +02:00
Emil Gydesen
2660c17c31 Bluetooth: ISO: Set can_send/can_recv for broadcast channels
Set the can_send to true and can_recv to false for broadcaster.
Set the can_send to false and can_recv to true for the sync
receiver.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-15 21:32:19 +02:00
Emil Gydesen
b88b25adac Bluetooth: ISO: Extract and store information about RX and TX
Instead of relying only on the `tx` and `rx` qos pointers,
we extract further information from the
bt_hci_evt_le_cis_established event to properly determine if we
can actually send or receive data.

This is useful to help determine which data paths to setup,
and whether to reject requests to send.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-15 21:32:19 +02:00
Emil Gydesen
75bc421664 Bluetooth: ISO: Change some functions to static
There were a few local functions that were not
defined as static even though they could.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-13 12:44:47 -07:00
Emil Gydesen
4e557d71cc Bluetooth: ISO: Move functions around to reduce number of guards
Move a few unicast functions around so that we reduce the number
of #if defined guards. No code has changed, but a single
prototype has been added.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-13 12:44:47 -07:00
Emil Gydesen
3f247b212b Bluetooth: ISO: Add Kconfig for ISO central/peripheral
Add two new Kconfigs: BT_ISO_CENTRAL and BT_ISO_PERIPHERAL
that is used to do central or peripheral only builds,
similar to the BT_CENTRAL or BT_PERIPHERAL Kconfigs.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-05-13 12:44:47 -07:00
Herman Berget
874ef53b17 Bluetooth: Host: Assert that all channels in request have the same PSM
The PSM of the first channel in the connection request is used, but the
PSM value is used for all of them on the receiving side.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-10 18:40:36 +02:00
Herman Berget
1069d5fe56 Bluetooth: Host: Fix L2CAP collision mitigation
There were some errors in the detection of ECRED connection collisions,
so the retry was triggered incorrectly.

The number of channels requested in the retry was wrong in some cases,
using the number of channels from the received request instead of the
sent request.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-10 18:40:36 +02:00
Gerard Marull-Paretas
5113c1418d subsystems: migrate includes to <zephyr/...>
In order to bring consistency in-tree, migrate all subsystems code to
the new prefix <zephyr/...>. Note that the conversion has been scripted,
refer to zephyrproject-rtos#45388 for more details.

Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
2022-05-09 12:07:35 +02:00
Morten Priess
9d4368251e Bluetooth: host: Set ISO type for CIS at request
Set BT_ISO_CHAN_TYPE_CONNECTED as type for connected ISO at CIS_REQ.

Signed-off-by: Morten Priess <mtpr@oticon.com>
2022-05-06 11:32:30 +02:00
Herman Berget
5b0deb058b Bluetooth: Host: Remove unused nfy_mult_data
After adding the more general ATT meta data, it is no longer used.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-05 14:42:38 -05:00
Mariusz Skamra
e6b73b08e6 Bluetooth: gatt: Update bt_gatt_is_subscribed documentation
This updates the documentation of bt_gatt_is_subscribed function that
can take a bitfield of BT_GATT_CCC_NOTIFY and BT_GATT_CCC_INDICATE.
This might be useful if one wants to test if peer is subscribed, but
does not matter which method was used.

The gatt.c implementation handles API usage already, because it performs
bitwise AND:
if (bt_conn_is_peer_addr_le(conn, cfg->id, &cfg->peer) &&
    (ccc_value & ccc->cfg[i].value)) {
	return true;
}

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2022-05-04 18:56:36 -04:00
Herman Berget
d8357a2216 Bluetooth: Host: Add testing function bt_eatt_reconfigure
The function sends L2CAP reconfigure requests to reconfigure all
connected EATT channels.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-04 10:35:31 +03:00
Herman Berget
addc4a90f0 Bluetooth: Host: Call att_mtu_updated callback on channel reconfigured
Previously, the att_mtu_updated callback was only called on initial
connection of the channel or during the MTU Exchange procedure. There
was no way for the application to know that the MTU increased in the
case where the peer initiated the reconfiguration.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-05-04 10:35:31 +03:00
Aleksandr Khromykh
0aa0913ca5 Bluetooth: Host: fix aes ccm authentication
Bluetooth Host calculated authentication value correctly only
for data smaller than 255 bytes. If data is larger then
authentication transformation used wrong flags.
Since the issue was symmetric two Zephyr
based devices were able to understand each other. Hence,
other devices like Android or IOS smartphones weren't able
to authenticate large frames and broke communication.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2022-05-03 09:37:17 +02:00
Lingao Meng
2ef96e2f66 Bluetooth: Host: Fix unable cleanup conn
The peripheral is configured to update the connection
parameters for 5 seconds by default.

There is an abnormal situation with a very low probability.

The central actively disconnects or abnormally disconnects the
Bluetooth connection at the same time.

At this time, the connection disconnection event will be
handled by BT RX.

At this time, sysworkq has sent a parameter update request and
will receive a reply with status = 0x02, because the handle is
invalid at this time.

We can not just cancel work, because work->flag may be
in K_WORK_RUNNING, so work->flag is set to K_WORK_CANCELING
and subsequent conn_cleanup will unable call k_work_rescheduler
successfully.

According submit_to_queue_locked will return ret = -EBUSY.

	if (flag_test(&work->flags, K_WORK_CANCELING_BIT)) {
		/* Disallowed */
		ret = -EBUSY;
As a result, the connection cannot be cleanup correctly.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-04-29 15:35:10 +02:00
Emil Gydesen
c972ffddac Bluetooth: ISO: Add additional information for ISO streams
Add all information from the ISO established events
and provide the information in the get_info function.

The use cases of each field heavily depends on what
the ISO streams are used for.

Most, if not all, of the field can be used by the
higher layers to improve quality and/or reliability
of e.g. audio streams that use ISO.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-04-26 11:35:45 +02:00
Herman Berget
c8b2279f89 Bluetooth: Host: Make tx complete callback work for EATT channels
Previously, if a callback was set for notifications, they would always be
sent over unenhanced ATT.

The nfy_mult_data was bigger than the buffer user_data and we were this
overflowing the buffer when setting the tx callback user_data. Now the
data is stored separately and only a pointer to it is added to the
buffer user_data.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-24 19:46:41 +02:00
Herman Berget
cf3832f0bf Bluetooth: Host: Add support for tx complete callback for ECRED channels
Previously callbacks were only supported on unenhanced channels.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-24 19:46:41 +02:00
Aleksander Wasaznik
8e5c177233 Bluetooth: Host: Validate IRK ID in range
Validate `id` so that `bt_dev.irk[id]` cannot result in an out-of-bounds
access.

This fixes coverity report 239569.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2022-04-22 10:24:43 -05:00
Emil Gydesen
102a6210bb Bluetooth: Kconfig: Increase TX stack size for BT_CTLR && BT_LL_SW_SPLIT
Increase the default TX stack size for BT_CTLR && BT_LL_SW_SPLIT,
as we have seen applications/samples nearing and even reaching
the stack size, causing stack overflows. This is especially
true if CONFIG_FPU=y which takes 96 bytes of the TX stack.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-04-22 09:43:12 +02:00
Herman Berget
0916eba4ad Bluetooth: Host: Send the "Out of Sync" error only once on each channel
The "Database Out Of Sync" error response shall only be sent once on
each channel after a client becomes change-unaware.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-20 16:10:46 +02:00
Herman Berget
1732ec061b Bluetooth: Host: Add CF_DB_HASH_READ flag
This fixes the case where the client reads the DB hash without reading
another attribute first after becoming change-unaware.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-20 16:10:46 +02:00
Jordan Yates
855f4b9c96 Bluetooth: hci: correct ext adv cmd definition
Update the definition of the set extended advertising data command to be
a variable array instead of hardcoded to the maximum length. This
conforms to the definition from the Bluetooth specification and allows
the corresponding code to be slightly cleaner.

Signed-off-by: Jordan Yates <jordan.yates@data61.csiro.au>
2022-04-20 15:49:54 +02:00
Herman Berget
97d64cf104 Bluetooth: Host: Fix assert in L2CAP ECRED connection response
In the case that the peer responds with fewer dcid values than the
number of scid values in the connection request, we would assert or read
past the end of the buffer.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-13 13:40:00 -07:00
Szymon Janc
31b148ab64 Bluetooth: host: Fix crash in bt_l2cap_chan_recv_complete
It is possible that LE CoC channel is in disconnecting state (eg due
to peer sending too many packets) but application is not yet aware
of this (ie disconnected callback was not called) and thus may call
bt_l2cap_chan_recv_complete() to return credits. In this case it
leads to assert in l2cap_chan_send_credits.

It looks like PTS 8.2.1 is able to trigger this scenario when
executing L2CAP/ECFC/BI-02-C test.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2022-04-13 13:29:12 -07:00
Carles Cufi
070c93f0d7 Bluetooth: host: Invert the logic to re-trigger the RX work queue
In order for the code to be more understandable, invert the logic to
decide when to re-trigger the RX work queue and document the approach.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2022-04-12 09:53:33 +02:00
Carles Cufi
ca54a4201c Bluetooth: host: Use a linked list instead of a FIFO as the RX queue
There is no need to use a k_fifo object to queue the items that are
passed to bt_recv() now that we are using a work queue instead of a
thread, since there is no need for blocking on the actual queue, instead
relying on the fact that work is triggered to know that an item is ready
for processing.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2022-04-12 09:53:33 +02:00
Lingao Meng
37e561f42e Bluetooth: Host: Add choice select whether BT RX
Change CONFIG_BT_RECV_IS_RX_THREAD into a
choice:CONFIG_BT_RECV_CONTEXT with the following options
(names can be discussed further of course):

    CONFIG_BT_RECV_BLOCKING
    CONFIG_BT_RECV_WORKQ_BT
    CONFIG_BT_RECV_WORKQ_SYS

This way users would be able to choose what to run most of
the BLE stack on, they wouldn't be forced to a single model.

We would default to CONFIG_BT_RECV_BLOCKING so that we wouldn't
need to change the system workqueue stack size by default, instead
asking users to do so if they select the CONFIG_BT_RECV_WORKQ_SYS option

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-04-11 10:58:09 +02:00
Alexandru Carbuneanu
f3444ce00b Bluetooth: Host: Check encryption level for EATT channels
Check the encription level before sending on EATT.

Signed-off-by: Alexandru Carbuneanu <alexandru.carbuneanu@nordicsemi.no>
2022-04-08 09:30:45 +02:00
Jonathan Rico
ef2e31a686 Bluetooth: host: Prevent null pointer dereference
bt_le_lim_adv_cancel_timeout(adv) de-references adv.
Reported by https://github.com/zephyrproject-rtos/zephyr/issues/44480.

Signed-off-by: Jonathan Rico <jonathan.rico@nordicsemi.no>
2022-04-07 13:18:02 +02:00
Herman Berget
60d42966e8 Bluetooth: Host: Update change-aware requirements for Bluetooth 5.3
Core spec version 5.2 introduced EATT, and multiple ATT channels on one
connection is now possible. The requirements for when a client
becomes change-aware were updated to reflect this.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-07 09:38:26 +02:00
Mariusz Skamra
db59647c0a Bluetooth: has: Add initial Hearing Access Service client
This adds initial support for Hearing Access Service client. The client
performs GATT discovery to find and read HAS related characteristics and
subscribe for characteristic value notifications/indications.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2022-04-07 09:37:53 +02:00
Lingao Meng
97a0151004 Bluetooth: Host: Fix bt_recv_thread_id assignment
The above mentioned fix attempts to detect the situation when
bt_att_req_alloc() is invoked on the same thread that runs
att_handle_rsp. It attempts to do so by noting the thread that
first ran bt_recv, assuming the same thread will house all calls
to bt_att_req_free. This turns out not to be correct. It is
evident from the call stack provided below that bt_att_req_free
can be called from other threads than the one that runs bt_recv.

Fixes: #43448

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-04-07 09:37:45 +02:00
Lingao Meng
502ca3b788 Bluetooth: host: Move to l2cap_internal.h
BR_CHAN should be moved to l2cap_internal.h instead of redefining it.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-04-07 09:37:12 +02:00
Lingao Meng
20ff55e234 Bluetooth: host: Optimize L2CAP resource usage
Making sure struct bt_l2cap_chan has absolutely no members related
to dynamic channels.

That way we ensure that there is no overhead for a build where only
fixed channels are used.

It's not enough that the dynamic channel-related members are put behind
ifdefs - they should be completely moved out from the struct definition.

Furthermore, the public l2cap.h header file already has a struct
that's meant to be used for dynamic channels: struct bt_l2cap_le_chan!

However, currently dynamic channel support is a mess - it's a mix
between these two structs. The bt_l2cap_le_chan struct should really
be an extension of the bt_l2cap_chan struct, i.e. the former should
contain as a member the latter.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2022-04-07 09:37:12 +02:00
Emil Gydesen
04cfb06875 Bluetooth: ISO: Add ISO recv timestamp flag
Add a flag that is set when the timestamp is supplied
by the controller when receiving ISO packets.

Previously we used 0 to indicate this, but a timestamp
value of 0 is a valid value, and should not be used
to indicate that it is not present.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-04-06 11:00:10 +02:00
Emil Gydesen
ffedee6e39 Bluetooth: ISO: Change ISO recv flags to bitfield
Change the receive flags in the struct bt_iso_recv_info
to a bitfield instead of a single value. This will allow
us to extend the flags with more options.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2022-04-06 11:00:10 +02:00
Herman Berget
101a9a7525 Bluetooth: Host: Automatically create EATT channels on connection
If the Kconfig BT_EATT_AUTO_CONNECT is enabled (on by default), the
host will try to connect BT_EATT_MAX EATT channels when a connection
to a peer is established.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-04 14:22:22 +02:00
Herman Berget
40237f3e99 Bluetooth: Host: Make bt_eatt_count public
bt_eatt_count returns the number of EATT channels connected for a given
connection.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-04 14:22:22 +02:00
Herman Berget
a4a6e7a042 Bluetooth: Host: Make bt_eatt_connect connect up to BT_EATT_MAX channels
bt_eatt_connect may now send multiple credit based connection requests.
Previously it would only send one and thus only allow 5 EATT channels to
be connected.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-04 14:22:22 +02:00
Herman Berget
4750d9621f Bluetooth: Host: Cancel EATT connection work in att_reset
When att->conn is set to NULL in att_reset, EATT connection will fail.

Signed-off-by: Herman Berget <herman.berget@nordicsemi.no>
2022-04-04 14:22:22 +02:00
Vinayak Kariappa Chettimada
992d133b42 Bluetooth: Increase supported maximum simultaneous connection to 250
Increase the supported maximum simultaneous connection to
250, tested under BabbleSim simulations.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2022-04-04 10:24:34 +02:00
Carles Cufi
65a2e4b760 Bluetooth: host: Clear the supported commands list when disabling
Whenever we disable Bluetooth we need to  clear the supported commands
array, because there are several functions that check whether a
controller is ready to receive a particular command by testing a bit on
that bitfield.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2022-04-01 11:21:51 +02:00