Commit Graph

109 Commits

Author SHA1 Message Date
lly
7937a51779 ble_mesh: Remove relay option dependency
When the relay functionality of a node is not enabled, this
issue will cause the node failing to send messages to fixed
group.
2020-06-02 19:19:18 +08:00
lly
6abdc9e542 ble_mesh: Local model (un)subscribes group address 2020-06-01 09:13:57 +08:00
lly
0ee9227b45 ble_mesh: Define a macro for invalid company id 2020-06-01 09:13:43 +08:00
lly
b5f3f79716 ble_mesh: Check the result of creating timer 2020-05-28 10:28:36 +08:00
Island
5f43d69d21 Merge branch 'bugfix/ble_mesh_sync_zephyr_fixes_v3.3' into 'release/v3.3'
Bugfix/ble mesh sync zephyr fixes (v3.3)

See merge request espressif/esp-idf!8950
2020-05-28 10:17:29 +08:00
Island
a70c956a75 Merge branch 'bugfix/ble_mesh_not_use_same_private_key_v3.3' into 'release/v3.3'
ble_mesh: Not using pre-initialized private key (v3.3)

See merge request espressif/esp-idf!8947
2020-05-28 10:15:40 +08:00
lly
822b20eb40 ble_mesh: Transport tx fields overflow [Zephyr]
The transport segmented TX nack and seg_pending fields must be at least
6 bits to avoid overflow for 32 segment messages. This change rearranges
the seg_tx fields to gather all state flag fields in one byte, while
making the counter fields whole bytes.
2020-05-27 17:45:12 +08:00
lly
b381998a23 ble_mesh: Friend with unknown appkey [Zephyr]
Ensures that friend messages are enqueued, even if the packet is
received with an appkey is unknown to the friend. Previously, sdu_recv
would return EINVAL if the appkey was unknown, which would prevent the
lower transport layer from adding the packet to the friend queue. This
is irrelevant for the logic in lower transport, and should not be
returned as an error.
2020-05-27 17:44:58 +08:00
lly
393e4e9007 ble_mesh: Not using pre-initialized private key 2020-05-27 17:38:41 +08:00
lly
4b191ac6fb ble_mesh: Same func for storing/restoring comp data 2020-05-27 17:32:56 +08:00
lly
879bfc608c ble_mesh: Fix Provisioner failed to publish 2020-05-22 15:49:30 +08:00
Island
796dc4bb35 Merge branch 'bugfix/ble_mesh_friend_init_flag_v3.3' into 'release/v3.3'
Bugfix/ble mesh friend init flag (v3.3)

See merge request espressif/esp-idf!8849
2020-05-22 10:50:55 +08:00
Island
6046e7b26f Merge branch 'bugfix/ble_mesh_node_old_version_to_new_v3.3' into 'release/v3.3'
ble_mesh: Fix mesh node device role restore (v3.3)

See merge request espressif/esp-idf!8725
2020-05-21 15:10:29 +08:00
lly
1b1aea24f0 ble_mesh: Clear two more vars during proxy server deinit 2020-05-21 14:29:04 +08:00
lly
e55c65562c ble_mesh: Add missing sdkconfig.h 2020-05-21 14:28:57 +08:00
lly
1ad9de1131 ble_mesh: Init device name during proxy server init
Device name will be reset when deinit mesh stack. If not
initializing device name during the next mesh stack init,
it will fail to set the device name when using bluedroid.
2020-05-21 14:28:49 +08:00
lly
8e4399bf29 ble_mesh: Add init flag for friend init/deinit
Since bt_mesh_friend_init() will only be invoked when
a device is provisioned or Provisioner is enabled, so
we add a flag to indicate if the friend functionality
is initialized in case deinit before initialization.
2020-05-21 14:28:40 +08:00
Island
cb4e8cef87 Merge branch 'bugfix/ble_mesh_fix_typos_v3.3' into 'release/v3.3'
ble_mesh: Fix typos (v3.3)

See merge request espressif/esp-idf!8727
2020-05-21 11:47:33 +08:00
lly
d6e189927e ble_mesh: Remove patch for the bug of an App 2020-05-15 20:24:35 +08:00
lly
8cdaf34430 ble_mesh: Fix typos 2020-05-13 18:33:46 +08:00
lly
4f402486c6 ble_mesh: Fix mesh node device role restore
Old version of BLE Mesh has no device role storage, because
previously we only support storing mesh node info.
If the binary of the node is upgraded from old version to a
new version (support storing provisioner info), the mesh info
of the node will not be restored because mesh role does not
exist in the flash.
2020-05-13 18:24:44 +08:00
Island
19893abd04 Merge branch 'bugfix/sync_zephyr_bt_mesh_bugfix_v3.3' into 'release/v3.3'
Bugfix/sync zephyr bt mesh bugfix (v3.3)

