Re: [PATCH BlueZ v2 1/3] mesh: Add interface output filter

Gix, Brian
2022-09-22T21:11:20Z

Patchset v2 applied. Thanks!

On Wed, 2022-09-21 at 13:16 +0200, Isak Westin wrote:
> According to the mesh profile (3.4.5.2), if TTL is set to 1 for an
> outgoing message, that message shall be dropped.
> ---
>  mesh/net.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/mesh/net.c b/mesh/net.c
> index e8e6d3a61..699469284 100644
> --- a/mesh/net.c
> +++ b/mesh/net.c
> @@ -3067,6 +3067,13 @@ void mesh_net_send_seg(struct mesh_net *net,
> uint32_t net_key_id,
>         uint8_t segO = (hdr >> SEGO_HDR_SHIFT) & SEG_MASK;
>         uint8_t segN = (hdr >> SEGN_HDR_SHIFT) & SEG_MASK;
>
> +       /*
> +        * MshPRFv1.0.1 section 3.4.5.2, Interface output filter:
> +        * If TTL is set to 1, message shall be dropped.
> +        */
> +       if (ttl == 1)
> +               return;
> +
>         /* TODO: Only used for current POLLed segments to LPNs */
>
>         l_debug("SEQ: %6.6x", seq + segO);
> @@ -3135,6 +3142,13 @@ bool mesh_net_app_send(struct mesh_net *net,
> bool frnd_cred, uint16_t src,
>                         (dst >= net->src_addr && dst <= net-
> >last_addr))
>                 return true;
>
> +       /*
> +        * MshPRFv1.0.1 section 3.4.5.2, Interface output filter:
> +        * If TTL is set to 1, message shall be dropped.
> +        */
> +       if (ttl == 1)
> +               return true;
> +
>         /* Setup OTA Network send */
>         payload = mesh_sar_new(msg_len);
>         memcpy(payload->buf, msg, msg_len);
> @@ -3206,6 +3220,13 @@ void mesh_net_ack_send(struct mesh_net *net,
> uint32_t net_key_id,
>         uint8_t pkt_len;
>         uint8_t pkt[30];
>
> +       /*
> +        * MshPRFv1.0.1 section 3.4.5.2, Interface output filter:
> +        * If TTL is set to 1, message shall be dropped.
> +        */
> +       if (ttl == 1)
> +               return;
> +
>         hdr = NET_OP_SEG_ACKNOWLEDGE << OPCODE_HDR_SHIFT;
>         hdr |= rly << RELAY_HDR_SHIFT;
>         hdr |= (seqZero & SEQ_ZERO_MASK) << SEQ_ZERO_HDR_SHIFT;
> @@ -3264,6 +3285,13 @@ void mesh_net_transport_send(struct mesh_net
> *net, uint32_t net_key_id,
>         if (*msg & 0xc0 || (9 + msg_len + 8 > 29))
>                 return;
>
> +       /*
> +        * MshPRFv1.0.1 section 3.4.5.2, Interface output filter:
> +        * If TTL is set to 1, message shall be dropped.
> +        */
> +       if (ttl == 1)
> +               return;
> +
>         /* Enqueue for Friend if forwardable and from us */
>         if (!net_key_id && src >= net->src_addr && src <= net-
> >last_addr) {
>                 uint32_t hdr = msg[0] << OPCODE_HDR_SHIFT;