daemon: fixed issue with using the wrong emane network for a given emane connected interface

This commit is contained in:
Blake Harnden 2020-09-24 11:54:49 -07:00
parent 371ca72900
commit 0177b07f03
2 changed files with 15 additions and 10 deletions

View file

@ -71,7 +71,6 @@ class EmaneState(Enum):
@dataclass @dataclass
class StartData: class StartData:
emane_net: EmaneNet
node: CoreNodeBase node: CoreNodeBase
ifaces: List[CoreInterface] = field(default_factory=list) ifaces: List[CoreInterface] = field(default_factory=list)
@ -370,9 +369,7 @@ class EmaneManager(ModelManager):
iface.name, iface.name,
) )
continue continue
start_node = node_map.setdefault( start_node = node_map.setdefault(iface.node, StartData(iface.node))
iface.node, StartData(emane_net, iface.node)
)
start_node.ifaces.append(iface) start_node.ifaces.append(iface)
start_nodes = sorted(node_map.values(), key=lambda x: x.node.id) start_nodes = sorted(node_map.values(), key=lambda x: x.node.id)
for start_node in start_nodes: for start_node in start_nodes:
@ -386,7 +383,7 @@ class EmaneManager(ModelManager):
emanexml.build_platform_xml(self, control_net, data) emanexml.build_platform_xml(self, control_net, data)
self.start_daemon(data.node) self.start_daemon(data.node)
for iface in data.ifaces: for iface in data.ifaces:
self.install_iface(data.emane_net, iface) self.install_iface(iface)
def set_nem(self, nem_id: int, iface: CoreInterface) -> None: def set_nem(self, nem_id: int, iface: CoreInterface) -> None:
if nem_id in self.nems_to_ifaces: if nem_id in self.nems_to_ifaces:
@ -606,7 +603,12 @@ class EmaneManager(ModelManager):
node.host_cmd(emanecmd, cwd=path) node.host_cmd(emanecmd, cwd=path)
logging.info("node(%s) host emane daemon running: %s", node.name, emanecmd) logging.info("node(%s) host emane daemon running: %s", node.name, emanecmd)
def install_iface(self, emane_net: EmaneNet, iface: CoreInterface) -> None: def install_iface(self, iface: CoreInterface) -> None:
emane_net = iface.net
if not isinstance(emane_net, EmaneNet):
raise CoreError(
f"emane interface not connected to emane net: {emane_net.name}"
)
config = self.get_iface_config(emane_net, iface) config = self.get_iface_config(emane_net, iface)
external = config.get("external", "0") external = config.get("external", "0")
if isinstance(iface, TunTap) and external == "0": if isinstance(iface, TunTap) and external == "0":

View file

@ -7,6 +7,7 @@ from lxml import etree
from core import utils from core import utils
from core.config import Configuration from core.config import Configuration
from core.emane.nodes import EmaneNet
from core.emulator.distributed import DistributedServer from core.emulator.distributed import DistributedServer
from core.errors import CoreError from core.errors import CoreError
from core.nodes.base import CoreNode, CoreNodeBase from core.nodes.base import CoreNode, CoreNodeBase
@ -166,8 +167,12 @@ def build_platform_xml(
add_param(platform_element, name, value) add_param(platform_element, name, value)
# create nem xml entries for all interfaces # create nem xml entries for all interfaces
emane_net = data.emane_net
for iface in data.ifaces: for iface in data.ifaces:
emane_net = iface.net
if not isinstance(emane_net, EmaneNet):
raise CoreError(
f"emane interface not connected to emane net: {emane_net.name}"
)
nem_id = emane_manager.next_nem_id() nem_id = emane_manager.next_nem_id()
emane_manager.set_nem(nem_id, iface) emane_manager.set_nem(nem_id, iface)
emane_manager.write_nem(iface, nem_id) emane_manager.write_nem(iface, nem_id)
@ -180,9 +185,7 @@ def build_platform_xml(
"nem", id=str(nem_id), name=iface.localname, definition=nem_definition "nem", id=str(nem_id), name=iface.localname, definition=nem_definition
) )
# check if this is an external transport, get default config if an interface # check if this is an external transport
# specific one does not exist
config = emane_manager.get_iface_config(emane_net, iface)
if is_external(config): if is_external(config):
nem_element.set("transport", "external") nem_element.set("transport", "external")
platform_endpoint = "platformendpoint" platform_endpoint = "platformendpoint"