See merge request espressif/esp-idf!8689
2020-05-13 18:15:22 +08:00
lly
46a8982a80 ble_mesh: A specific fix for compile warning in idf3.3
- Remove the extra #include "bt_common.h" in mesh_timer.c
- Compared with the latest idf, idf3.3 defines BIT(nr) in
  the "soc/soc.h" without the pre-condition "#ifndef BIT",
  which will cause compile warning when using mesh. So we
  include the header file "soc/soc.h" in "mesh_util.h",
  which can bypass the definition of "BIT" in "mesh_util.h"
  when compiling.
2020-05-13 03:40:30 +00:00
lly
8deabb7945 ble_mesh: Fix not update prov addr in fast prov
When using fast provisioning, the Provisioner functionality
will be enabled. Unicast addresses within the pre-allocated
range will be used for provisioning nodes. And during the
address assignment, the allocated unicast address will be
checked that if it's duplicated with other nodes addresses
and the Provisioner's own addresses.
So before starting using fast provisioning, we need to update
the Provisioner address.
2020-05-13 03:40:30 +00:00
lly
f1abf94922 ble_mesh: net_key_status only pull one key idx [Zephyr]
Fixes bug where the config client's net_key_status handler would attempt
to pull two key indexes from a message which only holds one.
2020-05-13 03:40:30 +00:00
lly
f5f9d34443 ble_mesh: Update client message timeout calculation
Since the behavior of sending segmented messages has been
changed properly, the calculation of timeout value which
will be used when sending an acknowledged message by a
client model also needs to be updated.
2020-05-13 03:40:30 +00:00
lly
08a463907e ble_mesh: Add lock for segmented msg operations
Add mutex to protect some variables of the mesh segmented
messages.
Currently the timeout handler of mesh will be executed in
the btc task, while the received mesh messages will be
handled in the btu task. In case some variables are set to
NULL when handled in the btu task, meanwhile these variables
are also accessed in the timeout handler, so we add mutex to
protect these variables and related operations.
2020-05-13 03:40:30 +00:00
lly
367677c3bb ble_mesh: Fix dereferencing pointer before checking for NULL [Zephyr]
The publication context is checked for NULL in bt_mesh_model_publish()
however it was dereferenced before that. Move the assignment to
ctx.send_rel to the same place where other ctx members are set.
2020-05-13 03:40:30 +00:00
lly
b0a6fc7937 ble_mesh: Optimize some mesh log output 2020-05-13 03:40:30 +00:00
lly
30d62cc00f ble_mesh: Fix restore when revoke keys [Zephyr]
Store keys (NetKey and AppKey) again after revoking.
2020-05-13 03:40:30 +00:00
lly
2983f6edb1 ble_mesh: Spit mesh_util.h into different header files
Split mesh_util.h into mesh_byteorder.h, mesh_compiler.h,
mesh_ffs.h and mesh_util.h based on the classification of
Zephyr, which will make further porting more clear.
2020-05-13 03:40:30 +00:00
lly
35c5a7a08c ble_mesh: Split mesh os related into a separate file 2020-05-13 03:40:30 +00:00
lly
0daac93e4e ble_mesh: Split mesh mutex into a separate file 2020-05-13 03:40:30 +00:00
lly
ec34cd8338 ble_mesh: Rename mesh_kernel.* to mesh_timer.* 2020-05-13 03:40:30 +00:00
lly
92cfbe3c6c ble_mesh: Add and use transport macro definitions [Zephyr] 2020-05-13 03:40:30 +00:00
lly
e2186b1d3a ble_mesh: Friend SeqAuth cleanup [Zephyr]
The Friend queue uses the message SeqAuth to determine whether the
message is already in the queue. To facilitate this, the SeqAuth is
passed around as a pointer throughout the transport modules. In the
bt_mesh_ctl_send functions, this parameter is also exposed in the API,
but the internal usage is inconsistent and buggy. Also, no one actually
uses this parameter.

- Removes seq_auth param from bt_mesh_ctl_send, instead passing NULL
  directly to the friend module, to enforce its addition to the queue.
