firmware icon indicating copy to clipboard operation
firmware copied to clipboard

[Feature Request]: Companion Node Forwarding for Edge Cases in Hop Count Limitation

Open fzellini opened this issue 6 months ago • 4 comments

Platform

other, ESP32, NRF52, RP2040, Linux Native, Cross-Platform

Description

It is common in certain deployments to have one node placed on the roof and another one indoors. Often, packets that are successfully received by the rooftop node are not forwarded to the indoor node, due to hop count limitations or routing constraints.

I propose adding a "companion node" option in the configuration. This node would serve as a designated peer to which packets are always forwarded, regardless of whether the hop count has been exhausted. Additionally, packets received from this companion node should not have their hop count decremented.

This would significantly improve reliability in edge scenarios and ensure better connectivity between nodes that are physically close but separated by routing barriers.

fzellini avatar Jun 04 '25 07:06 fzellini

This issue is related to #6955.

The issue is probably not hop count limitations, but because of how a CLIENT works. It will only forward the packet if it does not yet hear another node doing so. One role that does what you're requesting, namely always forwarding even if someone else already did so, is the ROUTER_LATE role. However, it should be used with caution as it will increase channel utilization. I don't think this can be avoided if you want to make sure the indoor node always receives everything, unless you use UDP (when using ESP32/Linux native devices) for the last hop.

GUVWAF avatar Jun 07 '25 09:06 GUVWAF

Do any two clients that can hear the same node will be split brain regarding messages?

jedahan avatar Jun 07 '25 13:06 jedahan

I believe the routing algorithm needs to be rethought. Relying on specific roles leads to configuration errors and ultimately weakens the entire network.

As it stands, the more nodes are present, the higher the chance that a packet won’t be forwarded correctly. Additionally, a “deaf” node that still transmits could end up relaying the packet first, preventing another, better-positioned node from forwarding it. For example, a hiker on a higher part of the trail might have better connectivity, but if their node is acting as a client, it won’t forward packets from hikers further down.

Routing from point A to point B should prioritize the most reliable nodes, and node configuration shouldn’t be something users need to worry about.

fzellini avatar Jun 07 '25 13:06 fzellini

Routing from point A to point B should prioritize the most reliable nodes, and node configuration shouldn’t be something users need to worry about.

Unfortunately this is much easier said than done. What defines "most reliable" and how do you measure that and convey to every node? Currently SNR is used as a proxy for "most reliable" or at least trying to use the least amount of hops, however, it is not perfect. Other things have been proposed but did not seem to outperform it: https://github.com/meshtastic/firmware/pull/5697

For direct messages, since 2.6 we already do not use managed flooding anymore. However, for broadcasts it's just very hard to optimize it without creating a lot of overhead in terms of routing control packets.

GUVWAF avatar Jun 07 '25 14:06 GUVWAF