daemon: initial changes to support one emane process per nem

This commit is contained in:
Blake Harnden 2021-05-18 09:48:38 -07:00
parent d16f6b234b
commit e2a9f6b1f4
4 changed files with 109 additions and 99 deletions

View file

@ -6,6 +6,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Set, Tuple
from lxml import etree
from core.emane.nodes import EmaneNet
from core.emulator.data import LinkData
from core.emulator.enumerations import LinkTypes, MessageFlags
from core.nodes.network import CtrlNet
@ -24,7 +25,6 @@ except ImportError:
if TYPE_CHECKING:
from core.emane.emanemanager import EmaneManager
DEFAULT_PORT: int = 47_000
MAC_COMPONENT_INDEX: int = 1
EMANE_RFPIPE: str = "rfpipemaclayer"
EMANE_80211: str = "ieee80211abgmaclayer"
@ -79,10 +79,10 @@ class EmaneLink:
class EmaneClient:
def __init__(self, address: str) -> None:
def __init__(self, address: str, port: int) -> None:
self.address: str = address
self.client: shell.ControlPortClient = shell.ControlPortClient(
self.address, DEFAULT_PORT
self.address, port
)
self.nems: Dict[int, LossTable] = {}
self.setup()
@ -204,22 +204,28 @@ class EmaneLinkMonitor:
def initialize(self) -> None:
addresses = self.get_addresses()
for address in addresses:
client = EmaneClient(address)
for address, port in addresses:
client = EmaneClient(address, port)
if client.nems:
self.clients.append(client)
def get_addresses(self) -> List[str]:
def get_addresses(self) -> List[Tuple[str, int]]:
addresses = []
nodes = self.emane_manager.getnodes()
for node in nodes:
control = None
ports = []
for iface in node.get_ifaces():
if isinstance(iface.net, CtrlNet):
ip4 = iface.get_ip4()
if ip4:
address = str(ip4.ip)
addresses.append(address)
break
control = str(ip4.ip)
if isinstance(iface.net, EmaneNet):
port = self.emane_manager.get_nem_port(iface)
ports.append(port)
if control:
for port in ports:
addresses.append((control, port))
return addresses
def check_links(self) -> None: