daemon: update how emane is started on nodes, fixing issue with multiple interfaces running emane, added test case to check on this in the future
This commit is contained in:
parent
82d87445b6
commit
d981d88a6f
8 changed files with 227 additions and 127 deletions
|
@ -16,7 +16,7 @@ from core.configservice.dependencies import ConfigServiceDependencies
|
|||
from core.emulator.data import InterfaceData, LinkData, LinkOptions
|
||||
from core.emulator.enumerations import LinkTypes, MessageFlags, NodeTypes
|
||||
from core.errors import CoreCommandError, CoreError
|
||||
from core.executables import MOUNT, VNODED
|
||||
from core.executables import MOUNT, TEST, VNODED
|
||||
from core.nodes.client import VnodeClient
|
||||
from core.nodes.interface import CoreInterface, TunTap, Veth
|
||||
from core.nodes.netclient import LinuxNetClient, get_net_client
|
||||
|
@ -294,6 +294,16 @@ class CoreNodeBase(NodeBase):
|
|||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@abc.abstractmethod
|
||||
def path_exists(self, path: str) -> bool:
|
||||
"""
|
||||
Determines if a file or directory path exists.
|
||||
|
||||
:param path: path to file or directory
|
||||
:return: True if path exists, False otherwise
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def add_config_service(self, service_class: "ConfigServiceType") -> None:
|
||||
"""
|
||||
Adds a configuration service to the node.
|
||||
|
@ -602,6 +612,19 @@ class CoreNode(CoreNodeBase):
|
|||
args = self.client.create_cmd(args, shell)
|
||||
return self.server.remote_cmd(args, wait=wait)
|
||||
|
||||
def path_exists(self, path: str) -> bool:
|
||||
"""
|
||||
Determines if a file or directory path exists.
|
||||
|
||||
:param path: path to file or directory
|
||||
:return: True if path exists, False otherwise
|
||||
"""
|
||||
try:
|
||||
self.cmd(f"{TEST} -e {path}")
|
||||
return True
|
||||
except CoreCommandError:
|
||||
return False
|
||||
|
||||
def termcmdstring(self, sh: str = "/bin/sh") -> str:
|
||||
"""
|
||||
Create a terminal command string.
|
||||
|
|
|
@ -528,8 +528,9 @@ class TunTap(CoreInterface):
|
|||
# check if this is an EMANE interface; if so, continue
|
||||
# waiting if EMANE is still running
|
||||
should_retry = count < 5
|
||||
is_emane_running = self.node.session.emane.emanerunning(self.node)
|
||||
if all([should_retry, self.net.is_emane, is_emane_running]):
|
||||
is_emane = self.session.emane.is_emane_net(self.net)
|
||||
is_emane_running = self.session.emane.emanerunning(self.node)
|
||||
if all([should_retry, is_emane, is_emane_running]):
|
||||
count += 1
|
||||
else:
|
||||
raise RuntimeError("node device failed to exist")
|
||||
|
|
|
@ -11,7 +11,7 @@ from core.emulator.data import InterfaceData, LinkOptions
|
|||
from core.emulator.distributed import DistributedServer
|
||||
from core.emulator.enumerations import NodeTypes, TransportType
|
||||
from core.errors import CoreCommandError, CoreError
|
||||
from core.executables import MOUNT, UMOUNT
|
||||
from core.executables import MOUNT, TEST, UMOUNT
|
||||
from core.nodes.base import CoreNetworkBase, CoreNodeBase
|
||||
from core.nodes.interface import CoreInterface
|
||||
from core.nodes.network import CoreNetwork, GreTap
|
||||
|
@ -55,6 +55,19 @@ class PhysicalNode(CoreNodeBase):
|
|||
|
||||
self.rmnodedir()
|
||||
|
||||
def path_exists(self, path: str) -> bool:
|
||||
"""
|
||||
Determines if a file or directory path exists.
|
||||
|
||||
:param path: path to file or directory
|
||||
:return: True if path exists, False otherwise
|
||||
"""
|
||||
try:
|
||||
self.host_cmd(f"{TEST} -e {path}")
|
||||
return True
|
||||
except CoreCommandError:
|
||||
return False
|
||||
|
||||
def termcmdstring(self, sh: str = "/bin/sh") -> str:
|
||||
"""
|
||||
Create a terminal command string.
|
||||
|
@ -291,6 +304,19 @@ class Rj45Node(CoreNodeBase):
|
|||
self.up = False
|
||||
self.restorestate()
|
||||
|
||||
def path_exists(self, path: str) -> bool:
|
||||
"""
|
||||
Determines if a file or directory path exists.
|
||||
|
||||
:param path: path to file or directory
|
||||
:return: True if path exists, False otherwise
|
||||
"""
|
||||
try:
|
||||
self.host_cmd(f"{TEST} -e {path}")
|
||||
return True
|
||||
except CoreCommandError:
|
||||
return False
|
||||
|
||||
def new_iface(
|
||||
self, net: CoreNetworkBase, iface_data: InterfaceData
|
||||
) -> CoreInterface:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue