Commit Graph

336 Commits

Author SHA1 Message Date
Torsten Rasmussen
9a2be89557 kconfig: bluetooth: experimental settings now uses select EXPERIMENTAL
With the introduction of `EXPERIMENTAL` and `WARN_EXPERIMENTAL` in
Zephyr all subsys/bluetooth and drivers/bluetooth/hci settings having
`[EXPERIMENTAL]` in their prompt has has been updated to include
`select EXPERIMENTAL` so that developers can enable warnings when
experimental features are enabled.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
2021-10-22 13:59:21 +02:00
Trond Einar Snekvik
cd89f42393 Bluetooth: Mesh: Model extensions walk stops before last model
When reaching the last model in the circular extension linked list, the
walker would abandon the walk before checking the last model. This makes
us skip models when checking the subscription list, potentially causing
incoming messages to be wrongfully ignored.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-10-04 20:45:23 -04:00
Szymon Janc
088fac76ed Bluetooth: Mesh: Fix crash on disconnect
bt_mesh_proxy_role_setup() is called conditionally when peer is
connected and gatt_disconnected() is always called. This leads
to unbalance in role->conn reference count and crash.

Instead of hot-fixing this in gatt_disconnected(), this commit adds
proper bt_mesh_proxy_role_cleanup() API that is called by roles
implementations if cleanup is needed.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2021-10-04 18:52:08 +02:00
Ingar Kulbrandstad
c1e053c9b3 Bluetooth: Mesh: Missed IV update cannot be captured
It seems that if the IV update is missed, a node cannot
recover it until the IV index has increased to a value
greater than Node's Last known IV + 1.

Signed-off-by: Ingar Kulbrandstad <ingar.kulbrandstad@nordicsemi.no>
2021-10-04 08:37:43 -04:00
Aleksandr Khromykh
797c17436b Bluetooth: Mesh: logging public key in big endian
Local public key has been logged in little endian but
remote public key in big endian. That has been changed.
Both are logged in big endian to be able to compare in logs.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2021-09-29 15:34:13 -04:00
Aleksandr Khromykh
ebf9a591d6 Bluetooth: Mesh: split debug for prov and prov_device
Debug configuration for prov and prov_device has been split
since prov general modul and it is used for provisioner as well.
It is not necessary to enable prov_device debugging
to debug provisioner.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2021-09-29 15:34:13 -04:00
Lingao Meng
5ddbdcedd0 Bluetooth: Mesh: Move proxy message size to kconfig
Add `BT_MESH_PROXY_MSG_LEN` to config proxy message length

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
4fcf549607 Bluetooth: Mesh: Use common buf size for all conn
Use common buffer size for all bluetooth mesh connection.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
355b18c43e Bluetooth: Mesh: Add seperate config for pb-gatt dev name
Add seperate config to control whether device name include in
pb-gatt advertising scan response data.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
3f68692069 Bluetooth: Mesh: Reflact disconnect logic to separate roles
remove section ordering to use code more readable.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
22b234cf03 Bluetooth: Mesh: Move bt_mesh_proxy_role to proxy_msg.c
Mesh bt_mesh_proxy_role structure to proxy_msg.c

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
bc1d6580dc Bluetooth: Mesh: Move proxy complete message to seperate role
Move proxy complete message to seperate role.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
d831d8a7d3 Bluetooth: Mesh: Move command buffer to proxy_msg.c
Move command buffer alloc to proxy_msg.c.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
a88aac2a7f Bluetooth: Mesh: Remove unnecessary prov buf get function
Remove `bt_mesh_pb_gatt_get_buf`.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
c057a69a2c Bluetooth: Mesh: Rename bt_mesh_pb_gatt<*> function
Rename bt_mesh_pb_gatt_<*> function, and split from proxy.h

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
b2889903a3 Bluetooth: Mesh: Split gatt services to pb-gatt and proxy
Split gatt services to pb-gatt-srv and proxy-srv.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Lingao Meng
412e7da951 Bluetooth: Mesh: Delete bt_mesh_proxy_prov_disable parameter.
we will no longer need the additional `disconnect` parameter,
such as we only process gatt database from disconnect handler.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-28 19:57:15 -04:00
Aleksandr Khromykh
6f2516d9a7 Bluetooth: Mesh: Refactoring provisioning to make all OOB auth working
The current implementation has hidden dependencies that break
OOB authentication if provisioner does not have the configured
input or output fields used for device capabilities.
It didn't allow to pass several OOB authentication cases.
After refactoring provisioner behavior is independent to
provisionee settings.

