def build_xml_files(self, config: Dict[str, str], interface: CoreInterface = None) -> None: """ Build the necessary nem and commeffect XMLs in the given path. If an individual NEM has a nonstandard config, we need to build that file also. Otherwise the WLAN-wide nXXemane_commeffectnem.xml, nXXemane_commeffectshim.xml are used. :param config: emane model configuration for the node and interface :param interface: interface for the emane node :return: nothing """ # retrieve xml names nem_name = emanexml.nem_file_name(self, interface) shim_name = emanexml.shim_file_name(self, interface) # create and write nem document nem_element = etree.Element("nem", name=f"{self.name} NEM", type="unstructured") transport_type = TransportType.VIRTUAL if interface and interface.transport_type == TransportType.RAW: transport_type = TransportType.RAW transport_file = emanexml.transport_file_name(self.id, transport_type) etree.SubElement(nem_element, "transport", definition=transport_file) # set shim configuration etree.SubElement(nem_element, "shim", definition=shim_name) nem_file = os.path.join(self.session.session_dir, nem_name) emanexml.create_file(nem_element, "nem", nem_file) # create and write shim document shim_element = etree.Element("shim", name=f"{self.name} SHIM", library=self.shim_library) # append all shim options (except filterfile) to shimdoc for configuration in self.config_shim: name = configuration.id if name == "filterfile": continue value = config[name] emanexml.add_param(shim_element, name, value) # empty filterfile is not allowed ff = config["filterfile"] if ff.strip() != "": emanexml.add_param(shim_element, "filterfile", ff) shim_file = os.path.join(self.session.session_dir, shim_name) emanexml.create_file(shim_element, "shim", shim_file)
def build_xml_files(self, config, interface=None): """ Build the necessary nem and commeffect XMLs in the given path. If an individual NEM has a nonstandard config, we need to build that file also. Otherwise the WLAN-wide nXXemane_commeffectnem.xml, nXXemane_commeffectshim.xml are used. :param dict config: emane model configuration for the node and interface :param interface: interface for the emane node :return: nothing """ # retrieve xml names nem_name = emanexml.nem_file_name(self, interface) shim_name = emanexml.shim_file_name(self, interface) # create and write nem document nem_element = etree.Element("nem", name="%s NEM" % self.name, type="unstructured") transport_type = "virtual" if interface and interface.transport_type == "raw": transport_type = "raw" transport_file = emanexml.transport_file_name(self.object_id, transport_type) etree.SubElement(nem_element, "transport", definition=transport_file) # set shim configuration etree.SubElement(nem_element, "shim", definition=shim_name) nem_file = os.path.join(self.session.session_dir, nem_name) emanexml.create_file(nem_element, "nem", nem_file) # create and write shim document shim_element = etree.Element("shim", name="%s SHIM" % self.name, library=self.shim_library) # append all shim options (except filterfile) to shimdoc for configuration in self.config_shim: name = configuration.id if name == "filterfile": continue value = config[name] emanexml.add_param(shim_element, name, value) # empty filterfile is not allowed ff = config["filterfile"] if ff.strip() != "": emanexml.add_param(shim_element, "filterfile", ff) shim_file = os.path.join(self.session.session_dir, shim_name) emanexml.create_file(shim_element, "shim", shim_file)