class Topologynew(object):
- '''
+ """
Topology class provide topology database and provide many method to get property of topology.
node_boilerplate = {u'type': u'MD_SAL', u'id': u'openflow:%d'}
- '''
+ """
+
topo_nodes_db = [
[],
- [{u'type': u'MD_SAL', u'id': u'openflow:1'}],
- [{u'type': u'MD_SAL', u'id': u'openflow:1'},
- {u'type': u'MD_SAL', u'id': u'openflow:2'},
- {u'type': u'MD_SAL', u'id': u'openflow:3'}]
+ [{u"type": u"MD_SAL", u"id": u"openflow:1"}],
+ [
+ {u"type": u"MD_SAL", u"id": u"openflow:1"},
+ {u"type": u"MD_SAL", u"id": u"openflow:2"},
+ {u"type": u"MD_SAL", u"id": u"openflow:3"},
+ ],
]
def __init__(self):
self.builtin = BuiltIn()
def get_nodes_from_topology(self, topo_level):
- '''
+ """
get nodes from topology database by topology tree level
- '''
+ """
if isinstance(topo_level, str) or isinstance(topo_level, unicode):
if topo_level.isdigit():
topo_level = int(topo_level)
return None
def get_nodes_from_tree_topo(self, topo, exceptroot="0"):
- '''
+ """
This function generates a dictionary that contains type and id of each node.
It follows tree level topology.
@parameter topo: either an interer (in this case, depth is set and fanout will be 2)
or a string in format of "(a,b)" (a and b are integers and they
stands for depth and fanout respectively)
@return array of dicitonary objects that contains info about each node
- '''
+ """
depth = 0
fanout = 2
if isinstance(topo, str) or isinstance(topo, unicode):
depth = t[0]
fanout = t[1]
else:
- return None # topology consists of two parameters: depth and fanout
+ return None # topology consists of two parameters: depth and fanout
elif isinstance(topo, int):
depth = topo
else:
- return None # topo parameter is not given in a desired way
+ return None # topo parameter is not given in a desired way
num_nodes = Common.num_of_nodes(depth, fanout)
nodelist = []
for i in xrange(1, num_nodes + 1):
- temp = {"id": "00:00:00:00:00:00:00:%s" % format(i, '02x'), "type": "OF"}
+ temp = {"id": "00:00:00:00:00:00:00:%s" % format(i, "02x"), "type": "OF"}
nodelist.append(temp)
if int(exceptroot):
del nodelist[0]
return nodelist
def get_ids_of_leaf_nodes(self, fanout, depth):
- '''
+ """
For a tree structure, it numerates leaf nodes
by following depth-first strategy
@parameter fanout: fanout of tree
@parameter depth: total depth of a tree
@return leafnodes: list of ids of leaf nodes
- '''
+ """
leafnodes = []
self._enumerate_nodes(0, 1, 1, fanout, depth - 1, leafnodes)
return leafnodes
- def _enumerate_nodes(self, currentdepth, nodeid, currentbranch, fanout, depth, leafnodes):
+ def _enumerate_nodes(
+ self, currentdepth, nodeid, currentbranch, fanout, depth, leafnodes
+ ):
if currentdepth == depth:
- leafnodes.append("00:00:00:00:00:00:00:%s" % format(nodeid, '02x'))
+ leafnodes.append("00:00:00:00:00:00:00:%s" % format(nodeid, "02x"))
return 1
nodes = 1
for i in xrange(1, fanout + 1):
- nodes += self._enumerate_nodes(currentdepth + 1, nodeid + nodes, i, fanout, depth, leafnodes)
+ nodes += self._enumerate_nodes(
+ currentdepth + 1, nodeid + nodes, i, fanout, depth, leafnodes
+ )
return nodes
-if __name__ == '__main__':
+
+if __name__ == "__main__":
topologynew = Topologynew()
- # print topologynew.get_nodes_from_tree_topo(2)
- # print topologynew.get_nodes_from_tree_topo('2')
- print topologynew.get_nodes_from_tree_topo('(2,3)')
- # print topologynew.get_ids_of_leaf_nodes(2,2 )#, depth)
+ print(topologynew.get_nodes_from_tree_topo("(2,3)"))