Fuzzy Paths: a new "wide" path mode for potentially better reliability on retries#2648
Fuzzy Paths: a new "wide" path mode for potentially better reliability on retries#2648redxdev wants to merge 1 commit into
Conversation
…allows updated repeaters 1 hop away from a path to repeat if requested
|
Something I did want to mention regarding the main downside (it not being possible to understand the true path in fuzzy mode): I do have what is I think a clever solution. To be clear, this is not implemented in this PR, it's much more complicated and harder to make backwards compatible even if it is technically "better", and I didn't want to put in the work without further discussion. With that out of the way... First: instead of each repeater removing itself from the path as they repeat, the full path is left in place in fuzzy mode, sort of like a flood packet. This means a bigger packet (which is the main downside aside from compatibility), but will allow us to fully capture the path the packet takes. Second: instead of the
|
|
Very interesting idea. I also thought moving the FF like a cursor is the better idea. |
See #2487 for my original proposal. I've gone back and forth on whether this should be called fuzzy/wide/thick or something else, happy to rename. Also, consider this a proof of concept as there's a bit of unfinished work and I'm not even entirely sure this is a good idea, but I wanted to try my hand at it nonetheless.
This implements a new method of pathing that is in-between a direct path and flood routing. If requested, updated repeaters can repeat a packet that was intended for a neighboring repeater, effectively "widening" the path. Flagging a path as "fuzzy" is done by appending an
FFprefix (orFFFF, orFFFFFFdepending on hash size) at the end of a path to signify that fuzzy repeating is allowed.Some notes about compatibility, additional work, etc:
FFat the end of their path.FFto it is the best way to go - it was the easiest backwards-compatible method I could think of since as far as I can tellFFis reserved but not actually used, and the only downside is losing a single hop if a fuzzy path is used.FFmust first see the packet.Zfor fuzzy paths sinceFalready means flood.MyMesh::isNextHopNeighborabout it. Right now any neighbor with an snr >= 0 will be considered when deciding whether to repeat for a fuzzy packet.My idea is that this would be used as a fallback after attempting a couple of direct messages but before trying a flood message, since this should be much cheaper and potentially has a higher likelihood of reaching its destination if a repeater is busy. This will require app support since as far as I can tell the firmware does not decide how to handle retries, but I am not entirely sure the best way to go about adding that support. As things are with this PR now, an app would need to update the contact's path to have
FFfor the message it wants to retry, but ideally it'd be able to set a flag via the companion protocol. I was not comfortable changing that as I'm unsure how to handle that in a backwards compatible way, especially since no apps actually support this yet.