Compare commits

...

10 Commits

Author SHA1 Message Date
Lucas
cf14388c04
Merge acd893a6e6 into 4b0a0668a5 2024-05-01 17:59:20 +02:00
markqvist
4b0a0668a5
Update Contributing.md 2024-05-01 17:50:15 +02:00
markqvist
a52af17123
Merge pull request #495 from jschulthess/master
optionally load identity file from file in Echo and Link examples
2024-05-01 17:28:10 +02:00
markqvist
34af2e7af7
Merge pull request #476 from thiaguetz/feat/multicast-address-type
feat: implement multicast address type definition on AutoInterface configuration
2024-05-01 15:44:03 +02:00
Jürg Schulthess
12bf7977d2 fix comment 2024-04-29 08:25:40 +02:00
Jürg Schulthess
b69b939d6f realign with upstream 2024-04-29 08:10:48 +02:00
Jürg Schulthess
b5556f664b realign with upstream 2024-04-29 08:07:22 +02:00
Jürg Schulthess
f804ba0263 explicit exit not needed 2024-04-29 08:04:04 +02:00
Jürg Schulthess
84a1ab0ca3 add option to load identity from file 2024-04-29 07:59:55 +02:00
Thiaguetz
11baace08d feat: implement multicast address type definition on AutoInterface configuration 2024-03-23 00:54:56 -03:00
7 changed files with 57 additions and 8 deletions

View File

@ -35,6 +35,7 @@ Pull requests have a high chance of being accepted if they are:
- In alignment with the [Roadmap](./Roadmap.md) or solve an open issue or feature request - In alignment with the [Roadmap](./Roadmap.md) or solve an open issue or feature request
- Sufficiently tested to work with all API functions, and pass the standard test suite - Sufficiently tested to work with all API functions, and pass the standard test suite
- Functionally and conceptually complete and well-designed - Functionally and conceptually complete and well-designed
- Not simply formatting or code style changes
- Well-documented - Well-documented
Even new ideas and proposals that have not been approved by a maintainer, or fall outside the established roadmap, are *occasionally* accepted - if they possess the remaining of the above qualities. If not, they will be closed and removed without comments or explanation. Even new ideas and proposals that have not been approved by a maintainer, or fall outside the established roadmap, are *occasionally* accepted - if they possess the remaining of the above qualities. If not, they will be closed and removed without comments or explanation.

View File

@ -5,6 +5,7 @@
# of the packet. # # of the packet. #
########################################################## ##########################################################
import os
import argparse import argparse
import RNS import RNS
@ -27,8 +28,19 @@ def server(configpath):
# We must first initialise Reticulum # We must first initialise Reticulum
reticulum = RNS.Reticulum(configpath) reticulum = RNS.Reticulum(configpath)
# Randomly create a new identity for our echo server # Load identity from file if it exist or randomley create
server_identity = RNS.Identity() if configpath:
ifilepath = "%s/storage/identitiesy/%s" % (configpath,APP_NAME)
else:
ifilepath = "%s/storage/identities/%s" % (RNS.Reticulum.configdir,APP_NAME)
if os.path.exists(ifilepath):
# Load identity from file
server_identity = RNS.Identity.from_file(ifilepath)
RNS.log("loaded identity from file: "+ifilepath, RNS.LOG_VERBOSE)
else:
# Randomly create a new identity for our echo example
server_identity = RNS.Identity()
RNS.log("created new identity", RNS.LOG_VERBOSE)
# We create a destination that clients can query. We want # We create a destination that clients can query. We want
# to be able to verify echo replies to our clients, so we # to be able to verify echo replies to our clients, so we
@ -328,4 +340,4 @@ if __name__ == "__main__":
client(args.destination, configarg, timeout=timeoutarg) client(args.destination, configarg, timeout=timeoutarg)
except KeyboardInterrupt: except KeyboardInterrupt:
print("") print("")
exit() exit()

View File

@ -28,8 +28,20 @@ def server(configpath):
# We must first initialise Reticulum # We must first initialise Reticulum
reticulum = RNS.Reticulum(configpath) reticulum = RNS.Reticulum(configpath)
# Randomly create a new identity for our link example # Load identity from file if it exist or randomley create
server_identity = RNS.Identity() if configpath:
ifilepath = "%s/storage/identitiesy/%s" % (configpath,APP_NAME)
else:
ifilepath = "%s/storage/identities/%s" % (RNS.Reticulum.configdir,APP_NAME)
RNS.log("ifilepath: %s" % ifilepath)
if os.path.exists(ifilepath):
# Load identity from file
server_identity = RNS.Identity.from_file(ifilepath)
RNS.log("loaded identity from file: "+ifilepath, RNS.LOG_VERBOSE)
else:
# Randomly create a new identity for our link example
server_identity = RNS.Identity()
RNS.log("created new identity", RNS.LOG_VERBOSE)
# We create a destination that clients can connect to. We # We create a destination that clients can connect to. We
# want clients to create links to this destination, so we # want clients to create links to this destination, so we
@ -288,4 +300,4 @@ if __name__ == "__main__":
except KeyboardInterrupt: except KeyboardInterrupt:
print("") print("")
exit() exit()

