diff --git a/mesh/net.c b/mesh/net.c
index 71ff2ce..9567d94 100644
--- a/mesh/net.c
+++ b/mesh/net.c
uint8_t segN = SEG_MAX(msg->len);
uint16_t seg_off = SEG_OFF(segO);
uint32_t key_id = 0;
- uint32_t seq_num = mesh_net_next_seq_num(net);
+ uint32_t seq_num;
if (segN) {
+ /* Send each segment on unique seq_num */
+ seq_num = mesh_net_next_seq_num(net);
+
if (msg->len - seg_off > SEG_OFF(1))
seg_len = SEG_OFF(1);
else
seg_len = msg->len - seg_off;
} else {
+ /* Send on same seq_num used for Access Layer */
+ seq_num = msg->seqAuth;
seg_len = msg->len;
}
/* First enqueue to any Friends and internal models */
result = msg_rxed(net, false, iv_index, ttl,
- seq + seg_max,
+ seq,
net_idx,
src, dst,
key_aid,
* or delivered to one of our Unicast addresses we are done
*/
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;
- mesh_net_next_seq_num(net);
+ (dst >= net->src_addr && dst <= net->last_addr))
return true;
- }
/* If Segmented, Cancel any OB segmented message to same DST */
if (seg_max) {
}
payload->iv_index = mesh_net_get_iv_index(net);
- payload->seqAuth = net->seq_num;
+ payload->seqAuth = seq;
result = true;
if (!IS_UNICAST(dst) && seg_max) {