-
Notifications
You must be signed in to change notification settings - Fork 488
Description
Problem Definition / Motivation
My tests with repeated direct messages show an unreliability of approximately 45% from my location as soon as the path length is greater than or equal to 2. This means that almost half of the direct messages fail via a partially functioning path with more than 2 nodes.
Ultimately, my client too often resorts to flooding on the last attempt, generating a lot of traffic.
Problem solution 1, neighbours/repeater swarm
For greater resilience, I suggest including a repeater's neighbor list in direct messages: if there are two neighbors listed at positions 1 and 2 of the path, a repeater could repeat a packet.
Along the path, a "swarm of repeaters" would thus ensure more reliable delivery and reduce the final floods.
Currently:
if (pkt->isRouteDirect() && pkt->path_len >= PATH_HASH_SIZE) {
if (self_id.isHashMatch(pkt->path) && allowPacketForward(pkt)) {
...
Swarm approach modification to give an idea:
if (pkt->isRouteDirect() && pkt->path_len >= PATH_HASH_SIZE) {
if ((self_id.isHashMatch(pkt->path) || (pkt->path_len > PATH_HASH_SIZE && twoNeighboursMatch(pkt->path, $neigbours))) && allowPacketForward(pkt)) {
...
The function "removeSelfFromPath(pkt)" could still be used more common as "removeFirstFromPath(pkt)" to shorten the path.
As the neighbor list contains SNR information the noise ratio could be used in addition to decide about a valid neighbor match.
Visualization of the Swarm Approach