- Makes the seq_auth pointer const throughout the friend module.
2020-05-13 03:40:30 +00:00
lly
489d32663b ble_mesh: Rework msg_cache [Zephyr]
Changes the behavior of the message cache to optimize for cache
capacity. Previously, the message cache's primary function was to avoid
decrypting messages multiple times, although the cache's main function
in the spec is to avoid message rebroadcasting. Optimizing for minimal
decryption causes us to fill the network cache faster, which in turn
causes more cache misses, potentially outweighing the advantage.

Now stores src + seq in message cache instead of field hash value. This
cuts cache size in two, while including more of the sequence number than
before.

Adds messages to the cache only after the packet is successfully
decrypted. This reduces noise in the cache, and ensures that no
invalid deobfuscations are added.

Additionally, this fixes a bug where multiple calls to net_decrypt with
the same packet failed, as the message cache found its own entry from
the previous call.
2020-05-13 03:40:30 +00:00
lly
febe084113 ble_mesh: Segmented TX to groups [Zephyr]
Implements several changes to the transport layer segmented tx to
improve group message performance:
- Moves retransmit counter to tx context instead of per packet. As every
  unacked packet is sent every retransmit, the retransmit counters would
  be the same in each segment. This makes it easier to control progress.
- Delays the scheduling of the retransmit until the completion of the
  last segment by adding a seg_pending counter. This is essentially the
  same as the old behavior, except that the old behavior might retrigger
  the sending before all segments are finished if the advertising is
  slow.
- Allows the group transmits to stop as soon as all retransmits have
  been exhausted, instead of timing out waiting for acks that won't
  come. This allows group tx to finish without error.
- Fixes a bug where a failed TX would block IV update.
- Cancels any pending transmissions of acked segments.
- Reduces log level for several common group tx scenarios that aren't
  erronous.
2020-05-13 03:40:30 +00:00
lly
b6729860dd ble_mesh: Add comment explaining use of byte order [Zephyr]
Add comment that explains why a different byte order is used for the
3-byte opcode on the CID part of the opcode.
2020-05-13 03:40:30 +00:00
lly
9f9acb6c4a ble_mesh: Use 24-bit functions [Zephyr]
Use 24-bit functions for byteorder and net_buf in order to make the
byteorder used more readable.
2020-05-13 03:40:30 +00:00
lly
6d77a8b0c8 ble_mesh: Optimize net_buf_simple routines [Zephyr]
Use sys_put_xyz() helpers instead of memcpy() whenever possible. This
brings in straight-line inline code for pushes and adds of known,
small sizes.
2020-05-13 03:40:30 +00:00
lly
fa06b60568 ble_mesh: Add PRIu64 & PRIx64 in mesh_types.h 2020-05-13 03:40:30 +00:00
lly
bb09078b65 ble_mesh: Add push functions for supported bit-variants [Zephyr]
Add push functions for bit-widths supported by add and pull functions.
2020-05-13 03:40:30 +00:00
lly
0522ce7cf3 ble_mesh: Add support for 64 bit data type [Zephyr]
This enables pulling and pushing values in 64 bit format.
2020-05-13 03:40:30 +00:00
lly
b41d50908b ble_mesh: Add support for 48 bit data type [Zephyr]
This enables pulling and pushing values in 48 bit format.
2020-05-13 03:40:30 +00:00
lly
be57df5e19 ble_mesh: Add 48 bit variants [Zephyr]
This adds sys_*_*48 functions that operation on a 48 bits values.
2020-05-13 03:40:30 +00:00
lly
fd5e18eb49 ble_mesh: Add support for 24 bit data type [Zephyr]
This enables pulling and pushing values in 24 bit format.
2020-05-13 03:40:30 +00:00
lly
4963d4ddf8 ble_mesh: Add 24 bit variants [Zephyr]
This adds sys_*_*24 functions that operation on a 24 bits values.
2020-05-13 03:40:30 +00:00
lly
bc1722260f ble_mesh: Group resends in proxy nodes [Zephyr]
Resend transport segments for groups on the advertiser interface, even
if a connected proxy node holds the group.
2020-05-13 03:40:30 +00:00
lly
968772d18a ble_mesh: Typo in condition in comp_add_elem of cfg_srv [Zephyr]
Vendor model IDs take up four (not two) bytes in the composition
2020-05-13 03:40:30 +00:00