From 4a2810e9b23dbf882c6dfb9536b80ddd483e151d Mon Sep 17 00:00:00 2001 From: "Blake J. Harnden" Date: Thu, 26 Apr 2018 14:26:39 -0700 Subject: [PATCH] removed issue with double loading services from core-daemon, fixed exceptions noted as not an error previously and updated code to more gracefully handle those cases, fixed issue with add_node when setting node.ype for all nodes --- daemon/core/future/coreemu.py | 3 ++- daemon/core/future/futuredata.py | 2 +- daemon/core/mobility.py | 6 +---- daemon/core/xml/xmlwriter1.py | 39 +++++++++++++++----------------- daemon/scripts/core-daemon | 4 ---- 5 files changed, 22 insertions(+), 32 deletions(-) diff --git a/daemon/core/future/coreemu.py b/daemon/core/future/coreemu.py index f571f08c..9e9133bc 100644 --- a/daemon/core/future/coreemu.py +++ b/daemon/core/future/coreemu.py @@ -487,7 +487,6 @@ class FutureSession(Session): node = self.add_object(cls=node_class, objid=_id, name=name, start=start) # set node attributes - node.type = node_options.model node.icon = node_options.icon node.canvas = node_options.canvas node.opaque = node_options.opaque @@ -497,6 +496,8 @@ class FutureSession(Session): # add services to default and physical nodes only if _type in [NodeTypes.DEFAULT, NodeTypes.PHYSICAL]: + node.type = node_options.model + logger.debug("set node type: %s", node.type) logger.info("setting model (%s) with services (%s)", node.type, node_options.services) services = "|".join(node_options.services) or None self.services.addservicestonode(node, node.type, services) diff --git a/daemon/core/future/futuredata.py b/daemon/core/future/futuredata.py index fac64bf2..98ffeb5e 100644 --- a/daemon/core/future/futuredata.py +++ b/daemon/core/future/futuredata.py @@ -12,7 +12,7 @@ class NodeOptions(object): Create a NodeOptions object. :param str name: name of node, defaults to node class name postfix with its id - :param str model: model to use for this node, defines services, defaults to "router" + :param str model: defines services for default and physical nodes, defaults to "router" """ self.name = name self.model = model diff --git a/daemon/core/mobility.py b/daemon/core/mobility.py index 58c1b162..021a6366 100644 --- a/daemon/core/mobility.py +++ b/daemon/core/mobility.py @@ -1152,11 +1152,7 @@ class Ns2ScriptedMobility(WayPointMobility): :rtype: int """ nodenum = int(nodenum) - try: - return self.nodemap[nodenum] - except KeyError: - logger.exception("error finding value in node map, ignored and returns node id") - return nodenum + return self.nodemap.get(nodenum, nodenum) def startup(self): """ diff --git a/daemon/core/xml/xmlwriter1.py b/daemon/core/xml/xmlwriter1.py index c113ff31..7959b204 100644 --- a/daemon/core/xml/xmlwriter1.py +++ b/daemon/core/xml/xmlwriter1.py @@ -213,7 +213,7 @@ class ScenarioPlan(XmlElement): self.setAttribute('xmlns:CORE', 'coreSpecific') self.setAttribute('compiled', 'true') - self.all_channel_members = dict() + self.all_channel_members = {} self.last_network_id = 0 self.addNetworks() self.addDevices() @@ -795,26 +795,23 @@ class InterfaceElement(NamedXmlElement): """ Add a reference to the channel that uses this interface """ - try: - cm = self.scenPlan.all_channel_members[self.id] - if cm is not None: - ch = cm.base_element.parentNode - if ch is not None: - net = ch.parentNode - if net is not None: - MemberElement(self.scenPlan, - self, - referenced_type=MembType.CHANNEL, - referenced_id=ch.getAttribute("id"), - index=int(cm.getAttribute("index"))) - MemberElement(self.scenPlan, - self, - referenced_type=MembType.NETWORK, - referenced_id=net.getAttribute("id")) - except KeyError: - # Not an error. This occurs when an interface belongs to a switch - # or a hub within a network and the channel is yet to be defined - logger.exception("noted as not an error, add channel reference error") + # cm is None when an interface belongs to a switch + # or a hub within a network and the channel is yet to be defined + cm = self.scenPlan.all_channel_members.get(self.id) + if cm is not None: + ch = cm.base_element.parentNode + if ch is not None: + net = ch.parentNode + if net is not None: + MemberElement(self.scenPlan, + self, + referenced_type=MembType.CHANNEL, + referenced_id=ch.getAttribute("id"), + index=int(cm.getAttribute("index"))) + MemberElement(self.scenPlan, + self, + referenced_type=MembType.NETWORK, + referenced_id=net.getAttribute("id")) def addAddresses(self, interface_object): """ diff --git a/daemon/scripts/core-daemon b/daemon/scripts/core-daemon index 744d202b..ee4cbf6b 100644 --- a/daemon/scripts/core-daemon +++ b/daemon/scripts/core-daemon @@ -13,7 +13,6 @@ import time from core import constants from core import enumerations from core import logger -from core import services from core.legacy.corehandler import CoreHandler from core.legacy.coreserver import CoreServer from core.misc import nodeutils @@ -139,7 +138,4 @@ if __name__ == "__main__": nodeutils.update_node_map(OVS_NODES) - # load default services - services.load() - main()