Compare commits

...

5 Commits

Author SHA1 Message Date
Mark Qvist
e28dbd4afa Updated manual 2022-11-24 17:48:04 +01:00
Mark Qvist
8626dcd69f Updated roadmap 2022-11-24 17:30:01 +01:00
Mark Qvist
e34f21f4dc Updated roadmap 2022-11-24 17:29:25 +01:00
Mark Qvist
f692e81b8e Fixed AutoInterface roaming on Android devices that rotate Ethernet/WiFi MAC addresses on reconnect 2022-11-24 17:19:01 +01:00
Mark Qvist
28e43b52f9 Updated manual 2022-11-24 17:16:43 +01:00
3 changed files with 43 additions and 12 deletions

View File

@ -48,6 +48,11 @@ class AutoInterface(Interface):
BITRATE_GUESS = 10*1000*1000 BITRATE_GUESS = 10*1000*1000
def handler_factory(self, callback):
def create_handler(*args, **keys):
return AutoInterfaceHandler(callback, *args, **keys)
return create_handler
def __init__(self, owner, name, group_id=None, discovery_scope=None, discovery_port=None, data_port=None, allowed_interfaces=None, ignored_interfaces=None, configured_bitrate=None): def __init__(self, owner, name, group_id=None, discovery_scope=None, discovery_port=None, data_port=None, allowed_interfaces=None, ignored_interfaces=None, configured_bitrate=None):
import importlib import importlib
if importlib.util.find_spec('netifaces') != None: if importlib.util.find_spec('netifaces') != None:
@ -70,6 +75,7 @@ class AutoInterface(Interface):
self.peers = {} self.peers = {}
self.link_local_addresses = [] self.link_local_addresses = []
self.adopted_interfaces = {} self.adopted_interfaces = {}
self.interface_servers = {}
self.multicast_echoes = {} self.multicast_echoes = {}
self.timed_out_interfaces = {} self.timed_out_interfaces = {}
@ -199,11 +205,6 @@ class AutoInterface(Interface):
peering_wait = self.announce_interval*1.2 peering_wait = self.announce_interval*1.2
RNS.log(str(self)+" discovering peers for "+str(round(peering_wait, 2))+" seconds...", RNS.LOG_VERBOSE) RNS.log(str(self)+" discovering peers for "+str(round(peering_wait, 2))+" seconds...", RNS.LOG_VERBOSE)
def handlerFactory(callback):
def createHandler(*args, **keys):
return AutoInterfaceHandler(callback, *args, **keys)
return createHandler
self.owner = owner self.owner = owner
socketserver.UDPServer.address_family = socket.AF_INET6 socketserver.UDPServer.address_family = socket.AF_INET6
@ -212,9 +213,10 @@ class AutoInterface(Interface):
addr_info = socket.getaddrinfo(local_addr, self.data_port, socket.AF_INET6, socket.SOCK_DGRAM) addr_info = socket.getaddrinfo(local_addr, self.data_port, socket.AF_INET6, socket.SOCK_DGRAM)
address = addr_info[0][4] address = addr_info[0][4]
self.server = socketserver.UDPServer(address, handlerFactory(self.processIncoming)) udp_server = socketserver.UDPServer(address, self.handler_factory(self.processIncoming))
self.interface_servers[ifname] = udp_server
thread = threading.Thread(target=self.server.serve_forever) thread = threading.Thread(target=udp_server.serve_forever)
thread.daemon = True thread.daemon = True
thread.start() thread.start()
@ -277,8 +279,32 @@ class AutoInterface(Interface):
if address["addr"].startswith("fe80:"): if address["addr"].startswith("fe80:"):
link_local_addr = address["addr"].split("%")[0] link_local_addr = address["addr"].split("%")[0]
if link_local_addr != self.adopted_interfaces[ifname]: if link_local_addr != self.adopted_interfaces[ifname]:
# TODO: Remove
# RNS.log("Replacing link-local address for "+str(ifname), RNS.LOG_DEBUG)
self.adopted_interfaces[ifname] = link_local_addr self.adopted_interfaces[ifname] = link_local_addr
local_addr = link_local_addr+"%"+ifname
addr_info = socket.getaddrinfo(local_addr, self.data_port, socket.AF_INET6, socket.SOCK_DGRAM)
listen_address = addr_info[0][4]
if ifname in self.interface_servers:
# TODO: Remove
# RNS.log("Shutting down previous UDP socket server for "+str(ifname), RNS.LOG_DEBUG)
previous_server = self.interface_servers[ifname]
def shutdown_server():
previous_server.shutdown()
threading.Thread(target=shutdown_server, daemon=True).start()
# TODO: Remove
# RNS.log("Starting new UDP socket server for "+str(ifname), RNS.LOG_DEBUG)
udp_server = socketserver.UDPServer(listen_address, self.handler_factory(self.processIncoming))
self.interface_servers[ifname] = udp_server
thread = threading.Thread(target=udp_server.serve_forever)
thread.daemon = True
thread.start()
except Exception as e: except Exception as e:
RNS.log("Could not get device information while updating link-local addresses for "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR) RNS.log("Could not get device information while updating link-local addresses for "+str(self)+". The contained exception was: "+str(e), RNS.LOG_ERROR)

