from typing import Tuple from core.emane.nodes import EmaneNet from core.nodes.base import CoreNode from core.services.coreservices import CoreService from core.xml import emanexml class EmaneTransportService(CoreService): name: str = "transportd" group: str = "EMANE" executables: Tuple[str, ...] = ("emanetransportd", "emanegentransportxml") dependencies: Tuple[str, ...] = () dirs: Tuple[str, ...] = () configs: Tuple[str, ...] = ("emanetransport.sh",) startup: Tuple[str, ...] = (f"sh {configs[0]}",) validate: Tuple[str, ...] = (f"pidof {executables[0]}",) validation_timer: float = 0.5 shutdown: Tuple[str, ...] = (f"killall {executables[0]}",) @classmethod def generate_config(cls, node: CoreNode, filename: str) -> str: 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_manager.get_nem_id(iface) cfg += f"emanegentransportxml {iface.name}-platform.xml\n" cfg += f"emanetransportd -r -l 0 -d transportdaemon{nem_id}.xml\n" return cfg