aboutsummaryrefslogtreecommitdiff
path: root/rumba/model.py
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@ugent.be>2017-03-28 13:18:26 +0200
committerSander Vrijders <sander.vrijders@ugent.be>2017-03-28 16:29:51 +0200
commit0e8936e55956813f7f7db633b1cb96241a78ea58 (patch)
tree39b26c2cf3b8943d9f34d87fb9a537c0b13e860f /rumba/model.py
parent99d8c66180e24849bb4f0f7edd1be4fe852f44db (diff)
downloadrumba-0e8936e55956813f7f7db633b1cb96241a78ea58.tar.gz
rumba-0e8936e55956813f7f7db633b1cb96241a78ea58.zip
testbeds: Port to new API
The new API passes the Experiment instance to the testbeds, so that the configs for the testbeds can be generated starting from the IPCPs. The classes Link, Interface, P2PLink have been deprecated.
Diffstat (limited to 'rumba/model.py')
-rw-r--r--rumba/model.py93
1 files changed, 17 insertions, 76 deletions
diff --git a/rumba/model.py b/rumba/model.py
index 098930a..0659cb1 100644
--- a/rumba/model.py
+++ b/rumba/model.py
@@ -36,56 +36,9 @@ class Testbed:
self.exp_name = exp_name
@abc.abstractmethod
- def create_experiment(self, nodes, links):
+ def create_experiment(self, experiment):
raise Exception('create_experiment() not implemented')
-
-# Represents an interface on a node
-#
-# @name [string] interface name
-# @ip [int] IP address of that interface
-#
-class Interface:
- def __init__(self, name = "", ip = ""):
- self.name = name
- self.ip = ip
-
- def __repr__(self):
- return self.name
-
-# Represents a link in the physical graph
-#
-# @name [string] Link name
-#
-class Link:
- def __init__(self, name):
- self.name = name
-
- def __repr__(self):
- return self.name
-
-# Represents a point-to-point link in the physical graph
-#
-# @name [string] DIF name
-#
-class P2PLink(Link):
- def __init__(self, name, node_a, node_b,
- int_a = None,
- int_b = None):
- Link.__init__(self, name)
- self.node_a = node_a
- self.node_b = node_b
- if int_a is None:
- int_a = Interface()
- self.int_a = int_a
- if int_b is None:
- int_b = Interface()
- self.int_b = int_b
-
- def __repr__(self):
- return '%s:%s--%s:%s' % (self.node_a.name, self.int_a,
- self.node_b.name, self.int_b)
-
# Base class for DIFs
#
# @name [string] DIF name
@@ -96,6 +49,7 @@ class DIF:
if members is None:
members = list()
self.members = members
+ self.ipcps = list()
def __repr__(self):
s = "DIF %s" % self.name
@@ -359,25 +313,6 @@ class Experiment:
return s
- def get_links(self):
- difs = set()
- links = list()
- for node in self.nodes:
- for dif in node.difs:
- if type(dif) is ShimEthDIF:
- difs.add(dif)
-
- for dif in difs:
- # Point-to-point link
- if len(dif.members) == 2:
- node_a = dif.members[0]
- node_b = dif.members[1]
- link = P2PLink(node_a.name + "-" + node_b.name,
- node_a, node_b)
- links.append(link)
-
- return links
-
def add_node(self, node):
self.nodes.append(node)
self.generate()
@@ -417,7 +352,8 @@ class Experiment:
#print(difsdeps_adj)
#print(difsdeps_inc_cnt)
- # Run Kahn's algorithm to compute topological ordering on the DIFs graph.
+ # Run Kahn's algorithm to compute topological
+ # ordering on the DIFs graph.
frontier = set()
self.dif_ordering = []
for dif in difsdeps_inc_cnt:
@@ -433,11 +369,13 @@ class Experiment:
frontier.add(nxt)
difsdeps_adj[cur] = set()
- circular_set = [dif for dif in difsdeps_inc_cnt if difsdeps_inc_cnt[dif] != 0]
+ circular_set = [dif for dif in difsdeps_inc_cnt \
+ if difsdeps_inc_cnt[dif] != 0]
if len(circular_set):
- raise Exception("Fatal error: The specified DIFs topology has one or more"\
- "circular dependencies, involving the following"\
- " DIFs: %s" % circular_set)
+ raise Exception("Fatal error: The specified DIFs topology" \
+ "has one or more" \
+ "circular dependencies, involving the following" \
+ " DIFs: %s" % circular_set)
print("DIF topological ordering: %s" % self.dif_ordering)
@@ -451,8 +389,8 @@ class Experiment:
dif_graphs[dif] = dict()
first = None
- # For each N-1-DIF supporting this DIF, compute the set of nodes that
- # share such N-1-DIF. This set will be called the 'neighset' of
+ # For each N-1-DIF supporting this DIF, compute the set of nodes
+ # that share such N-1-DIF. This set will be called the 'neighset' of
# the N-1-DIF for the current DIF.
for node in self.nodes:
@@ -482,7 +420,9 @@ class Experiment:
er = []
for node in dif_graphs[dif]:
for edge in dif_graphs[dif][node]:
- er.append("%s --[%s]--> %s" % (node.name, edge[1].name, edge[0].name))
+ er.append("%s --[%s]--> %s" % (node.name,
+ edge[1].name,
+ edge[0].name))
print("DIF graph for %s: %s" % (dif, ', '.join(er)))
if self.enrollment_strategy == 'minimal':
@@ -556,6 +496,7 @@ class Experiment:
break
node.ipcps.append(ipcp)
+ dif.ipcps.append(ipcp)
print("IPCP for node %s: %s" % (node.name, node.ipcps))
@@ -568,7 +509,7 @@ class Experiment:
# Realize the experiment, using a testbed-specific setup
def swap_in(self):
- self.testbed.create_experiment(self.nodes, self.get_links())
+ self.testbed.create_experiment(self)
@abc.abstractmethod
def run(self):