2019-11-11 14:11:36

by Aurelien Jarno

[permalink] [raw]
Subject: [PATCH BlueZ] mesh: fix sending messages to group addresses

When sending a message to a group address (either virtual or fixed), it
has to be sent OTA even if successfully enqueued to an internal model.
---
mesh/net.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/mesh/net.c b/mesh/net.c
index f07de4d8a..33b498135 100644
--- a/mesh/net.c
+++ b/mesh/net.c
@@ -3339,10 +3339,10 @@ bool mesh_net_app_send(struct mesh_net *net, bool frnd_cred, uint16_t src,
szmic, seq & SEQ_ZERO_MASK,
msg, msg_len);

- /* If successfully enqued or delivered
- * to Unicast address, we are done
+ /* If addressed to a unicast address and successfully enqueued,
+ * or delivered to one of our Unicast addresses we are done
*/
- if (result || src == dst ||
+ if ((result && IS_UNICAST(dst)) || src == dst ||
(dst >= net->src_addr && dst <= net->last_addr)) {
/* Adjust our seq_num for "virtual" delivery */
net->seq_num += seg_max;
--
2.24.0


2019-11-12 17:58:07

by Gix, Brian

[permalink] [raw]
Subject: Re: [PATCH BlueZ] mesh: fix sending messages to group addresses

Applied, Thanks

On Mon, 2019-11-11 at 15:10 +0100, Aurelien Jarno wrote:
> When sending a message to a group address (either virtual or fixed), it
> has to be sent OTA even if successfully enqueued to an internal model.
> ---
> mesh/net.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/mesh/net.c b/mesh/net.c
> index f07de4d8a..33b498135 100644
> --- a/mesh/net.c
> +++ b/mesh/net.c
> @@ -3339,10 +3339,10 @@ bool mesh_net_app_send(struct mesh_net *net, bool frnd_cred, uint16_t src,
> szmic, seq & SEQ_ZERO_MASK,
> msg, msg_len);
>
> - /* If successfully enqued or delivered
> - * to Unicast address, we are done
> + /* If addressed to a unicast address and successfully enqueued,
> + * or delivered to one of our Unicast addresses we are done
> */
> - if (result || src == dst ||
> + if ((result && IS_UNICAST(dst)) || src == dst ||
> (dst >= net->src_addr && dst <= net->last_addr)) {
> /* Adjust our seq_num for "virtual" delivery */
> net->seq_num += seg_max;