daemon: updates to support running emane on the fly for a newly connected link
This commit is contained in:
parent
5cc4d92760
commit
b3a4b1cb10
3 changed files with 14 additions and 4 deletions
|
@ -252,8 +252,8 @@ class EmaneManager(ModelManager):
|
||||||
"""
|
"""
|
||||||
with self._emane_node_lock:
|
with self._emane_node_lock:
|
||||||
if emane_net.id in self._emane_nets:
|
if emane_net.id in self._emane_nets:
|
||||||
raise KeyError(
|
raise CoreError(
|
||||||
f"non-unique EMANE object id {emane_net.id} for {emane_net}"
|
f"duplicate emane network({emane_net.id}): {emane_net.name}"
|
||||||
)
|
)
|
||||||
self._emane_nets[emane_net.id] = emane_net
|
self._emane_nets[emane_net.id] = emane_net
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,13 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type
|
||||||
|
|
||||||
from core.emulator.data import InterfaceData, LinkData, LinkOptions
|
from core.emulator.data import InterfaceData, LinkData, LinkOptions
|
||||||
from core.emulator.distributed import DistributedServer
|
from core.emulator.distributed import DistributedServer
|
||||||
from core.emulator.enumerations import LinkTypes, MessageFlags, NodeTypes, RegisterTlvs
|
from core.emulator.enumerations import (
|
||||||
|
EventTypes,
|
||||||
|
LinkTypes,
|
||||||
|
MessageFlags,
|
||||||
|
NodeTypes,
|
||||||
|
RegisterTlvs,
|
||||||
|
)
|
||||||
from core.errors import CoreError
|
from core.errors import CoreError
|
||||||
from core.nodes.base import CoreNetworkBase, CoreNode
|
from core.nodes.base import CoreNetworkBase, CoreNode
|
||||||
from core.nodes.interface import CoreInterface
|
from core.nodes.interface import CoreInterface
|
||||||
|
@ -203,4 +209,6 @@ class EmaneNet(CoreNetworkBase):
|
||||||
iface.set_mac(iface_data.mac)
|
iface.set_mac(iface_data.mac)
|
||||||
for ip in iface_data.get_ips():
|
for ip in iface_data.get_ips():
|
||||||
iface.add_ip(ip)
|
iface.add_ip(ip)
|
||||||
|
if self.session.state == EventTypes.RUNTIME_STATE:
|
||||||
|
self.session.emane.start_iface(self, iface)
|
||||||
return iface
|
return iface
|
||||||
|
|
|
@ -531,7 +531,7 @@ class Session:
|
||||||
self.set_node_position(node, options)
|
self.set_node_position(node, options)
|
||||||
|
|
||||||
# add services to needed nodes
|
# add services to needed nodes
|
||||||
if isinstance(node, (CoreNode, PhysicalNode, DockerNode, LxcNode)):
|
if isinstance(node, (CoreNode, PhysicalNode)):
|
||||||
node.type = options.model
|
node.type = options.model
|
||||||
logging.debug("set node type: %s", node.type)
|
logging.debug("set node type: %s", node.type)
|
||||||
self.services.add_services(node, node.type, options.services)
|
self.services.add_services(node, node.type, options.services)
|
||||||
|
@ -545,6 +545,8 @@ class Session:
|
||||||
# ensure default emane configuration
|
# ensure default emane configuration
|
||||||
if isinstance(node, EmaneNet) and options.emane:
|
if isinstance(node, EmaneNet) and options.emane:
|
||||||
self.emane.set_model_config(_id, options.emane)
|
self.emane.set_model_config(_id, options.emane)
|
||||||
|
if self.state == EventTypes.RUNTIME_STATE:
|
||||||
|
self.emane.add_node(node)
|
||||||
# set default wlan config if needed
|
# set default wlan config if needed
|
||||||
if isinstance(node, WlanNode):
|
if isinstance(node, WlanNode):
|
||||||
self.mobility.set_model_config(_id, BasicRangeModel.name)
|
self.mobility.set_model_config(_id, BasicRangeModel.name)
|
||||||
|
|
Loading…
Add table
Reference in a new issue