2020-06-18 20:54:36 +01:00
|
|
|
from typing import Tuple
|
|
|
|
|
2019-09-28 06:31:56 +01:00
|
|
|
from core.emane.nodes import EmaneNet
|
2020-06-18 20:54:36 +01:00
|
|
|
from core.nodes.base import CoreNode
|
2019-04-30 07:31:47 +01:00
|
|
|
from core.services.coreservices import CoreService
|
2018-07-11 17:19:06 +01:00
|
|
|
from core.xml import emanexml
|
|
|
|
|
|
|
|
|
|
|
|
class EmaneTransportService(CoreService):
|
2020-06-18 20:54:36 +01:00
|
|
|
name: str = "transportd"
|
|
|
|
group: str = "EMANE"
|
|
|
|
executables: Tuple[str, ...] = ("emanetransportd", "emanegentransportxml")
|
|
|
|
dependencies: Tuple[str, ...] = ()
|
|
|
|
dirs: Tuple[str, ...] = ()
|
|
|
|
configs: Tuple[str, ...] = ("emanetransport.sh",)
|
2020-07-03 07:19:40 +01:00
|
|
|
startup: Tuple[str, ...] = (f"sh {configs[0]}",)
|
|
|
|
validate: Tuple[str, ...] = (f"pidof {executables[0]}",)
|
2020-06-18 20:54:36 +01:00
|
|
|
validation_timer: float = 0.5
|
2020-07-03 07:19:40 +01:00
|
|
|
shutdown: Tuple[str, ...] = (f"killall {executables[0]}",)
|
2018-07-11 17:19:06 +01:00
|
|
|
|
|
|
|
@classmethod
|
2020-06-18 20:54:36 +01:00
|
|
|
def generate_config(cls, node: CoreNode, filename: str) -> str:
|
2020-07-03 07:19:40 +01:00
|
|
|
emane_manager = node.session.emane
|
|
|
|
cfg = ""
|
|
|
|
for iface in node.get_ifaces():
|
|
|
|
if not isinstance(iface.net, EmaneNet):
|
|
|
|
continue
|
|
|
|
emane_net = iface.net
|
|
|
|
config = emane_manager.get_iface_config(emane_net, iface)
|
|
|
|
if emanexml.is_external(config):
|
|
|
|
nem_id = emane_net.getnemid(iface)
|
|
|
|
cfg += f"emanegentransportxml {iface.name}-platform.xml\n"
|
|
|
|
cfg += f"emanetransportd -r -l 0 -d transportdaemon{nem_id}.xml\n"
|
|
|
|
return cfg
|