""" tdma.py: EMANE TDMA model bindings for CORE """ import logging import os from core import constants, utils from core.config import Configuration from core.emane import emanemodel from core.emulator.enumerations import ConfigDataTypes class EmaneTdmaModel(emanemodel.EmaneModel): # model name name = "emane_tdma" # mac configuration mac_library = "tdmaeventschedulerradiomodel" mac_xml = "tdmaeventschedulerradiomodel.xml" # add custom schedule options and ignore it when writing emane xml schedule_name = "schedule" default_schedule = os.path.join( constants.CORE_DATA_DIR, "examples", "tdma", "schedule.xml" ) config_ignore = {schedule_name} @classmethod def load(cls, emane_prefix): cls.mac_defaults["pcrcurveuri"] = os.path.join( emane_prefix, "share/emane/xml/models/mac/tdmaeventscheduler/tdmabasemodelpcr.xml", ) super(EmaneTdmaModel, cls).load(emane_prefix) cls.mac_config.insert( 0, Configuration( _id=cls.schedule_name, _type=ConfigDataTypes.STRING, default=cls.default_schedule, label="TDMA schedule file (core)", ), ) def post_startup(self): """ Logic to execute after the emane manager is finished with startup. :return: nothing """ # get configured schedule config = self.session.emane.get_configs(node_id=self.id, config_type=self.name) if not config: return schedule = config[self.schedule_name] # get the set event device event_device = self.session.emane.event_device # initiate tdma schedule logging.info( "setting up tdma schedule: schedule(%s) device(%s)", schedule, event_device ) utils.check_cmd(["emaneevent-tdmaschedule", "-i", event_device, schedule])