diff options
author | Marco Capitani <m.capitani@nextworks.it> | 2018-03-26 16:52:30 +0200 |
---|---|---|
committer | Marco Capitani <m.capitani@nextworks.it> | 2018-03-26 16:56:14 +0200 |
commit | 9e499fec0ca6e2940717bce45388c59960f9bdc3 (patch) | |
tree | 307b7636cccbc7f38f3e14acb0ba616e05307c80 /rumba/storyboard.py | |
parent | 81dfe735a72683b7dc87f329d9a25a1868fe74f1 (diff) | |
download | rumba-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.py | 18 |
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): |