Work on tunnels
This commit is contained in:
parent
872075a31e
commit
0687ee2231
|
@ -34,7 +34,7 @@ class Transport:
|
||||||
PATHFINDER_R = 1 # Retransmit retries
|
PATHFINDER_R = 1 # Retransmit retries
|
||||||
PATHFINDER_T = 10 # Retry grace period
|
PATHFINDER_T = 10 # Retry grace period
|
||||||
PATHFINDER_RW = 10 # Random window for announce rebroadcast
|
PATHFINDER_RW = 10 # Random window for announce rebroadcast
|
||||||
PATHFINDER_E = 96*60*60 # Path expiration in seconds
|
PATHFINDER_E = 30 # Path expiration in seconds
|
||||||
|
|
||||||
# TODO: Calculate an optimal number for this in
|
# TODO: Calculate an optimal number for this in
|
||||||
# various situations
|
# various situations
|
||||||
|
@ -45,7 +45,7 @@ class Transport:
|
||||||
|
|
||||||
LINK_TIMEOUT = RNS.Link.KEEPALIVE * 2
|
LINK_TIMEOUT = RNS.Link.KEEPALIVE * 2
|
||||||
REVERSE_TIMEOUT = 30*60 # Reverse table entries are removed after max 30 minutes
|
REVERSE_TIMEOUT = 30*60 # Reverse table entries are removed after max 30 minutes
|
||||||
DESTINATION_TIMEOUT = 60*60*24*7 # Destination table entries are removed if unused for one week
|
DESTINATION_TIMEOUT = PATHFINDER_E # Destination table entries are removed if unused for one week
|
||||||
MAX_RECEIPTS = 1024 # Maximum number of receipts to keep track of
|
MAX_RECEIPTS = 1024 # Maximum number of receipts to keep track of
|
||||||
|
|
||||||
interfaces = [] # All active interfaces
|
interfaces = [] # All active interfaces
|
||||||
|
@ -298,6 +298,7 @@ class Transport:
|
||||||
|
|
||||||
# Cull the tunnel table
|
# Cull the tunnel table
|
||||||
stale_tunnels = []
|
stale_tunnels = []
|
||||||
|
ti = 0
|
||||||
for tunnel_id in Transport.tunnels:
|
for tunnel_id in Transport.tunnels:
|
||||||
tunnel_entry = Transport.tunnels[tunnel_id]
|
tunnel_entry = Transport.tunnels[tunnel_id]
|
||||||
|
|
||||||
|
@ -305,6 +306,26 @@ class Transport:
|
||||||
if time.time() > expires:
|
if time.time() > expires:
|
||||||
stale_tunnels.append(tunnel_id)
|
stale_tunnels.append(tunnel_id)
|
||||||
RNS.log("Tunnel "+RNS.prettyhexrep(tunnel_id)+" timed out and was removed", RNS.LOG_DEBUG)
|
RNS.log("Tunnel "+RNS.prettyhexrep(tunnel_id)+" timed out and was removed", RNS.LOG_DEBUG)
|
||||||
|
else:
|
||||||
|
stale_tunnel_paths = []
|
||||||
|
tunnel_paths = tunnel_entry[2]
|
||||||
|
for tunnel_path in tunnel_paths:
|
||||||
|
tunnel_path_entry = tunnel_paths[tunnel_path]
|
||||||
|
|
||||||
|
if time.time() > tunnel_path_entry[0] + Transport.DESTINATION_TIMEOUT:
|
||||||
|
stale_tunnel_paths.append(tunnel_path)
|
||||||
|
RNS.log("Tunnel path to "+RNS.prettyhexrep(tunnel_path)+" timed out and was removed", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
|
for tunnel_path in stale_tunnel_paths:
|
||||||
|
tunnel_paths.pop(tunnel_path)
|
||||||
|
ti += 1
|
||||||
|
|
||||||
|
|
||||||
|
if ti > 0:
|
||||||
|
if ti == 1:
|
||||||
|
RNS.log("Removed "+str(i)+" tunnel path", RNS.LOG_DEBUG)
|
||||||
|
else:
|
||||||
|
RNS.log("Removed "+str(i)+" tunnel paths", RNS.LOG_DEBUG)
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
for link_id in stale_links:
|
for link_id in stale_links:
|
||||||
|
@ -812,7 +833,7 @@ class Transport:
|
||||||
tunnel_entry = Transport.tunnels[packet.receiving_interface.tunnel_id]
|
tunnel_entry = Transport.tunnels[packet.receiving_interface.tunnel_id]
|
||||||
paths = tunnel_entry[2]
|
paths = tunnel_entry[2]
|
||||||
paths[packet.destination_hash] = destination_table_entry
|
paths[packet.destination_hash] = destination_table_entry
|
||||||
expires = time.time() + Transport.PATHFINDER_E
|
expires = time.time() + Transport.DESTINATION_TIMEOUT
|
||||||
tunnel_entry[3] = expires
|
tunnel_entry[3] = expires
|
||||||
RNS.log("Path to "+RNS.prettyhexrep(packet.destination_hash)+" associated with tunnel "+RNS.prettyhexrep(packet.receiving_interface.tunnel_id), RNS.LOG_VERBOSE)
|
RNS.log("Path to "+RNS.prettyhexrep(packet.destination_hash)+" associated with tunnel "+RNS.prettyhexrep(packet.receiving_interface.tunnel_id), RNS.LOG_VERBOSE)
|
||||||
|
|
||||||
|
@ -1009,7 +1030,7 @@ class Transport:
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def handle_tunnel(tunnel_id, interface):
|
def handle_tunnel(tunnel_id, interface):
|
||||||
expires = time.time() + Transport.PATHFINDER_E
|
expires = time.time() + Transport.DESTINATION_TIMEOUT
|
||||||
if not tunnel_id in Transport.tunnels:
|
if not tunnel_id in Transport.tunnels:
|
||||||
RNS.log("Tunnel endpoint "+RNS.prettyhexrep(tunnel_id)+" established.", RNS.LOG_DEBUG)
|
RNS.log("Tunnel endpoint "+RNS.prettyhexrep(tunnel_id)+" established.", RNS.LOG_DEBUG)
|
||||||
paths = {}
|
paths = {}
|
||||||
|
|
Loading…
Reference in New Issue