Signed-off-by: Aleksandr Khromykh <aleksandr.khromykh@nordicsemi.no>
2021-09-28 19:54:00 -04:00
Pavel Vasilyev
e40998a4e4 Bluetooth: Mesh: Return ETIMEDOUT if k_sem_take call times out
EAGAIN is used in some other places in the code, e.g. if node is not
provisioned when a model tries to send a message. This change helps to
differentiated if the acknowledged message timed out from other failers.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2021-09-28 11:49:27 +02:00
Carles Cufi
6de4747979 Bluetooth: Update terms in public API to spec v5.3
The Bluetooth Core Specification, version 5.3, has introduced multiple
changes to several widely-used terms in order to make them inclusive.
Update the public API to reflect this, excluding hci.h, which will be
done in a subsequent commit.

Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
2021-09-15 14:02:50 +03:00
Trond Einar Snekvik
035d877967 Bluetooth: Mesh: Inclusive terminology
Implements the Bluetooth appropriate language mapping for the Bluetooth
mesh subsystem.

Changes the following terms:

- Master security credentials -> Flooding security credentials
- Whitelist filter -> Accept filter
- Blacklist filter -> Reject filter
- Removes CDB's NODE_BLACKLISTED, which was not in use.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-09-14 19:30:18 +02:00
Michał Narajowski
88b60f31c7 Bluetooth: Mesh: Verify if Remote confirmation is not identical
MESH/PVNR/PROV/BI-18-C verifies that the IUT rejects invalid
Confirmation Value.

Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
2021-09-13 11:56:52 -04:00
Michał Narajowski
343c0bd2d3 Bluetooth: Mesh: Check if app key is bound in Model Publication Set
Th Configuration Server should respond with and Invalid AppKey Index
status code when the AppKey identified by AppKeyIndex is not known to
the node or is not bound to the model identified by the ModelIdentifier.

Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
2021-09-07 11:32:16 -04:00
Lingao Meng
ecc7ca1b69 Bluetooth: Mesh: Fix friend buf send end not called.
As frnd->last will keep reference, so that net buffer
destructor function will not be call.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-06 08:42:05 -04:00
Lingao Meng
790ec89048 Bluetooth: Mesh: Fix missing destructor function
Zephyr Bluetooth Mesh move adv send cb to buf destructor
callback, There are two net_buf_pool define, one to adv.c
and ore to friend.c, we are missing destructor in friend.c.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-09-03 06:32:08 -04:00
Michał Narajowski
f51cf9ab86 Bluetooth: mesh: Fail provisioning when RFU values are used
When Public Key field is set to RFU value then we should send
Provisioning Fail with Invalid Format error.

Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
2021-09-02 19:38:52 -04:00
Trond Einar Snekvik
c5757ca4a1 Bluetooth: Mesh: Initialize UUID in shell's mod_pub_set
PR #35774 introduced a uuid field in the bt_mesh_cfg_mod_pub structure.
The shell does not initialize this pointer before passing it to the
access layer. Add a line to initialize this pointer.

Fixes #38016.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-08-31 11:03:06 -04:00
Trond Einar Snekvik
4eb047d1af Bluetooth: Mesh: Remove lpn timeout param check
param can never be NULL here, so the check is redundant. Coverity is
complaining because param is accessed before the NULL check.

Fixes #37949.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-08-31 11:03:06 -04:00
Trond Einar Snekvik
fd6f51c410 Bluetooth: Mesh: Remove krp param check
param can never be NULL, so this check is redundant. Coverity complains
about this, as the param variable is accessed before the check, which
would be wrong if param could be NULL.

Fixes #37948.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-08-31 11:03:06 -04:00
Pavel Vasilyev
cd294c12c3 tests: Bluetooth: Mesh: Verify that all stored mesh entries removed
This ensures that all mesh settings were removed from persistent storage
after node reset.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2021-08-26 14:04:38 -04:00
Trond Einar Snekvik
69fcaaa592 Bluetooth: Mesh: Use separate net_bufs for bt_mesh_app_decrypt in friend
unseg_app_sdu_decrypt decrypts messages in place using a single net_buf.
While this is safe in terms of data access, the buffer state is
manipulated with the assumption that they're two different buffers, and
the output buffer's length field is increased at the end. When
assertions are enabled and the pdu length is 11 or 12 bytes, this
triggers the net_buf length assert, as the decrypt function attempts to
add the pdu length to the out buffer, with the assumption that it was
reset before decryption was started.

