Added prefer_ipv6 option to TCPServerInterface

This commit is contained in:
Mark Qvist 2024-11-20 16:53:14 +01:00
parent 9373819234
commit ebec63487f
2 changed files with 7 additions and 6 deletions

View File

@ -415,15 +415,14 @@ class TCPServerInterface(Interface):
BITRATE_GUESS = 10*1000*1000 BITRATE_GUESS = 10*1000*1000
@staticmethod @staticmethod
def get_address_for_if(name, bind_port): def get_address_for_if(name, bind_port, prefer_ipv6=False):
import RNS.vendor.ifaddr.niwrapper as netinfo import RNS.vendor.ifaddr.niwrapper as netinfo
ifaddr = netinfo.ifaddresses(name) ifaddr = netinfo.ifaddresses(name)
if len(ifaddr) < 1: if len(ifaddr) < 1:
raise SystemError(f"No addresses available on specified kernel interface \"{name}\" for TCPServerInterface to bind to") raise SystemError(f"No addresses available on specified kernel interface \"{name}\" for TCPServerInterface to bind to")
# TODO: Add IPv6 prefer option if prefer_ipv6 and netinfo.AF_INET6 in ifaddr:
if False and netinfo.AF_INET6 in ifaddr:
bind_ip = ifaddr[netinfo.AF_INET6][0]["addr"] bind_ip = ifaddr[netinfo.AF_INET6][0]["addr"]
return TCPServerInterface.get_address_for_host(f"{bind_ip}%{name}", bind_port) return TCPServerInterface.get_address_for_host(f"{bind_ip}%{name}", bind_port)
@ -448,7 +447,7 @@ class TCPServerInterface(Interface):
raise SystemError(f"No suitable kernel interface available for address \"{name}\" for TCPServerInterface to bind to") raise SystemError(f"No suitable kernel interface available for address \"{name}\" for TCPServerInterface to bind to")
def __init__(self, owner, name, device=None, bindip=None, bindport=None, i2p_tunneled=False): def __init__(self, owner, name, device=None, bindip=None, bindport=None, i2p_tunneled=False, prefer_ipv6=False):
super().__init__() super().__init__()
self.HW_MTU = 1064 self.HW_MTU = 1064
@ -471,7 +470,7 @@ class TCPServerInterface(Interface):
bind_address = None bind_address = None
if device != None: if device != None:
bind_address = TCPServerInterface.get_address_for_if(device, self.bind_port) bind_address = TCPServerInterface.get_address_for_if(device, self.bind_port, prefer_ipv6)
else: else:
if bindip == None: if bindip == None:
raise SystemError(f"No TCP bind IP configured for interface \"{name}\"") raise SystemError(f"No TCP bind IP configured for interface \"{name}\"")

View File

@ -640,6 +640,7 @@ class Reticulum:
listen_ip = c["listen_ip"] if "listen_ip" in c else None listen_ip = c["listen_ip"] if "listen_ip" in c else None
listen_port = int(c["listen_port"]) if "listen_port" in c else None listen_port = int(c["listen_port"]) if "listen_port" in c else None
i2p_tunneled = c.as_bool("i2p_tunneled") if "i2p_tunneled" in c else False i2p_tunneled = c.as_bool("i2p_tunneled") if "i2p_tunneled" in c else False
prefer_ipv6 = c.as_bool("prefer_ipv6") if "prefer_ipv6" in c else False
if port != None: if port != None:
listen_port = port listen_port = port
@ -650,7 +651,8 @@ class Reticulum:
device, device,
listen_ip, listen_ip,
listen_port, listen_port,
i2p_tunneled i2p_tunneled,
prefer_ipv6,
) )
if "outgoing" in c and c.as_bool("outgoing") == False: if "outgoing" in c and c.as_bool("outgoing") == False: