2017-04-25 08:45:34 -07:00
|
|
|
"""
|
2016-09-14 17:15:43 -07:00
|
|
|
tdma.py: EMANE TDMA model bindings for CORE
|
2017-04-25 08:45:34 -07:00
|
|
|
"""
|
|
|
|
|
2019-02-16 09:50:19 -08:00
|
|
|
import logging
|
2018-03-26 10:27:39 -07:00
|
|
|
import os
|
|
|
|
|
2019-04-29 23:31:47 -07:00
|
|
|
from core import constants, utils
|
|
|
|
from core.config import Configuration
|
2018-03-29 14:38:32 -07:00
|
|
|
from core.emane import emanemodel
|
2019-04-29 23:31:47 -07:00
|
|
|
from core.emulator.enumerations import ConfigDataTypes
|
2016-09-14 17:15:43 -07:00
|
|
|
|
|
|
|
|
2018-03-29 14:38:32 -07:00
|
|
|
class EmaneTdmaModel(emanemodel.EmaneModel):
|
2016-09-14 17:15:43 -07:00
|
|
|
# model name
|
2017-04-25 08:45:34 -07:00
|
|
|
name = "emane_tdma"
|
2018-03-29 13:32:06 -07:00
|
|
|
|
|
|
|
# mac configuration
|
2018-03-30 12:08:33 -07:00
|
|
|
mac_library = "tdmaeventschedulerradiomodel"
|
2019-04-08 09:49:37 -07:00
|
|
|
mac_xml = "tdmaeventschedulerradiomodel.xml"
|
2018-03-30 12:08:33 -07:00
|
|
|
|
|
|
|
# add custom schedule options and ignore it when writing emane xml
|
2018-03-26 10:27:39 -07:00
|
|
|
schedule_name = "schedule"
|
2019-09-10 15:10:24 -07:00
|
|
|
default_schedule = os.path.join(
|
|
|
|
constants.CORE_DATA_DIR, "examples", "tdma", "schedule.xml"
|
|
|
|
)
|
2018-03-29 13:32:06 -07:00
|
|
|
config_ignore = {schedule_name}
|
2016-09-14 17:15:43 -07:00
|
|
|
|
2019-04-08 09:49:37 -07:00
|
|
|
@classmethod
|
2020-01-14 16:27:08 -08:00
|
|
|
def load(cls, emane_prefix: str) -> None:
|
2019-04-08 09:49:37 -07:00
|
|
|
cls.mac_defaults["pcrcurveuri"] = os.path.join(
|
|
|
|
emane_prefix,
|
2019-09-10 15:10:24 -07:00
|
|
|
"share/emane/xml/models/mac/tdmaeventscheduler/tdmabasemodelpcr.xml",
|
2019-04-08 09:49:37 -07:00
|
|
|
)
|
2019-10-23 09:51:52 -07:00
|
|
|
super().load(emane_prefix)
|
2019-04-08 09:49:37 -07:00
|
|
|
cls.mac_config.insert(
|
|
|
|
0,
|
|
|
|
Configuration(
|
|
|
|
_id=cls.schedule_name,
|
|
|
|
_type=ConfigDataTypes.STRING,
|
|
|
|
default=cls.default_schedule,
|
2019-09-10 15:10:24 -07:00
|
|
|
label="TDMA schedule file (core)",
|
|
|
|
),
|
2019-04-08 09:49:37 -07:00
|
|
|
)
|
|
|
|
|
2020-01-14 16:27:08 -08:00
|
|
|
def post_startup(self) -> None:
|
2018-03-26 10:27:39 -07:00
|
|
|
"""
|
|
|
|
Logic to execute after the emane manager is finished with startup.
|
|
|
|
|
|
|
|
:return: nothing
|
|
|
|
"""
|
|
|
|
# get configured schedule
|
2019-04-29 23:31:47 -07:00
|
|
|
config = self.session.emane.get_configs(node_id=self.id, config_type=self.name)
|
2018-06-06 14:51:45 -07:00
|
|
|
if not config:
|
2018-03-25 22:08:22 -07:00
|
|
|
return
|
2018-06-06 14:51:45 -07:00
|
|
|
schedule = config[self.schedule_name]
|
2018-03-28 13:58:49 -07:00
|
|
|
|
2018-06-11 12:26:51 -07:00
|
|
|
# get the set event device
|
|
|
|
event_device = self.session.emane.event_device
|
2018-03-26 10:27:39 -07:00
|
|
|
|
|
|
|
# initiate tdma schedule
|
2019-09-10 15:10:24 -07:00
|
|
|
logging.info(
|
|
|
|
"setting up tdma schedule: schedule(%s) device(%s)", schedule, event_device
|
|
|
|
)
|
2019-10-18 10:33:31 -07:00
|
|
|
args = f"emaneevent-tdmaschedule -i {event_device} {schedule}"
|
2019-10-21 10:32:42 -07:00
|
|
|
utils.cmd(args)
|