Fixed redundant rediscovery path request

This commit is contained in:
Mark Qvist 2023-11-02 04:35:57 +01:00
parent 2ea963ed03
commit 873f049e20
4 changed files with 22 additions and 9 deletions

View File

@ -1170,7 +1170,7 @@ class RNodeInterface(Interface):
if got == 0: if got == 0:
time_since_last = int(time.time()*1000) - last_read_ms time_since_last = int(time.time()*1000) - last_read_ms
if len(data_buffer) > 0 and time_since_last > self.timeout: if len(data_buffer) > 0 and time_since_last > self.timeout:
RNS.log(str(self)+" serial read timeout", RNS.LOG_DEBUG) RNS.log(str(self)+" serial read timeout", RNS.LOG_WARNING)
data_buffer = b"" data_buffer = b""
in_frame = False in_frame = False
command = KISS.CMD_UNKNOWN command = KISS.CMD_UNKNOWN

View File

@ -799,7 +799,7 @@ class RNodeInterface(Interface):
else: else:
time_since_last = int(time.time()*1000) - last_read_ms time_since_last = int(time.time()*1000) - last_read_ms
if len(data_buffer) > 0 and time_since_last > self.timeout: if len(data_buffer) > 0 and time_since_last > self.timeout:
RNS.log(str(self)+" serial read timeout", RNS.LOG_DEBUG) RNS.log(str(self)+" serial read timeout", RNS.LOG_WARNING)
data_buffer = b"" data_buffer = b""
in_frame = False in_frame = False
command = KISS.CMD_UNKNOWN command = KISS.CMD_UNKNOWN

View File

@ -119,7 +119,7 @@ class Reticulum:
# TODO: Let Reticulum somehow continously build a map of per-hop # TODO: Let Reticulum somehow continously build a map of per-hop
# latencies and use this map for global timeout calculation. # latencies and use this map for global timeout calculation.
DEFAULT_PER_HOP_TIMEOUT = 4 DEFAULT_PER_HOP_TIMEOUT = 6
# Length of truncated hashes in bits. # Length of truncated hashes in bits.
TRUNCATED_HASHLENGTH = 128 TRUNCATED_HASHLENGTH = 128

View File

@ -305,7 +305,8 @@ class Transport:
@staticmethod @staticmethod
def jobs(): def jobs():
outgoing = [] outgoing = []
path_requests = [] path_requests = {}
blocked_if = None
Transport.jobs_running = True Transport.jobs_running = True
try: try:
@ -333,7 +334,7 @@ class Transport:
if time.time() - last_path_request > Transport.PATH_REQUEST_MI: if time.time() - last_path_request > Transport.PATH_REQUEST_MI:
RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link.destination.hash)+" since an attempted link was never established", RNS.LOG_DEBUG) RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link.destination.hash)+" since an attempted link was never established", RNS.LOG_DEBUG)
if not link.destination.hash in path_requests: if not link.destination.hash in path_requests:
path_requests.append(link.destination.hash) path_requests[link.destination.hash] = None
Transport.pending_links.remove(link) Transport.pending_links.remove(link)
@ -482,14 +483,16 @@ class Transport:
elif not path_request_throttle and Transport.hops_to(link_entry[6]) == 1: elif not path_request_throttle and Transport.hops_to(link_entry[6]) == 1:
RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link_entry[6])+" since an attempted link was never established, and destination was previously local to an interface on this instance", RNS.LOG_DEBUG) RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link_entry[6])+" since an attempted link was never established, and destination was previously local to an interface on this instance", RNS.LOG_DEBUG)
path_request_conditions = True path_request_conditions = True
blocked_if = link_entry[4]
# If the link initiator was previously only 1 hop # If the link initiator is only 1 hop away,
# away, this likely means that network topology has # this likely means that network topology has
# changed. In that case, we try to discover a new path, # changed. In that case, we try to discover a new path,
# and mark the old one as potentially unresponsive. # and mark the old one as potentially unresponsive.
elif not path_request_throttle and lr_taken_hops == 1: elif not path_request_throttle and lr_taken_hops == 1:
RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link_entry[6])+" since an attempted link was never established, and link initiator is local to an interface on this instance", RNS.LOG_DEBUG) RNS.log("Trying to rediscover path for "+RNS.prettyhexrep(link_entry[6])+" since an attempted link was never established, and link initiator is local to an interface on this instance", RNS.LOG_DEBUG)
path_request_conditions = True path_request_conditions = True
blocked_if = link_entry[4]
if RNS.Reticulum.transport_enabled(): if RNS.Reticulum.transport_enabled():
if hasattr(link_entry[4], "mode") and link_entry[4].mode != RNS.Interfaces.Interface.Interface.MODE_BOUNDARY: if hasattr(link_entry[4], "mode") and link_entry[4].mode != RNS.Interfaces.Interface.Interface.MODE_BOUNDARY:
@ -497,7 +500,7 @@ class Transport:
if path_request_conditions: if path_request_conditions:
if not link_entry[6] in path_requests: if not link_entry[6] in path_requests:
path_requests.append(link_entry[6]) path_requests[link_entry[6]] = blocked_if
if not RNS.Reticulum.transport_enabled(): if not RNS.Reticulum.transport_enabled():
# Drop current path if we are not a transport instance, to # Drop current path if we are not a transport instance, to
@ -652,7 +655,17 @@ class Transport:
packet.send() packet.send()
for destination_hash in path_requests: for destination_hash in path_requests:
blocked_if = path_requests[destination_hash]
if blocked_if == None:
Transport.request_path(destination_hash) Transport.request_path(destination_hash)
else:
for interface in Transport.interfaces:
if interface != blocked_if:
# RNS.log("Transmitting path request on "+str(interface), RNS.LOG_DEBUG)
Transport.request_path(destination_hash, on_interface=interface)
else:
pass
# RNS.log("Blocking path request on "+str(interface), RNS.LOG_DEBUG)
@staticmethod @staticmethod
def transmit(interface, raw): def transmit(interface, raw):