View File

@ -31,6 +31,7 @@ These efforts are aimed at improving the ease of which Reticulum is understood,
## Universality ## Universality
These efforts seek to broaden the universality of the Reticulum software and hardware ecosystem by continously diversifying platform support, and by improving the overall availability and ease of deployment of the Reticulum stack. These efforts seek to broaden the universality of the Reticulum software and hardware ecosystem by continously diversifying platform support, and by improving the overall availability and ease of deployment of the Reticulum stack.
- Improved roaming support on Android
- OpenWRT support - OpenWRT support
- Create a standalone RNS Daemon app for Android - Create a standalone RNS Daemon app for Android
- A lightweight and portable C implementation for microcontrollers, µRNS - A lightweight and portable C implementation for microcontrollers, µRNS
@ -84,18 +85,22 @@ These efforts aim to expand the types of physical and virtual interfaces that Re
- Tor - Tor
## Active Work Areas ## Active Work Areas
For each release cycle of Reticulum, improvements and additions from the five areas are selected as active work areas, and can be expected to be included in the next release. While not entirely set in stone for each release cycle, they serve as a pointer of what to expect in the next release. For each release cycle of Reticulum, improvements and additions from the five areas are selected as active work areas, and can be expected to be included in the upcoming releases within that cycle. While not entirely set in stone for each release cycle, they serve as a pointer of what to expect in the near future.
- Version `0.4.3` targets: - The current `0.4.x` release cycle aims at completing:
- [x] Improve storage persist call on local client connect/disconnect
- [x] Improved roaming support on Android
- [ ] Updating the documentation to reflect recent changes and improvements - [ ] Updating the documentation to reflect recent changes and improvements
- [ ] Add bluetooth pairing code output to rnodeconf - [ ] Add bluetooth pairing code output to rnodeconf
- [ ] Improve storage persist call on every local client connect/disconnect - [ ] Improve storage persist call on every local client connect/disconnect
- [ ] Transit traffic display in rnstatus
- [ ] JSON output mode for rnstatus - [ ] JSON output mode for rnstatus
- [ ] rnid utility - [ ] Add `rnid` utility
- [ ] rnsign utility - [ ] Add `rnsign` utility
- [ ] rncrypt utility - [ ] Add `rncrypt` utility
- [ ] Create a standalone RNS Daemon app for Android - [ ] Create a standalone RNS Daemon app for Android
- Targets for related applications - Targets for related applications
- [x] Add paper offline & paper message transport to LXMF - [x] Add paper offline & paper message transport to LXMF
- [x] Implement paper messaging in Nomad Network - [x] Implement paper messaging in Nomad Network
- [x] Implement paper messaging in Sideband - [x] Implement paper messaging in Sideband
- [x] Expand device support in Sideband to support older Android devices

Binary file not shown.