Create a separate output buffer with len = 0 to avoid triggering the
assert. Improve readability of the unseg_app_sdu functions to highlight
the need for the additional buffer.

Fixes #37519.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-08-20 12:49:28 +02:00
Lingao Meng
4a8a1577ef Bluetooth: Mesh: Redefine callback registration
There is a problem with the previous method, that is,
we use the same label(bt_mesh_subnet_cb_subnet_evt) and
put it in the same section, which is not friendly for debugging.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-08-20 06:28:12 -04:00
Omkar Kulkarni
f868ca3497 bluetooth: mesh: Fix IVU duration counter update
When device is first provisioned with IV Update
flag is set to 0, it should wait for minimum of
96 hours before going into IV Update In Progress
state. Such limit does not apply, if device is
provisioned with IV Update flag is set to 1.

Signed-off-by: Omkar Kulkarni <omkar.kulkarni@nordicsemi.no>
2021-08-19 10:19:43 -04:00
Pavel Vasilyev
0e9d668970 Bluetooth: Mesh: Add API to discard subscription in vendor model
This commit adds missing API that allows to discard the Subscription
List of a vendor model.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2021-08-19 10:19:02 -04:00
Pavel Vasilyev
538f97f737 Bluetooth: Mesh: Clarify name length in bt_mesh_model_data_store
Name length can't be longer than 8 bytes. This needs to be clarified
in the bt_mesh_model_data_store() documentation.

Signed-off-by: Pavel Vasilyev <pavel.vasilyev@nordicsemi.no>
2021-08-19 10:19:02 -04:00
Fabio Baltieri
f88a420d69 toolchain: migrate iterable sections calls to the external API
This migrates all the current iterable section usages to the external
API, dropping the "Z_" prefix:

Z_ITERABLE_SECTION_ROM
Z_ITERABLE_SECTION_ROM_GC_ALLOWED
Z_ITERABLE_SECTION_RAM
Z_ITERABLE_SECTION_RAM_GC_ALLOWED
Z_STRUCT_SECTION_ITERABLE
Z_STRUCT_SECTION_ITERABLE_ALTERNATE
Z_STRUCT_SECTION_FOREACH

Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
2021-08-12 17:47:04 -04:00
Lingao Meng
6bf35fa749 Bluetooth: Mesh: Fixes Same appkey add to multi netkey
The latest MESH.TS 1.0.1.2 4.15.10 Appkey List Procedures
MESH/NODE/CFG/AKL/BI-04-C

Verify that the IUT can respond to an Config AppKey Add
message with NetKeyIndex and AppKeyIndex already stored.

6. Repeat step 1 with the same AppKey, the same
AppKeyIndex, but NetKeyIndex field set to 0x001.

7. The Lower Tester expects the IUT to respond
with an Config AppKey Status message with the
Status field set to 0x04 (Invalid NetKey) and
the NetKeyIndex and AppKeyIndex values equal to
those sent in step 5.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-08-10 07:39:11 -04:00
Trond Einar Snekvik
8ab219cde5 bluetooth: Add defines for ECC key lengths
Adds defines for ECC public keys, private keys, DH keys and key
coordinates. Replaces raw numbers throughout.

Signed-off-by: Trond Einar Snekvik <Trond.Einar.Snekvik@nordicsemi.no>
2021-08-09 16:45:57 +02:00
Lingao Meng
4cbe77dbdb Bluetooth: Fix -Wunused-variable
Fix unused variable but defined, this will be
appear when dbg disabled.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-08-05 16:07:44 +02:00
Lingao Meng
3911ce8d40 Bluetooth: Mesh: Mark as internal function
Marks funcs:`show_faults` as internal, avoiding conflict.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-08-03 10:21:16 -04:00
Michał Narajowski
e167ca6539 Bluetooth: Mesh: Refactor Mesh Model Extensions
The existing extension tree does not support all the features that are
defined by the specification (e.g. multiple parents).

