Fixed redundant rediscovery path request
This commit is contained in:
		
							parent
							
								
									2ea963ed03
								
							
						
					
					
						commit
						873f049e20
					
				| @ -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 | ||||||
|  | |||||||
| @ -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 | ||||||
|  | |||||||
| @ -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 | ||||||
|  | |||||||
| @ -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: | ||||||
|             Transport.request_path(destination_hash) |             blocked_if = path_requests[destination_hash] | ||||||
|  |             if blocked_if == None: | ||||||
|  |                 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): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user