fixed issue where config messages were not being broadcasted out
This commit is contained in:
parent
3ba7e3b1a3
commit
ad179438c6
3 changed files with 41 additions and 27 deletions
|
@ -129,11 +129,7 @@ class CoreRequestHandler(SocketServer.BaseRequestHandler):
|
||||||
|
|
||||||
logger.info("connection closed: %s", self.client_address)
|
logger.info("connection closed: %s", self.client_address)
|
||||||
if self.session:
|
if self.session:
|
||||||
self.session.event_handlers.remove(self.handle_broadcast_event)
|
self.remove_session_handlers()
|
||||||
self.session.exception_handlers.remove(self.handle_broadcast_exception)
|
|
||||||
self.session.node_handlers.remove(self.handle_broadcast_node)
|
|
||||||
self.session.link_handlers.remove(self.handle_broadcast_link)
|
|
||||||
self.session.file_handlers.remove(self.handle_broadcast_file)
|
|
||||||
|
|
||||||
# remove client from session broker and shutdown if there are no clients
|
# remove client from session broker and shutdown if there are no clients
|
||||||
self.session.broker.session_clients.remove(self)
|
self.session.broker.session_clients.remove(self)
|
||||||
|
@ -517,11 +513,7 @@ class CoreRequestHandler(SocketServer.BaseRequestHandler):
|
||||||
|
|
||||||
# add handlers for various data
|
# add handlers for various data
|
||||||
logger.info("adding session broadcast handlers")
|
logger.info("adding session broadcast handlers")
|
||||||
self.session.event_handlers.append(self.handle_broadcast_event)
|
self.add_session_handlers()
|
||||||
self.session.exception_handlers.append(self.handle_broadcast_exception)
|
|
||||||
self.session.node_handlers.append(self.handle_broadcast_node)
|
|
||||||
self.session.link_handlers.append(self.handle_broadcast_link)
|
|
||||||
self.session.file_handlers.append(self.handle_broadcast_file)
|
|
||||||
|
|
||||||
# set initial session state
|
# set initial session state
|
||||||
self.session.set_state(state=EventTypes.DEFINITION_STATE.value)
|
self.session.set_state(state=EventTypes.DEFINITION_STATE.value)
|
||||||
|
@ -551,6 +543,24 @@ class CoreRequestHandler(SocketServer.BaseRequestHandler):
|
||||||
logger.info("BROADCAST TO OTHER CLIENT: %s", client)
|
logger.info("BROADCAST TO OTHER CLIENT: %s", client)
|
||||||
client.sendall(message.raw_message)
|
client.sendall(message.raw_message)
|
||||||
|
|
||||||
|
def add_session_handlers(self):
|
||||||
|
logger.info("adding session broadcast handlers")
|
||||||
|
self.session.event_handlers.append(self.handle_broadcast_event)
|
||||||
|
self.session.exception_handlers.append(self.handle_broadcast_exception)
|
||||||
|
self.session.node_handlers.append(self.handle_broadcast_node)
|
||||||
|
self.session.link_handlers.append(self.handle_broadcast_link)
|
||||||
|
self.session.file_handlers.append(self.handle_broadcast_file)
|
||||||
|
self.session.config_handlers.append(self.handle_broadcast_config)
|
||||||
|
|
||||||
|
def remove_session_handlers(self):
|
||||||
|
logger.info("removing session broadcast handlers")
|
||||||
|
self.session.event_handlers.remove(self.handle_broadcast_event)
|
||||||
|
self.session.exception_handlers.remove(self.handle_broadcast_exception)
|
||||||
|
self.session.node_handlers.remove(self.handle_broadcast_node)
|
||||||
|
self.session.link_handlers.remove(self.handle_broadcast_link)
|
||||||
|
self.session.file_handlers.remove(self.handle_broadcast_file)
|
||||||
|
self.session.config_handlers.remove(self.handle_broadcast_config)
|
||||||
|
|
||||||
def handle_node_message(self, message):
|
def handle_node_message(self, message):
|
||||||
"""
|
"""
|
||||||
Node Message handler
|
Node Message handler
|
||||||
|
@ -1506,11 +1516,7 @@ class CoreRequestHandler(SocketServer.BaseRequestHandler):
|
||||||
|
|
||||||
# add broadcast handlers
|
# add broadcast handlers
|
||||||
logger.info("adding session broadcast handlers")
|
logger.info("adding session broadcast handlers")
|
||||||
self.session.event_handlers.append(self.handle_broadcast_event)
|
self.add_session_handlers()
|
||||||
self.session.exception_handlers.append(self.handle_broadcast_exception)
|
|
||||||
self.session.node_handlers.append(self.handle_broadcast_node)
|
|
||||||
self.session.link_handlers.append(self.handle_broadcast_link)
|
|
||||||
self.session.file_handlers.append(self.handle_broadcast_file)
|
|
||||||
|
|
||||||
if user is not None:
|
if user is not None:
|
||||||
self.session.set_user(user)
|
self.session.set_user(user)
|
||||||
|
@ -1751,11 +1757,7 @@ class BaseAuxRequestHandler(CoreRequestHandler):
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
if self.session:
|
if self.session:
|
||||||
self.session.event_handlers.remove(self.handle_broadcast_event)
|
self.remove_session_handlers()
|
||||||
self.session.exception_handlers.remove(self.handle_broadcast_exception)
|
|
||||||
self.session.node_handlers.remove(self.handle_broadcast_node)
|
|
||||||
self.session.link_handlers.remove(self.handle_broadcast_link)
|
|
||||||
self.session.file_handlers.remove(self.handle_broadcast_file)
|
|
||||||
self.session.shutdown()
|
self.session.shutdown()
|
||||||
return SocketServer.BaseRequestHandler.finish(self)
|
return SocketServer.BaseRequestHandler.finish(self)
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ that manages a CORE session.
|
||||||
|
|
||||||
import atexit
|
import atexit
|
||||||
import os
|
import os
|
||||||
|
import pprint
|
||||||
import random
|
import random
|
||||||
import shlex
|
import shlex
|
||||||
import shutil
|
import shutil
|
||||||
|
@ -1270,24 +1271,29 @@ class Session(object):
|
||||||
links_data.append(link_data)
|
links_data.append(link_data)
|
||||||
|
|
||||||
# send all nodes first, so that they will exist for any links
|
# send all nodes first, so that they will exist for any links
|
||||||
logger.info("nodes: %s", nodes_data)
|
logger.info("sending nodes:")
|
||||||
logger.info("links: %s", links_data)
|
|
||||||
for node_data in nodes_data:
|
for node_data in nodes_data:
|
||||||
|
logger.info(pprint.pformat(dict(node_data._asdict())))
|
||||||
self.broadcast_node(node_data)
|
self.broadcast_node(node_data)
|
||||||
|
|
||||||
|
logger.info("sending links:")
|
||||||
for link_data in links_data:
|
for link_data in links_data:
|
||||||
|
logger.info(pprint.pformat(dict(link_data._asdict())))
|
||||||
self.broadcast_link(link_data)
|
self.broadcast_link(link_data)
|
||||||
|
|
||||||
# send model info
|
# send model info
|
||||||
configs = self.mobility.getallconfigs()
|
configs = self.mobility.getallconfigs()
|
||||||
configs += self.emane.getallconfigs()
|
configs += self.emane.getallconfigs()
|
||||||
|
logger.info("sending model configs:")
|
||||||
for node_number, cls, values in configs:
|
for node_number, cls, values in configs:
|
||||||
|
logger.info("config: node(%s) class(%s) values(%s)", node_number, cls, values)
|
||||||
config_data = cls.config_data(
|
config_data = cls.config_data(
|
||||||
flags=0,
|
flags=0,
|
||||||
node_id=node_number,
|
node_id=node_number,
|
||||||
type_flags=ConfigFlags.UPDATE.value,
|
type_flags=ConfigFlags.UPDATE.value,
|
||||||
values=values
|
values=values
|
||||||
)
|
)
|
||||||
|
logger.info(pprint.pformat(dict(config_data._asdict())))
|
||||||
self.broadcast_config(config_data)
|
self.broadcast_config(config_data)
|
||||||
|
|
||||||
# service customizations
|
# service customizations
|
||||||
|
|
|
@ -24,12 +24,14 @@ class CoreDocumentParser1(object):
|
||||||
|
|
||||||
def __init__(self, session, filename, options):
|
def __init__(self, session, filename, options):
|
||||||
"""
|
"""
|
||||||
|
Creates an CoreDocumentParser1 object.
|
||||||
|
|
||||||
:param core.session.Session session:
|
:param core.session.Session session:
|
||||||
:param filename:
|
:param str filename: file name to open and parse
|
||||||
:param options:
|
:param dict options: parsing options
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
logger.info("creating xml parser: file (%s) options(%s)", filename, options)
|
||||||
self.session = session
|
self.session = session
|
||||||
self.filename = filename
|
self.filename = filename
|
||||||
if 'dom' in options:
|
if 'dom' in options:
|
||||||
|
@ -56,11 +58,10 @@ class CoreDocumentParser1(object):
|
||||||
def get_scenario(dom):
|
def get_scenario(dom):
|
||||||
scenario = xmlutils.get_first_child_by_tag_name(dom, 'scenario')
|
scenario = xmlutils.get_first_child_by_tag_name(dom, 'scenario')
|
||||||
if not scenario:
|
if not scenario:
|
||||||
raise ValueError, 'no scenario element found'
|
raise ValueError('no scenario element found')
|
||||||
version = scenario.getAttribute('version')
|
version = scenario.getAttribute('version')
|
||||||
if version and version != '1.0':
|
if version and version != '1.0':
|
||||||
raise ValueError, \
|
raise ValueError('unsupported scenario version found: \'%s\'' % version)
|
||||||
'unsupported scenario version found: \'%s\'' % version
|
|
||||||
return scenario
|
return scenario
|
||||||
|
|
||||||
def parse_scenario(self):
|
def parse_scenario(self):
|
||||||
|
@ -210,6 +211,8 @@ class CoreDocumentParser1(object):
|
||||||
else:
|
else:
|
||||||
# TODO: any other config managers?
|
# TODO: any other config managers?
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
logger.info("setting wireless link params: node(%s) model(%s) mobility_model(%s)",
|
||||||
|
nodenum, model_name, mobility_model_name)
|
||||||
mgr.setconfig_keyvalues(nodenum, model_name, link_params.items())
|
mgr.setconfig_keyvalues(nodenum, model_name, link_params.items())
|
||||||
if mobility_model_name and mobility_params:
|
if mobility_model_name and mobility_params:
|
||||||
mgr.setconfig_keyvalues(nodenum, mobility_model_name, mobility_params.items())
|
mgr.setconfig_keyvalues(nodenum, mobility_model_name, mobility_params.items())
|
||||||
|
@ -274,6 +277,7 @@ class CoreDocumentParser1(object):
|
||||||
else:
|
else:
|
||||||
mobility_model_name = None
|
mobility_model_name = None
|
||||||
mobility_params = None
|
mobility_params = None
|
||||||
|
|
||||||
if channel_type == 'wireless':
|
if channel_type == 'wireless':
|
||||||
self.set_wireless_link_parameters(channel, link_params, mobility_model_name, mobility_params)
|
self.set_wireless_link_parameters(channel, link_params, mobility_model_name, mobility_params)
|
||||||
elif channel_type == 'ethernet':
|
elif channel_type == 'ethernet':
|
||||||
|
@ -282,10 +286,12 @@ class CoreDocumentParser1(object):
|
||||||
self.set_ethernet_link_parameters(channel, link_params, mobility_model_name, mobility_params)
|
self.set_ethernet_link_parameters(channel, link_params, mobility_model_name, mobility_params)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
layer2_device = []
|
layer2_device = []
|
||||||
for dev, if_name in self.iter_network_member_devices(channel):
|
for dev, if_name in self.iter_network_member_devices(channel):
|
||||||
if self.device_type(dev) in self.layer2_device_types:
|
if self.device_type(dev) in self.layer2_device_types:
|
||||||
layer2_device.append((dev, if_name))
|
layer2_device.append((dev, if_name))
|
||||||
|
|
||||||
assert len(layer2_device) <= 2
|
assert len(layer2_device) <= 2
|
||||||
if len(layer2_device) == 2:
|
if len(layer2_device) == 2:
|
||||||
self.link_layer2_devices(layer2_device[0][0], layer2_device[0][1],
|
self.link_layer2_devices(layer2_device[0][0], layer2_device[0][1],
|
||||||
|
|
Loading…
Add table
Reference in a new issue