View File

@ -43,6 +43,9 @@ class AutoInterface(Interface):
SCOPE_ORGANISATION = "8" SCOPE_ORGANISATION = "8"
SCOPE_GLOBAL = "e" SCOPE_GLOBAL = "e"
MULTICAST_PERMANENT_ADDRESS_TYPE = "0"
MULTICAST_TEMPORARY_ADDRESS_TYPE = "1"
PEERING_TIMEOUT = 7.5 PEERING_TIMEOUT = 7.5
ALL_IGNORE_IFS = ["lo0"] ALL_IGNORE_IFS = ["lo0"]
@ -74,7 +77,7 @@ class AutoInterface(Interface):
ifas = self.netinfo.ifaddresses(ifname) ifas = self.netinfo.ifaddresses(ifname)
return ifas return ifas
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, multicast_address_type=None, data_port=None, allowed_interfaces=None, ignored_interfaces=None, configured_bitrate=None):
from RNS.vendor.ifaddr import niwrapper from RNS.vendor.ifaddr import niwrapper
super().__init__() super().__init__()
self.netinfo = niwrapper self.netinfo = niwrapper
@ -128,6 +131,13 @@ class AutoInterface(Interface):
else: else:
self.discovery_port = discovery_port self.discovery_port = discovery_port
if multicast_address_type == None:
self.multicast_address_type = AutoInterface.MULTICAST_TEMPORARY_ADDRESS_TYPE
elif str(multicast_address_type).lower() == "temporary":
self.multicast_address_type = AutoInterface.MULTICAST_TEMPORARY_ADDRESS_TYPE
elif str(multicast_address_type).lower() == "permanent":
self.multicast_address_type = AutoInterface.MULTICAST_PERMANENT_ADDRESS_TYPE
if data_port == None: if data_port == None:
self.data_port = AutoInterface.DEFAULT_DATA_PORT self.data_port = AutoInterface.DEFAULT_DATA_PORT
else: else:
@ -156,7 +166,7 @@ class AutoInterface(Interface):
gt += ":"+"{:02x}".format(g[9]+(g[8]<<8)) gt += ":"+"{:02x}".format(g[9]+(g[8]<<8))
gt += ":"+"{:02x}".format(g[11]+(g[10]<<8)) gt += ":"+"{:02x}".format(g[11]+(g[10]<<8))
gt += ":"+"{:02x}".format(g[13]+(g[12]<<8)) gt += ":"+"{:02x}".format(g[13]+(g[12]<<8))
self.mcast_discovery_address = "ff1"+self.discovery_scope+":"+gt self.mcast_discovery_address = "ff"+self.multicast_address_type+self.discovery_scope+":"+gt
suitable_interfaces = 0 suitable_interfaces = 0
for ifname in self.list_interfaces(): for ifname in self.list_interfaces():

View File

@ -540,6 +540,7 @@ class Reticulum:
group_id = c["group_id"] if "group_id" in c else None 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_scope = c["discovery_scope"] if "discovery_scope" in c else None
discovery_port = int(c["discovery_port"]) if "discovery_port" in c else None discovery_port = int(c["discovery_port"]) if "discovery_port" in c else None
multicast_address_type = c["multicast_address_type"] if "multicast_address_type" in c else None
data_port = int(c["data_port"]) if "data_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 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 ignored_interfaces = c.as_list("ignored_devices") if "ignored_devices" in c else None
@ -550,6 +551,7 @@ class Reticulum:
group_id, group_id,
discovery_scope, discovery_scope,
discovery_port, discovery_port,
multicast_address_type,
data_port, data_port,
allowed_interfaces, allowed_interfaces,
ignored_interfaces ignored_interfaces

View File

@ -47,6 +47,12 @@ system, which should be enabled by default in almost all OSes.
group_id = reticulum group_id = reticulum
# You can also choose the multicast address type:
# temporary (default, Temporary Multicast Address)
# or permanent (Permanent Multicast Address)
multicast_address_type = permanent
# You can also select specifically which # You can also select specifically which
# kernel networking devices to use. # kernel networking devices to use.

View File

@ -47,6 +47,12 @@ system, which should be enabled by default in almost all OSes.
group_id = reticulum group_id = reticulum
# You can also choose the multicast address type:
# temporary (default, Temporary Multicast Address)
# or permanent (Permanent Multicast Address)
multicast_address_type = permanent
# You can also select specifically which # You can also select specifically which
# kernel networking devices to use. # kernel networking devices to use.