Merge pull request #476 from thiaguetz/feat/multicast-address-type

feat: implement multicast address type definition on AutoInterface configuration
This commit is contained in:
markqvist 2024-05-01 15:44:03 +02:00 committed by GitHub
commit 34af2e7af7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 26 additions and 2 deletions

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.