from typing import Any, List from core.config import ConfigurableManager, ConfigurableOptions, Configuration from core.emulator.enumerations import ConfigDataTypes, RegisterTlvs from core.plugins.sdt import Sdt class SessionConfig(ConfigurableManager, ConfigurableOptions): """ Provides session configuration. """ name: str = "session" options: List[Configuration] = [ Configuration( id="controlnet", type=ConfigDataTypes.STRING, label="Control Network" ), Configuration( id="controlnet0", type=ConfigDataTypes.STRING, label="Control Network 0" ), Configuration( id="controlnet1", type=ConfigDataTypes.STRING, label="Control Network 1" ), Configuration( id="controlnet2", type=ConfigDataTypes.STRING, label="Control Network 2" ), Configuration( id="controlnet3", type=ConfigDataTypes.STRING, label="Control Network 3" ), Configuration( id="controlnet_updown_script", type=ConfigDataTypes.STRING, label="Control Network Script", ), Configuration( id="enablerj45", type=ConfigDataTypes.BOOL, default="1", label="Enable RJ45s", ), Configuration( id="preservedir", type=ConfigDataTypes.BOOL, default="0", label="Preserve session dir", ), Configuration( id="enablesdt", type=ConfigDataTypes.BOOL, default="0", label="Enable SDT3D output", ), Configuration( id="sdturl", type=ConfigDataTypes.STRING, default=Sdt.DEFAULT_SDT_URL, label="SDT3D URL", ), Configuration( id="ovs", type=ConfigDataTypes.BOOL, default="0", label="Enable OVS" ), Configuration( id="platform_id_start", type=ConfigDataTypes.INT32, default="1", label="EMANE Platform ID Start", ), Configuration( id="nem_id_start", type=ConfigDataTypes.INT32, default="1", label="EMANE NEM ID Start", ), Configuration( id="link_enabled", type=ConfigDataTypes.BOOL, default="1", label="EMANE Links?", ), Configuration( id="loss_threshold", type=ConfigDataTypes.INT32, default="30", label="EMANE Link Loss Threshold (%)", ), Configuration( id="link_interval", type=ConfigDataTypes.INT32, default="1", label="EMANE Link Check Interval (sec)", ), Configuration( id="link_timeout", type=ConfigDataTypes.INT32, default="4", label="EMANE Link Timeout (sec)", ), ] config_type: RegisterTlvs = RegisterTlvs.UTILITY def __init__(self) -> None: super().__init__() self.set_configs(self.default_values()) def get_config( self, _id: str, node_id: int = ConfigurableManager._default_node, config_type: str = ConfigurableManager._default_type, default: Any = None, ) -> str: """ Retrieves a specific configuration for a node and configuration type. :param _id: specific configuration to retrieve :param node_id: node id to store configuration for :param config_type: configuration type to store configuration for :param default: default value to return when value is not found :return: configuration value """ value = super().get_config(_id, node_id, config_type, default) if value == "": value = default return value def get_config_bool(self, name: str, default: Any = None) -> bool: """ Get configuration value as a boolean. :param name: configuration name :param default: default value if not found :return: boolean for configuration value """ value = self.get_config(name) if value is None: return default return value.lower() == "true" def get_config_int(self, name: str, default: Any = None) -> int: """ Get configuration value as int. :param name: configuration name :param default: default value if not found :return: int for configuration value """ value = self.get_config(name, default=default) if value is not None: value = int(value) return value def config_reset(self, node_id: int = None) -> None: """ Clear prior configuration files and reset to default values. :param node_id: node id to store configuration for :return: nothing """ super().config_reset(node_id) self.set_configs(self.default_values())