44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from core.emane.nodes import EmaneNet
|
|
from core.services.coreservices import CoreService
|
|
from core.xml import emanexml
|
|
|
|
|
|
class EmaneTransportService(CoreService):
|
|
name = "transportd"
|
|
executables = ("emanetransportd", "emanegentransportxml")
|
|
group = "EMANE"
|
|
dependencies = ()
|
|
dirs = ()
|
|
configs = ("emanetransport.sh",)
|
|
startup = ("sh %s" % configs[0],)
|
|
validate = ("pidof %s" % executables[0],)
|
|
validation_timer = 0.5
|
|
shutdown = ("killall %s" % executables[0],)
|
|
|
|
@classmethod
|
|
def generate_config(cls, node, filename):
|
|
if filename == cls.configs[0]:
|
|
transport_commands = []
|
|
for interface in node.netifs(sort=True):
|
|
network_node = node.session.get_node(interface.net.id)
|
|
if isinstance(network_node, EmaneNet):
|
|
config = node.session.emane.get_configs(
|
|
network_node.id, network_node.model.name
|
|
)
|
|
if config and emanexml.is_external(config):
|
|
nem_id = network_node.getnemid(interface)
|
|
command = (
|
|
"emanetransportd -r -l 0 -d ../transportdaemon%s.xml"
|
|
% nem_id
|
|
)
|
|
transport_commands.append(command)
|
|
transport_commands = "\n".join(transport_commands)
|
|
return """
|
|
emanegentransportxml -o ../ ../platform%s.xml
|
|
%s
|
|
""" % (
|
|
node.id,
|
|
transport_commands,
|
|
)
|
|
else:
|
|
raise ValueError
|