This patch approaches this problem by defining a circular single-linked
list of extension models. So for a given model, all models that are on
the same list as that model are in some extension relationship with that
model. All models on a list represent a single connected component of an
extension graph but without defining specific relationships between each
pair of models. This list is used to manage a shared subscription list
as per the Mesh Profile Specification:

```4.2.4 Subscription List

Within an element, each model has a separate instance of a Subscription
List, unless the model extends another model on that element. Instances
of models that extend other models (i.e., all models within an extension
relation tree) shall share a single instance of a Subscription List per
element.
```

Signed-off-by: Michał Narajowski <michal.narajowski@codecoup.pl>
2021-08-03 10:20:52 -04:00
Lingao Meng
9042f76b8b Bluetooth: Mesh: Add pointer conversion for prov->uri
`prov_sd[0].data` and `prov->uri` have different point type.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-07-29 10:59:20 -04:00
Lingao Meng
baf0d58a67 Bluetooth: Mesh: Fix wrong use log_strdup
Should use `bt_hex` instead of `log_strdup`.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-07-29 10:59:20 -04:00
Lingao Meng
55145beee0 Bluetooth: Mesh: Add more explain for ADV_STACK_SIZE
Add explanatory statement for config `BT_MESH_ADV_STACK_SIZE`

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-07-28 15:44:34 +02:00
Lingao Meng
5fe698286e Bluetooth: Mesh: Add kconfig for thread priority
Add Kconfig `CONFIG_BT_MESH_ADV_PRIO`.

Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
2021-07-28 15:44:34 +02:00
Agata Ponitka
a279ff3958 Bluetooth: Mesh: Fix Health Client Model
Assigning a value to the msg_timeout parameter.

Signed-off-by: Agata Ponitka <agata.ponitka@codecoup.pl>
2021-07-22 22:41:32 +03:00
Agata Ponitka
22aafd422c Bluetooth: Mesh: Add missing Configuration Client API
Add missing API:
- Delete all group addresses in a SIG model's subscription list
- Update a network key
- Update an application key
- Get/Set Node Identity parameters
- Set virtual addtess for a SIG model
- Get/Set Key Refresh Procedures

Signed-off-by: Agata Ponitka <agata.ponitka@codecoup.pl>
2021-07-22 22:41:32 +03:00
Agata Ponitka
e962cbb9fd Bluetooth: Mesh: Fix Configuration Client API
Hardcoded invalid Company ID was used instead of the parameter passed to
the API.

Signed-off-by: Agata Ponitka <agata.ponitka@codecoup.pl>
2021-07-22 22:41:32 +03:00
Bud Wandinger
7a2b248b98 Bluetooth: Mesh: Added support for application access to mesh messages
Added bt_mesh_msg_send() which can be used by the application to
directly send model layer messages without local instantiation of
related models. Also added bt_mesh_msg_cb_set() which allows the
application to recieve mesh model layer messages without local
instantiation of related models.

Added bt_mesh_has_addr() which returns a bool. For unicast addresses,
this returns whether or not bt_mesh_elem_find() was successfull. If the
above mentioned bt_mesh_msg_cb_set() has been used by the application to
set a message callback, this returns true so that the stack attempts to
push every model message up to the application via the callback. If no
callback has been set, group addresses are searched to see if the stack
should pass the message up the stack to an instantiated model.

These changes allow applications that do not or can not instantiate
models to interface with models in a mesh network. This is applicable to
applications which act as a Bluetooth mesh gateway, sniffer, debugger,
network monitoring, non-mesh relay/extender, etc.

In app_keys.c friend.c net.c bt_mesh_elem_find() is used only to
determine the existance of an address. The full return value of
bt_mesh_elem_find() is unecessary and so was replaced by the above
mentioned bt_mesh_has_addr() function in these instances.

Simplified bt_mesh_elem_find() by removing the search through group
address. Since the above mentioned bt_mesh_has_addr() function handles
instances where group addresses must be searched, it was no longer
necessary to preform this search in this function.

Signed-off-by: Bud Wandinger <bud@budkoembedded.ca>
2021-07-22 06:23:56 -04:00
William Fish
6b67a568c9 Bluetooth: Mesh: Provisioning Start Fix
Resolves provisioning start process

Signed-off-by: William Fish <william.fish@manulytica.com>
2021-07-22 11:20:23 +03:00