1 | #!/usr/bin/env python |
---|
2 | |
---|
3 | import sys |
---|
4 | from deter import topdl |
---|
5 | |
---|
6 | # Parse the user-supplied routers and leaves arguments |
---|
7 | try: |
---|
8 | if len(sys.argv) > 1: arg = sys.argv[1] |
---|
9 | else: arg = 4 |
---|
10 | nrouters = int(arg) |
---|
11 | |
---|
12 | if len(sys.argv) > 2: arg = sys.argv[2] |
---|
13 | else: arg = 3 |
---|
14 | nleaves = int(arg) |
---|
15 | |
---|
16 | except ValueError, e: |
---|
17 | print >>sys.stderr, 'Usage %s routers leaves' % sys.argv[0] |
---|
18 | sys.exit('Cannot convert %s to an int' % arg) |
---|
19 | |
---|
20 | elems = [] # Elements in the topology |
---|
21 | subs = [] # Substrates in the topology |
---|
22 | |
---|
23 | # Make nrouters routers |
---|
24 | r = [] |
---|
25 | for i in range(0,nrouters): |
---|
26 | r.append(topdl.Computer(name='r-%d' % i)) |
---|
27 | |
---|
28 | elems.extend(r) |
---|
29 | # Interconnect them |
---|
30 | n = 0 |
---|
31 | for i in range(0,nrouters): |
---|
32 | for j in range(i+1, nrouters): |
---|
33 | # Connect r[i] to r[j] |
---|
34 | # Pick a substrate name |
---|
35 | link_name = 'rlink%i' % n |
---|
36 | # Add interfaces to the two routers |
---|
37 | r[i].interface.append(topdl.Interface(substrate=[link_name])) |
---|
38 | r[j].interface.append(topdl.Interface(substrate=[link_name])) |
---|
39 | # Put a substrate into the substrate list with the name we picked |
---|
40 | subs.append(topdl.Substrate(name=link_name)) |
---|
41 | n += 1 |
---|
42 | |
---|
43 | # Put nleaves leaves on each router, except the center one |
---|
44 | for i in range(0, (nrouters-1) * nleaves): |
---|
45 | # Pick a link name |
---|
46 | link_name = 'llink%i' % i |
---|
47 | |
---|
48 | # add a computer with an interface on the new substrate to the element list |
---|
49 | elems.append(topdl.Computer(name='leaf%d' % i, interface=[ |
---|
50 | topdl.Interface(substrate=[link_name])])) |
---|
51 | |
---|
52 | # Add an interface to a router on the new substrate |
---|
53 | r[i/nleaves].interface.append(topdl.Interface(substrate=[link_name])) |
---|
54 | |
---|
55 | # Put a substrate into the substrate list with the name we picked |
---|
56 | subs.append(topdl.Substrate(name=link_name)) |
---|
57 | |
---|
58 | # Make the topology and print it |
---|
59 | top = topdl.Topology(elements=elems, substrates=subs) |
---|
60 | print topdl.topology_to_xml(top, top='experiment') |
---|