diff --git a/daemon/core/configservices/serviceutils/__init__.py b/daemon/core/configservices/nrlservices/__init__.py similarity index 100% rename from daemon/core/configservices/serviceutils/__init__.py rename to daemon/core/configservices/nrlservices/__init__.py diff --git a/daemon/core/configservices/nrlservices/services.py b/daemon/core/configservices/nrlservices/services.py new file mode 100644 index 00000000..2845dc8c --- /dev/null +++ b/daemon/core/configservices/nrlservices/services.py @@ -0,0 +1,156 @@ +from typing import Any, Dict + +import netaddr + +from core import utils +from core.configservice.base import ConfigService, ConfigServiceMode + +GROUP = "ProtoSvc" + + +class NrlService(ConfigService): + name = "NrlBase" + group = GROUP + directories = [] + files = [] + executables = [] + dependencies = [] + startup = [] + validate = [] + shutdown = [] + validation_mode = ConfigServiceMode.BLOCKING + default_configs = [] + modes = {} + + @classmethod + def generate_config(cls, node, filename): + return "" + + @staticmethod + def firstipv4prefix(node, prefixlen=24): + """ + Similar to QuaggaService.routerid(). Helper to return the first IPv4 + prefix of a node, using the supplied prefix length. This ignores the + interface's prefix length, so e.g. '/32' can turn into '/24'. + """ + for ifc in node.netifs(): + if hasattr(ifc, "control") and ifc.control is True: + continue + for a in ifc.addrlist: + a = a.split("/")[0] + if netaddr.valid_ipv4(a): + return f"{a}/{prefixlen}" + # raise ValueError, "no IPv4 address found" + return "0.0.0.0/%s" % prefixlen + + +class MgenSinkService(ConfigService): + name = "MGEN_Sink" + group = GROUP + directories = [] + files = ["mgensink.sh", "sink.mgen"] + executables = ["mgen"] + dependencies = [] + startup = ["sh mgensink.sh"] + validate = ["pidof mgen"] + shutdown = ["killall mgen"] + validation_mode = ConfigServiceMode.BLOCKING + default_configs = [] + modes = {} + + def data(self) -> Dict[str, Any]: + ifnames = [] + for ifc in self.node.netifs(): + name = utils.sysctl_devname(ifc.name) + ifnames.append(name) + return dict(ifnames=ifnames) + + +class NrlNhdp(NrlService): + name = "NHDP" + group = GROUP + directories = [] + files = ["nrlnhdp.sh"] + executables = ["nrlnhdp"] + dependencies = [] + startup = ["sh nrlnhdp.sh"] + validate = ["pidof nrlnhdp"] + shutdown = ["killall nrlnhdp"] + validation_mode = ConfigServiceMode.BLOCKING + default_configs = [] + modes = {} + + def data(self) -> Dict[str, Any]: + has_smf = "SMF" in self.node.config_services + ifnames = [] + for ifc in self.node.netifs(): + if hasattr(ifc, "control") and ifc.control is True: + continue + ifnames.append(ifc.name) + return dict(has_smf=has_smf, ifnames=ifnames) + + +class NrlSmf(ConfigService): + name = "SMF" + group = GROUP + directories = [] + files = ["startsmf.sh"] + executables = ["nrlsmf", "killall"] + dependencies = [] + startup = ["sh startsmf.sh"] + validate = ["pidof nrlsmf"] + shutdown = ["killall nrlsmf"] + validation_mode = ConfigServiceMode.BLOCKING + default_configs = [] + modes = {} + + def data(self) -> Dict[str, Any]: + has_arouted = "arouted" in self.node.config_services + has_nhdp = "NHDP" in self.node.config_services + has_olsr = "OLSR" in self.node.config_services + ifnames = [] + ip4_prefix = None + for ifc in self.node.netifs(): + if hasattr(ifc, "control") and ifc.control is True: + continue + ifnames.append(ifc.name) + if ip4_prefix: + continue + for a in ifc.addrlist: + a = a.split("/")[0] + if netaddr.valid_ipv4(a): + ip4_prefix = f"{a}/{24}" + break + return dict( + has_arouted=has_arouted, + has_nhdp=has_nhdp, + has_olsr=has_olsr, + ifnames=ifnames, + ip4_prefix=ip4_prefix, + ) + + +class NrlOlsr(ConfigService): + name = "OLSR" + group = GROUP + directories = [] + files = ["nrlolsrd.sh"] + executables = ["nrlolsrd"] + dependencies = [] + startup = ["sh nrlolsrd.sh"] + validate = ["pidof nrlolsrd"] + shutdown = ["killall nrlolsrd"] + validation_mode = ConfigServiceMode.BLOCKING + default_configs = [] + modes = {} + + def data(self) -> Dict[str, Any]: + has_smf = "SMF" in self.node.config_services + has_zebra = "zebra" in self.node.config_services + ifname = None + for ifc in self.node.netifs(): + if hasattr(ifc, "control") and ifc.control is True: + continue + ifname = ifc.name + break + return dict(has_smf=has_smf, has_zebra=has_zebra, ifname=ifname) diff --git a/daemon/core/configservices/nrlservices/templates/mgensink.sh b/daemon/core/configservices/nrlservices/templates/mgensink.sh new file mode 100644 index 00000000..bdbd0a8d --- /dev/null +++ b/daemon/core/configservices/nrlservices/templates/mgensink.sh @@ -0,0 +1 @@ +mgen input sink.mgen output mgen_${node.name}.log diff --git a/daemon/core/configservices/nrlservices/templates/nrlnhdp.sh b/daemon/core/configservices/nrlservices/templates/nrlnhdp.sh new file mode 100644 index 00000000..00b7e11d --- /dev/null +++ b/daemon/core/configservices/nrlservices/templates/nrlnhdp.sh @@ -0,0 +1,7 @@ +<% + interfaces = "-i " + " -i ".join(ifnames) + smf = "" + if has_smf: + smf = "-flooding ecds -smfClient %s_smf" % node.name +%> +nrlnhdp -l /var/log/nrlnhdp.log -rpipe ${node.name}_nhdp ${smf} ${interfaces} diff --git a/daemon/core/configservices/nrlservices/templates/nrlolsrd.sh b/daemon/core/configservices/nrlservices/templates/nrlolsrd.sh new file mode 100644 index 00000000..4072d189 --- /dev/null +++ b/daemon/core/configservices/nrlservices/templates/nrlolsrd.sh @@ -0,0 +1,9 @@ +<% + smf = "" + if has_smf: + smf = "-flooding s-mpr -smfClient %s_smf" % node.name + zebra = "" + if has_zebra: + zebra = "-z" +%> +nrlolsrd -i ${ifname} -l /var/log/nrlolsrd.log -rpipe ${node.name}_olsr ${smf} ${zebra} diff --git a/daemon/core/configservices/nrlservices/templates/sink.mgen b/daemon/core/configservices/nrlservices/templates/sink.mgen new file mode 100644 index 00000000..21d4fde6 --- /dev/null +++ b/daemon/core/configservices/nrlservices/templates/sink.mgen @@ -0,0 +1,4 @@ +0.0 LISTEN UDP 5000 +% for ifname in ifnames: +0.0 Join 224.225.1.2 INTERFACE ${ifname} +% endfor diff --git a/daemon/core/configservices/nrlservices/templates/startsmf.sh b/daemon/core/configservices/nrlservices/templates/startsmf.sh new file mode 100644 index 00000000..2ba20f27 --- /dev/null +++ b/daemon/core/configservices/nrlservices/templates/startsmf.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# auto-generated by nrl.py:NrlSmf.generateconfig() +% if ifnames: +nrlsmf instance ${node.name}_smf \\ +% if has_arouted: + tap ${node.name}_tap unicast %s push lo,${ifnames[0]} resequence on \\ +% endif +% if has_nhdp: + ecds \\ +% elif has_olsr: + smpr \\ +% else: + cf \\ +% endif +<% + interfaces = ",".join(ifnames) +%> + ${interfaces} hash MD5 log /var/log/nrlsmf.log < /dev/null > /dev/null 2>&1 & +% endif diff --git a/daemon/core/configservices/utilservices/__init__.py b/daemon/core/configservices/utilservices/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/daemon/core/configservices/serviceutils/services.py b/daemon/core/configservices/utilservices/services.py similarity index 100% rename from daemon/core/configservices/serviceutils/services.py rename to daemon/core/configservices/utilservices/services.py diff --git a/daemon/core/configservices/serviceutils/templates/apache2.conf b/daemon/core/configservices/utilservices/templates/apache2.conf similarity index 100% rename from daemon/core/configservices/serviceutils/templates/apache2.conf rename to daemon/core/configservices/utilservices/templates/apache2.conf diff --git a/daemon/core/configservices/serviceutils/templates/defaultmroute.sh b/daemon/core/configservices/utilservices/templates/defaultmroute.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/defaultmroute.sh rename to daemon/core/configservices/utilservices/templates/defaultmroute.sh diff --git a/daemon/core/configservices/serviceutils/templates/defaultroute.sh b/daemon/core/configservices/utilservices/templates/defaultroute.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/defaultroute.sh rename to daemon/core/configservices/utilservices/templates/defaultroute.sh diff --git a/daemon/core/configservices/serviceutils/templates/dhcpd.conf b/daemon/core/configservices/utilservices/templates/dhcpd.conf similarity index 100% rename from daemon/core/configservices/serviceutils/templates/dhcpd.conf rename to daemon/core/configservices/utilservices/templates/dhcpd.conf diff --git a/daemon/core/configservices/serviceutils/templates/envvars b/daemon/core/configservices/utilservices/templates/envvars similarity index 100% rename from daemon/core/configservices/serviceutils/templates/envvars rename to daemon/core/configservices/utilservices/templates/envvars diff --git a/daemon/core/configservices/serviceutils/templates/index.html b/daemon/core/configservices/utilservices/templates/index.html similarity index 100% rename from daemon/core/configservices/serviceutils/templates/index.html rename to daemon/core/configservices/utilservices/templates/index.html diff --git a/daemon/core/configservices/serviceutils/templates/ipforward.sh b/daemon/core/configservices/utilservices/templates/ipforward.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/ipforward.sh rename to daemon/core/configservices/utilservices/templates/ipforward.sh diff --git a/daemon/core/configservices/serviceutils/templates/pcap.sh b/daemon/core/configservices/utilservices/templates/pcap.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/pcap.sh rename to daemon/core/configservices/utilservices/templates/pcap.sh diff --git a/daemon/core/configservices/serviceutils/templates/radvd.conf b/daemon/core/configservices/utilservices/templates/radvd.conf similarity index 100% rename from daemon/core/configservices/serviceutils/templates/radvd.conf rename to daemon/core/configservices/utilservices/templates/radvd.conf diff --git a/daemon/core/configservices/serviceutils/templates/sshd_config b/daemon/core/configservices/utilservices/templates/sshd_config similarity index 100% rename from daemon/core/configservices/serviceutils/templates/sshd_config rename to daemon/core/configservices/utilservices/templates/sshd_config diff --git a/daemon/core/configservices/serviceutils/templates/startatd.sh b/daemon/core/configservices/utilservices/templates/startatd.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/startatd.sh rename to daemon/core/configservices/utilservices/templates/startatd.sh diff --git a/daemon/core/configservices/serviceutils/templates/startdhcpclient.sh b/daemon/core/configservices/utilservices/templates/startdhcpclient.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/startdhcpclient.sh rename to daemon/core/configservices/utilservices/templates/startdhcpclient.sh diff --git a/daemon/core/configservices/serviceutils/templates/startsshd.sh b/daemon/core/configservices/utilservices/templates/startsshd.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/startsshd.sh rename to daemon/core/configservices/utilservices/templates/startsshd.sh diff --git a/daemon/core/configservices/serviceutils/templates/staticroute.sh b/daemon/core/configservices/utilservices/templates/staticroute.sh similarity index 100% rename from daemon/core/configservices/serviceutils/templates/staticroute.sh rename to daemon/core/configservices/utilservices/templates/staticroute.sh diff --git a/daemon/core/configservices/serviceutils/templates/vsftpd.conf b/daemon/core/configservices/utilservices/templates/vsftpd.conf similarity index 100% rename from daemon/core/configservices/serviceutils/templates/vsftpd.conf rename to daemon/core/configservices/utilservices/templates/vsftpd.conf