From f3d04ba90fd97e4e4efcb0302145e45fb907fb04 Mon Sep 17 00:00:00 2001 From: Mark Qvist Date: Wed, 12 Jan 2022 12:12:04 +0100 Subject: [PATCH] Improved AutoInterface handling on Android --- RNS/Interfaces/AutoInterface.py | 7 +++-- RNS/Reticulum.py | 49 +++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/RNS/Interfaces/AutoInterface.py b/RNS/Interfaces/AutoInterface.py index c99d3fe..e32bb8c 100644 --- a/RNS/Interfaces/AutoInterface.py +++ b/RNS/Interfaces/AutoInterface.py @@ -22,6 +22,7 @@ class AutoInterface(Interface): PEERING_TIMEOUT = 6.0 DARWIN_IGNORE_IFS = ["awdl0", "llw0", "lo0", "en5"] + ANDROID_IGNORE_IFS = ["dummy0", "lo", "tun0"] def __init__(self, owner, name, group_id=None, discovery_scope=None, discovery_port=None, data_port=None, allowed_interfaces=None, ignored_interfaces=None): import importlib @@ -101,10 +102,12 @@ class AutoInterface(Interface): suitable_interfaces = 0 for ifname in self.netifaces.interfaces(): - if RNS.vendor.platformutils.get_platform() == "darwin" and ifname in AutoInterface.DARWIN_IGNORE_IFS: + if RNS.vendor.platformutils.is_darwin() and ifname in AutoInterface.DARWIN_IGNORE_IFS and not ifname in self.allowed_interfaces: RNS.log(str(self)+" skipping Darwin AWDL or tethering interface "+str(ifname), RNS.LOG_EXTREME) - elif RNS.vendor.platformutils.get_platform() == "darwin" and ifname == "lo0": + elif RNS.vendor.platformutils.is_darwin() and ifname == "lo0": RNS.log(str(self)+" skipping Darwin loopback interface "+str(ifname), RNS.LOG_EXTREME) + elif RNS.vendor.platformutils.is_android() and ifname in AutoInterface.ANDROID_IGNORE_IFS and not ifname in self.allowed_interfaces: + RNS.log(str(self)+" skipping Android system interface "+str(ifname), RNS.LOG_EXTREME) elif ifname in self.ignored_interfaces: RNS.log(str(self)+" ignoring disallowed interface "+str(ifname), RNS.LOG_EXTREME) else: diff --git a/RNS/Reticulum.py b/RNS/Reticulum.py index 7a5304d..7f6d72e 100755 --- a/RNS/Reticulum.py +++ b/RNS/Reticulum.py @@ -281,30 +281,35 @@ class Reticulum: try: if ("interface_enabled" in c) and c.as_bool("interface_enabled") == True: if c["type"] == "AutoInterface": - group_id = c["group_id"] if "group_id" in c else None - discovery_scope = c["discovery_scope"] if "discovery_scope" in c else None - discovery_port = int(c["discovery_port"]) if "discovery_port" in c else None - data_port = int(c["data_port"]) if "data_port" in c else None - allowed_interfaces = c.as_list("devices") if "devices" in c else None - ignored_interfaces = c.as_list("ignored_devices") if "ignored_devices" in c else None + if not RNS.vendor.platformutils.is_windows(): + group_id = c["group_id"] if "group_id" in c else None + discovery_scope = c["discovery_scope"] if "discovery_scope" in c else None + discovery_port = int(c["discovery_port"]) if "discovery_port" in c else None + data_port = int(c["data_port"]) if "data_port" in c else None + allowed_interfaces = c.as_list("devices") if "devices" in c else None + ignored_interfaces = c.as_list("ignored_devices") if "ignored_devices" in c else None - interface = AutoInterface.AutoInterface( - RNS.Transport, - name, - group_id, - discovery_scope, - discovery_port, - data_port, - allowed_interfaces, - ignored_interfaces - ) + interface = AutoInterface.AutoInterface( + RNS.Transport, + name, + group_id, + discovery_scope, + discovery_port, + data_port, + allowed_interfaces, + ignored_interfaces + ) - if "outgoing" in c and c.as_bool("outgoing") == True: - interface.OUT = True + if "outgoing" in c and c.as_bool("outgoing") == True: + interface.OUT = True + else: + interface.OUT = False + + RNS.Transport.interfaces.append(interface) else: - interface.OUT = False - - RNS.Transport.interfaces.append(interface) + RNS.log("AutoInterface is not currently supported on Windows, disabling interface.", RNS.LOG_ERROR); + RNS.log("Please remove this AutoInterface instance from your configuration file.", RNS.LOG_ERROR); + RNS.log("You will have to manually configure other interfaces for connectivity.", RNS.LOG_ERROR); if c["type"] == "UDPInterface": @@ -536,6 +541,8 @@ class Reticulum: except Exception as e: RNS.log("The interface \""+name+"\" could not be created. Check your configuration file for errors!", RNS.LOG_ERROR) RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR) + # TODO: Remove + raise e RNS.panic() else: RNS.log("The interface name \""+name+"\" was already used. Check your configuration file for errors!", RNS.LOG_ERROR)