aboutsummaryrefslogtreecommitdiff
path: root/rumba/storyboard.py
diff options
context:
space:
mode:
authorMarco Capitani <m.capitani@nextworks.it>2018-03-26 16:52:30 +0200
committerMarco Capitani <m.capitani@nextworks.it>2018-03-26 16:56:14 +0200
commit9e499fec0ca6e2940717bce45388c59960f9bdc3 (patch)
tree307b7636cccbc7f38f3e14acb0ba616e05307c80 /rumba/storyboard.py
parent81dfe735a72683b7dc87f329d9a25a1868fe74f1 (diff)
downloadrumba-9e499fec0ca6e2940717bce45388c59960f9bdc3.tar.gz
rumba-9e499fec0ca6e2940717bce45388c59960f9bdc3.zip
model: make DIFs scriptable
DIFs instances can now be referenced inside .rsb files. Also changed Node.set_link_state function to accept a DIF as opposed to an IPCP, since IPCPs are not given a name nor mentioned is user scripts.
Diffstat (limited to 'rumba/storyboard.py')
-rw-r--r--rumba/storyboard.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/rumba/storyboard.py b/rumba/storyboard.py
index e38a102..ea0c51e 100644
--- a/rumba/storyboard.py
+++ b/rumba/storyboard.py
@@ -339,6 +339,7 @@ class StoryBoard(SBEntity):
self.start_time = None
self.commands_list = {}
self.node_map = {}
+ self.shims = {}
self._build_nodes_lists()
# The following must be last, because it needs the info from
# _build_nodes_list
@@ -355,6 +356,9 @@ class StoryBoard(SBEntity):
if self.experiment is not None:
for node in self.experiment.nodes:
self.node_map[node.name] = node
+ for dif in self.experiment.dif_ordering:
+ if isinstance(dif, model.ShimEthDIF):
+ self.shims[dif.name] = dif
def _validate_and_add_server(self, s, n=None):
if len(s.clients) == 0:
@@ -722,8 +726,8 @@ class StoryBoard(SBEntity):
if self._script is None:
self._script = _Script(self)
- for ipcp in dif.ipcps:
- action = functools.partial(ipcp.node.set_link_state, ipcp, state)
+ for node in dif.members:
+ action = functools.partial(node.set_link_state, dif, state)
self._script.add_event(Event(action, ev_time=t))
def set_link_up(self, t, dif):
@@ -739,10 +743,10 @@ class StoryBoard(SBEntity):
if self._script is None:
self._script = _Script(self)
- for ipcp in node.ipcps:
- if not isinstance(ipcp, model.ShimEthIPCP):
+ for dif in node.difs:
+ if not isinstance(dif, model.ShimEthDIF):
continue
- action = functools.partial(ipcp.node.set_link_state, ipcp, state)
+ action = functools.partial(node.set_link_state, dif, state)
self._script.add_event(Event(action, ev_time=t))
def set_node_up(self, t, node):
@@ -965,6 +969,7 @@ class _Script(object):
self._servers = self._storyboard.server_apps
self._clients = self._storyboard.client_apps
self._processes = {}
+ self._shims = self._storyboard.shims
self._entities = {
'sb': self._storyboard,
'storyboard': self._storyboard,
@@ -973,7 +978,8 @@ class _Script(object):
'Node': self._nodes,
'Server': self._servers,
'Client': self._clients,
- 'ClientProcess': self._processes
+ 'ClientProcess': self._processes,
+ 'ShimEthDIF': self._shims
}
def add_process(self, process):