Committed by
Gerrit Code Review
Lots of improvements in opticalUtils.py
Now we can controll LINC components from mininet e.g swtich start/stop or link up/down -Added LINCSwitch, LINCIntf and LINCLink classes -fixed start/stop LINC-Switch bug related to taps -refactored opticalUtils.py -fixed typo -Implemented LINC-CLI support in LINCSwitch class -Added support for link up/down from mininet -Added support for switch start/stop from mininet and many more :) Change-Id: Ide6460081a554ea3ca9146be480ae016d7d2356d
Showing
3 changed files
with
702 additions
and
502 deletions
1 | #!/usr/bin/python | 1 | #!/usr/bin/python |
2 | 2 | ||
3 | -from opticalUtils import MininetOE, OpticalSwitch, OpticalLink | 3 | +from opticalUtils import MininetOE, LINCSwitch, LINCLink |
4 | from mininet.topo import Topo | 4 | from mininet.topo import Topo |
5 | from mininet.log import setLogLevel | 5 | from mininet.log import setLogLevel |
6 | from mininet.node import RemoteController | 6 | from mininet.node import RemoteController |
... | @@ -10,25 +10,25 @@ class SmallOpticalTopo( Topo ): | ... | @@ -10,25 +10,25 @@ class SmallOpticalTopo( Topo ): |
10 | 10 | ||
11 | def build( self ): | 11 | def build( self ): |
12 | o1ann = { "latitude": 37.6, "longitude": -122.3, "optical.regens": 0 } | 12 | o1ann = { "latitude": 37.6, "longitude": -122.3, "optical.regens": 0 } |
13 | - O1 = self.addSwitch( 'SFO-W10', dpid='0000ffffffffff01', annotations=o1ann, cls=OpticalSwitch ) | 13 | + O1 = self.addSwitch( 'SFO-W10', dpid='0000ffffffffff01', annotations=o1ann, cls=LINCSwitch ) |
14 | o2ann = { "latitude": 37.3, "longitude": -121.9, "optical.regens": 0 } | 14 | o2ann = { "latitude": 37.3, "longitude": -121.9, "optical.regens": 0 } |
15 | - O2 = self.addSwitch( 'SJC-W10', dpid='0000ffffffffff02', annotations=o2ann, cls=OpticalSwitch ) | 15 | + O2 = self.addSwitch( 'SJC-W10', dpid='0000ffffffffff02', annotations=o2ann, cls=LINCSwitch ) |
16 | o3ann = { "latitude": 33.9, "longitude": -118.4, "optical.regens": 0 } | 16 | o3ann = { "latitude": 33.9, "longitude": -118.4, "optical.regens": 0 } |
17 | - O3 = self.addSwitch( 'LAX-W10', dpid='0000ffffffffff03', annotations=o3ann, cls=OpticalSwitch ) | 17 | + O3 = self.addSwitch( 'LAX-W10', dpid='0000ffffffffff03', annotations=o3ann, cls=LINCSwitch ) |
18 | o4ann = { "latitude": 32.8, "longitude": -117.1, "optical.regens": 3 } | 18 | o4ann = { "latitude": 32.8, "longitude": -117.1, "optical.regens": 3 } |
19 | - O4 = self.addSwitch( 'SDG-W10', dpid='0000ffffffffff04', annotations=o4ann, cls=OpticalSwitch ) | 19 | + O4 = self.addSwitch( 'SDG-W10', dpid='0000ffffffffff04', annotations=o4ann, cls=LINCSwitch ) |
20 | o5ann = { "latitude": 44.8, "longitude": -93.1, "optical.regens": 3 } | 20 | o5ann = { "latitude": 44.8, "longitude": -93.1, "optical.regens": 3 } |
21 | - O5 = self.addSwitch( 'MSP-M10', dpid='0000ffffffffff05', annotations=o5ann, cls=OpticalSwitch ) | 21 | + O5 = self.addSwitch( 'MSP-M10', dpid='0000ffffffffff05', annotations=o5ann, cls=LINCSwitch ) |
22 | o6ann = { "latitude": 32.8, "longitude": -97.1, "optical.regens": 3 } | 22 | o6ann = { "latitude": 32.8, "longitude": -97.1, "optical.regens": 3 } |
23 | - O6 = self.addSwitch( 'DFW-M10', dpid='0000ffffffffff06', annotations=o6ann, cls=OpticalSwitch ) | 23 | + O6 = self.addSwitch( 'DFW-M10', dpid='0000ffffffffff06', annotations=o6ann, cls=LINCSwitch ) |
24 | o7ann = { "latitude": 41.8, "longitude": -87.6, "optical.regens": 3 } | 24 | o7ann = { "latitude": 41.8, "longitude": -87.6, "optical.regens": 3 } |
25 | - O7 = self.addSwitch( 'CHG-N10', dpid='0000ffffffffff07', annotations=o7ann, cls=OpticalSwitch ) | 25 | + O7 = self.addSwitch( 'CHG-N10', dpid='0000ffffffffff07', annotations=o7ann, cls=LINCSwitch ) |
26 | o8ann = { "latitude": 38.8, "longitude": -77.1, "optical.regens": 3 } | 26 | o8ann = { "latitude": 38.8, "longitude": -77.1, "optical.regens": 3 } |
27 | - O8 = self.addSwitch( 'IAD-M10', dpid='0000ffffffffff08', annotations=o8ann, cls=OpticalSwitch ) | 27 | + O8 = self.addSwitch( 'IAD-M10', dpid='0000ffffffffff08', annotations=o8ann, cls=LINCSwitch ) |
28 | o9ann = { "latitude": 40.8, "longitude": -73.1, "optical.regens": 0 } | 28 | o9ann = { "latitude": 40.8, "longitude": -73.1, "optical.regens": 0 } |
29 | - O9 = self.addSwitch( 'JFK-M10', dpid='0000ffffffffff09', annotations=o9ann, cls=OpticalSwitch ) | 29 | + O9 = self.addSwitch( 'JFK-M10', dpid='0000ffffffffff09', annotations=o9ann, cls=LINCSwitch ) |
30 | o10ann = { "latitude": 33.8, "longitude": -84.1, "optical.regens": 0 } | 30 | o10ann = { "latitude": 33.8, "longitude": -84.1, "optical.regens": 0 } |
31 | - O10 = self.addSwitch( 'ATL-S10', dpid='0000ffffffffff0a', annotations=o10ann, cls=OpticalSwitch ) | 31 | + O10 = self.addSwitch( 'ATL-S10', dpid='0000ffffffffff0a', annotations=o10ann, cls=LINCSwitch ) |
32 | 32 | ||
33 | 33 | ||
34 | SFOR10 = self.addSwitch( 'SFO-R10', dpid='0000ffffffff0001', annotations={"latitude": 37.6, "longitude": -122.3} ) | 34 | SFOR10 = self.addSwitch( 'SFO-R10', dpid='0000ffffffff0001', annotations={"latitude": 37.6, "longitude": -122.3} ) |
... | @@ -38,29 +38,29 @@ class SmallOpticalTopo( Topo ): | ... | @@ -38,29 +38,29 @@ class SmallOpticalTopo( Topo ): |
38 | JFKR10 = self.addSwitch( 'JFK-R10', dpid='0000ffffffff0005', annotations={ "latitude": 40.8, "longitude": -73.1 } ) | 38 | JFKR10 = self.addSwitch( 'JFK-R10', dpid='0000ffffffff0005', annotations={ "latitude": 40.8, "longitude": -73.1 } ) |
39 | ATLR10 = self.addSwitch( 'ATL-R10', dpid='0000ffffffff0006', annotations={ "latitude": 33.8, "longitude": -84.1 } ) | 39 | ATLR10 = self.addSwitch( 'ATL-R10', dpid='0000ffffffff0006', annotations={ "latitude": 33.8, "longitude": -84.1 } ) |
40 | 40 | ||
41 | - self.addLink( O1, O2, port1=50, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 41 | + self.addLink( O1, O2, port1=50, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
42 | - self.addLink( O2, O3, port1=50, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 42 | + self.addLink( O2, O3, port1=50, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
43 | - self.addLink( O3, O4, port1=50, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 43 | + self.addLink( O3, O4, port1=50, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
44 | - self.addLink( O1, O5, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 44 | + self.addLink( O1, O5, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
45 | - self.addLink( O2, O5, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 45 | + self.addLink( O2, O5, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
46 | - self.addLink( O3, O6, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 46 | + self.addLink( O3, O6, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
47 | - self.addLink( O4, O6, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 47 | + self.addLink( O4, O6, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
48 | - self.addLink( O5, O6, port1=30, port2=40, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 48 | + self.addLink( O5, O6, port1=30, port2=40, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
49 | - self.addLink( O5, O7, port1=40, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 49 | + self.addLink( O5, O7, port1=40, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
50 | - self.addLink( O6, O8, port1=30, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 50 | + self.addLink( O6, O8, port1=30, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
51 | - self.addLink( O7, O8, port1=20, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 51 | + self.addLink( O7, O8, port1=20, port2=30, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
52 | - self.addLink( O7, O9, port1=30, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 52 | + self.addLink( O7, O9, port1=30, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
53 | - self.addLink( O8, O10, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 53 | + self.addLink( O8, O10, port1=20, port2=50, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
54 | - self.addLink( O9, O10, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=OpticalLink ) | 54 | + self.addLink( O9, O10, port1=20, port2=20, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1000, "durable": "true" }, cls=LINCLink ) |
55 | 55 | ||
56 | - self.addLink( SFOR10, O1, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 56 | + self.addLink( SFOR10, O1, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
57 | - self.addLink( LAXR10, O3, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 57 | + self.addLink( LAXR10, O3, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
58 | # added second tap | 58 | # added second tap |
59 | - self.addLink( LAXR10, O3, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 59 | + self.addLink( LAXR10, O3, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
60 | - self.addLink( SDGR10, O4, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 60 | + self.addLink( SDGR10, O4, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
61 | - self.addLink( CHGR10, O7, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 61 | + self.addLink( CHGR10, O7, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
62 | - self.addLink( JFKR10, O9, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 62 | + self.addLink( JFKR10, O9, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
63 | - self.addLink( ATLR10, O10, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 63 | + self.addLink( ATLR10, O10, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
64 | 64 | ||
65 | h1 = self.addHost( 'h1' ) | 65 | h1 = self.addHost( 'h1' ) |
66 | h2 = self.addHost( 'h2' ) | 66 | h2 = self.addHost( 'h2' ) |
... | @@ -81,7 +81,7 @@ if __name__ == '__main__': | ... | @@ -81,7 +81,7 @@ if __name__ == '__main__': |
81 | if len( sys.argv ) >= 2: | 81 | if len( sys.argv ) >= 2: |
82 | controllers = sys.argv[1:] | 82 | controllers = sys.argv[1:] |
83 | else: | 83 | else: |
84 | - print 'Usage: ./opticalUtils.py (<Controller IP>)+' | 84 | + print 'Usage:sudo -E python opticalTest.py (<Controller IP>)+' |
85 | print 'Using localhost...\n' | 85 | print 'Using localhost...\n' |
86 | controllers = [ '127.0.0.1' ] | 86 | controllers = [ '127.0.0.1' ] |
87 | 87 | ... | ... |
1 | #!/usr/bin/python | 1 | #!/usr/bin/python |
2 | 2 | ||
3 | -from opticalUtils import MininetOE, OpticalSwitch, OpticalLink | 3 | +from opticalUtils import MininetOE, LINCSwitch, LINCLink |
4 | from mininet.topo import Topo | 4 | from mininet.topo import Topo |
5 | from mininet.log import setLogLevel | 5 | from mininet.log import setLogLevel |
6 | from mininet.node import RemoteController | 6 | from mininet.node import RemoteController |
... | @@ -11,155 +11,155 @@ class BigOpticalTopo( Topo ): | ... | @@ -11,155 +11,155 @@ class BigOpticalTopo( Topo ): |
11 | def build( self ): | 11 | def build( self ): |
12 | # Optical layer ROADMs | 12 | # Optical layer ROADMs |
13 | o1ann = { "latitude": 32.508086, "longitude": -99.741564, "optical.regens": 0 } | 13 | o1ann = { "latitude": 32.508086, "longitude": -99.741564, "optical.regens": 0 } |
14 | - O1 = self.addSwitch( 'ABLNTXRO', dpid='0000ffffffffff01', annotations=o1ann, cls=OpticalSwitch ) | 14 | + O1 = self.addSwitch( 'ABLNTXRO', dpid='0000ffffffffff01', annotations=o1ann, cls=LINCSwitch ) |
15 | o2ann = { "latitude": 35.084446, "longitude": -106.649719, "optical.regens": 0 } | 15 | o2ann = { "latitude": 35.084446, "longitude": -106.649719, "optical.regens": 0 } |
16 | - O2 = self.addSwitch( 'ALBQNMMA', dpid='0000ffffffffff02', annotations=o2ann, cls=OpticalSwitch ) | 16 | + O2 = self.addSwitch( 'ALBQNMMA', dpid='0000ffffffffff02', annotations=o2ann, cls=LINCSwitch ) |
17 | o3ann = { "latitude": 42.652222, "longitude": -73.758333, "optical.regens": 0 } | 17 | o3ann = { "latitude": 42.652222, "longitude": -73.758333, "optical.regens": 0 } |
18 | - O3 = self.addSwitch( 'ALBYNYSS', dpid='0000ffffffffff03', annotations=o3ann, cls=OpticalSwitch ) | 18 | + O3 = self.addSwitch( 'ALBYNYSS', dpid='0000ffffffffff03', annotations=o3ann, cls=LINCSwitch ) |
19 | o4ann = { "latitude": 33.755833, "longitude": -97.743057, "optical.regens": 5 } | 19 | o4ann = { "latitude": 33.755833, "longitude": -97.743057, "optical.regens": 5 } |
20 | - O4 = self.addSwitch( 'ATLNGATL', dpid='0000ffffffffff04', annotations=o4ann, cls=OpticalSwitch ) # ATLNGATL Connected to packet node | 20 | + O4 = self.addSwitch( 'ATLNGATL', dpid='0000ffffffffff04', annotations=o4ann, cls=LINCSwitch ) # ATLNGATL Connected to packet node |
21 | o5ann = { "latitude": 42.882778, "longitude": -78.877778, "optical.regens": 0 } | 21 | o5ann = { "latitude": 42.882778, "longitude": -78.877778, "optical.regens": 0 } |
22 | - O5 = self.addSwitch( 'BFLONYFR', dpid='0000ffffffffff05', annotations=o5ann, cls=OpticalSwitch ) | 22 | + O5 = self.addSwitch( 'BFLONYFR', dpid='0000ffffffffff05', annotations=o5ann, cls=LINCSwitch ) |
23 | o6ann = { "latitude": 45.781667, "longitude": -108.509167, "optical.regens": 0 } | 23 | o6ann = { "latitude": 45.781667, "longitude": -108.509167, "optical.regens": 0 } |
24 | - O6 = self.addSwitch( 'BLNGMTMA', dpid='0000ffffffffff06', annotations=o6ann, cls=OpticalSwitch ) | 24 | + O6 = self.addSwitch( 'BLNGMTMA', dpid='0000ffffffffff06', annotations=o6ann, cls=LINCSwitch ) |
25 | o7ann = { "latitude": 39.293781, "longitude": -76.614127, "optical.regens": 0 } | 25 | o7ann = { "latitude": 39.293781, "longitude": -76.614127, "optical.regens": 0 } |
26 | - O7 = self.addSwitch( 'BLTMMDCH', dpid='0000ffffffffff07', annotations=o7ann, cls=OpticalSwitch ) | 26 | + O7 = self.addSwitch( 'BLTMMDCH', dpid='0000ffffffffff07', annotations=o7ann, cls=LINCSwitch ) |
27 | o8ann = { "latitude": 33.517223, "longitude": -86.812225, "optical.regens": 0 } | 27 | o8ann = { "latitude": 33.517223, "longitude": -86.812225, "optical.regens": 0 } |
28 | - O8 = self.addSwitch( 'BRHMALMT', dpid='0000ffffffffff08', annotations=o8ann, cls=OpticalSwitch ) | 28 | + O8 = self.addSwitch( 'BRHMALMT', dpid='0000ffffffffff08', annotations=o8ann, cls=LINCSwitch ) |
29 | o9ann = { "latitude": 46.836379, "longitude": -100.796917, "optical.regens": 0 } | 29 | o9ann = { "latitude": 46.836379, "longitude": -100.796917, "optical.regens": 0 } |
30 | - O9 = self.addSwitch( 'BSMRNDJC', dpid='0000ffffffffff09', annotations=o9ann, cls=OpticalSwitch ) | 30 | + O9 = self.addSwitch( 'BSMRNDJC', dpid='0000ffffffffff09', annotations=o9ann, cls=LINCSwitch ) |
31 | o10ann = { "latitude": 30.449722, "longitude": -91.184167, "optical.regens": 0 } | 31 | o10ann = { "latitude": 30.449722, "longitude": -91.184167, "optical.regens": 0 } |
32 | - O10 = self.addSwitch( 'BTRGLAMA', dpid='0000ffffffffff0a', annotations=o10ann, cls=OpticalSwitch ) | 32 | + O10 = self.addSwitch( 'BTRGLAMA', dpid='0000ffffffffff0a', annotations=o10ann, cls=LINCSwitch ) |
33 | o11ann = { "latitude": 41.881484, "longitude": -87.640432, "optical.regens": 4 } | 33 | o11ann = { "latitude": 41.881484, "longitude": -87.640432, "optical.regens": 4 } |
34 | - O11 = self.addSwitch( 'CHCGILCL', dpid='0000ffffffffff0b', annotations=o11ann, cls=OpticalSwitch ) | 34 | + O11 = self.addSwitch( 'CHCGILCL', dpid='0000ffffffffff0b', annotations=o11ann, cls=LINCSwitch ) |
35 | o12ann = { "latitude": 35.224924, "longitude": -80.837502, "optical.regens": 0 } | 35 | o12ann = { "latitude": 35.224924, "longitude": -80.837502, "optical.regens": 0 } |
36 | - O12 = self.addSwitch( 'CHRLNCCA', dpid='0000ffffffffff0c', annotations=o12ann, cls=OpticalSwitch ) | 36 | + O12 = self.addSwitch( 'CHRLNCCA', dpid='0000ffffffffff0c', annotations=o12ann, cls=LINCSwitch ) |
37 | o13ann = { "latitude": 32.785278, "longitude": -79.938056, "optical.regens": 0 } | 37 | o13ann = { "latitude": 32.785278, "longitude": -79.938056, "optical.regens": 0 } |
38 | - O13 = self.addSwitch( 'CHTNSCDT', dpid='0000ffffffffff0d', annotations=o13ann, cls=OpticalSwitch ) | 38 | + O13 = self.addSwitch( 'CHTNSCDT', dpid='0000ffffffffff0d', annotations=o13ann, cls=LINCSwitch ) |
39 | o14ann = { "latitude": 41.498333, "longitude": -81.686943, "optical.regens": 0 } | 39 | o14ann = { "latitude": 41.498333, "longitude": -81.686943, "optical.regens": 0 } |
40 | - O14 = self.addSwitch( 'CLEVOH02', dpid='0000ffffffffff0e', annotations=o14ann, cls=OpticalSwitch ) | 40 | + O14 = self.addSwitch( 'CLEVOH02', dpid='0000ffffffffff0e', annotations=o14ann, cls=LINCSwitch ) |
41 | o15ann = { "latitude": 39.965279, "longitude": -82.996666, "optical.regens": 0 } | 41 | o15ann = { "latitude": 39.965279, "longitude": -82.996666, "optical.regens": 0 } |
42 | - O15 = self.addSwitch( 'CLMBOH11', dpid='0000ffffffffff0f', annotations=o15ann, cls=OpticalSwitch ) | 42 | + O15 = self.addSwitch( 'CLMBOH11', dpid='0000ffffffffff0f', annotations=o15ann, cls=LINCSwitch ) |
43 | o16ann = { "latitude": 42.36745, "longitude": -71.084918, "optical.regens": 0 } | 43 | o16ann = { "latitude": 42.36745, "longitude": -71.084918, "optical.regens": 0 } |
44 | - O16 = self.addSwitch( 'CMBRMA01', dpid='0000ffffffffff10', annotations=o16ann, cls=OpticalSwitch ) | 44 | + O16 = self.addSwitch( 'CMBRMA01', dpid='0000ffffffffff10', annotations=o16ann, cls=LINCSwitch ) |
45 | o17ann = { "latitude": 39.102778, "longitude": -84.516944, "optical.regens": 0 } | 45 | o17ann = { "latitude": 39.102778, "longitude": -84.516944, "optical.regens": 0 } |
46 | - O17 = self.addSwitch( 'CNCNOHWS', dpid='0000ffffffffff11', annotations=o17ann, cls=OpticalSwitch ) | 46 | + O17 = self.addSwitch( 'CNCNOHWS', dpid='0000ffffffffff11', annotations=o17ann, cls=LINCSwitch ) |
47 | o18ann = { "latitude": 32.797524, "longitude": -96.780431, "optical.regens": 0 } | 47 | o18ann = { "latitude": 32.797524, "longitude": -96.780431, "optical.regens": 0 } |
48 | - O18 = self.addSwitch( 'DLLSTXTL', dpid='0000ffffffffff12', annotations=o18ann, cls=OpticalSwitch ) # DLLSTXTL Connected to packet node | 48 | + O18 = self.addSwitch( 'DLLSTXTL', dpid='0000ffffffffff12', annotations=o18ann, cls=LINCSwitch ) # DLLSTXTL Connected to packet node |
49 | o19ann = { "latitude": 39.744999, "longitude": -104.996391, "optical.regens": 0 } | 49 | o19ann = { "latitude": 39.744999, "longitude": -104.996391, "optical.regens": 0 } |
50 | - O19 = self.addSwitch( 'DNVRCOMA', dpid='0000ffffffffff13', annotations=o19ann, cls=OpticalSwitch ) | 50 | + O19 = self.addSwitch( 'DNVRCOMA', dpid='0000ffffffffff13', annotations=o19ann, cls=LINCSwitch ) |
51 | o20ann = { "latitude": 42.332779, "longitude": -83.054169, "optical.regens": 5 } | 51 | o20ann = { "latitude": 42.332779, "longitude": -83.054169, "optical.regens": 5 } |
52 | - O20 = self.addSwitch( 'DTRTMIBA', dpid='0000ffffffffff14', annotations=o20ann, cls=OpticalSwitch ) | 52 | + O20 = self.addSwitch( 'DTRTMIBA', dpid='0000ffffffffff14', annotations=o20ann, cls=LINCSwitch ) |
53 | o21ann = { "latitude": 31.756389, "longitude": -106.483611, "optical.regens": 0 } | 53 | o21ann = { "latitude": 31.756389, "longitude": -106.483611, "optical.regens": 0 } |
54 | - O21 = self.addSwitch( 'ELPSTXMA', dpid='0000ffffffffff15', annotations=o21ann, cls=OpticalSwitch ) | 54 | + O21 = self.addSwitch( 'ELPSTXMA', dpid='0000ffffffffff15', annotations=o21ann, cls=LINCSwitch ) |
55 | o22ann = { "latitude": 36.73923, "longitude": -119.79423, "optical.regens": 0 } | 55 | o22ann = { "latitude": 36.73923, "longitude": -119.79423, "optical.regens": 0 } |
56 | - O22 = self.addSwitch( 'FRSNCA01', dpid='0000ffffffffff16', annotations=o22ann, cls=OpticalSwitch ) | 56 | + O22 = self.addSwitch( 'FRSNCA01', dpid='0000ffffffffff16', annotations=o22ann, cls=LINCSwitch ) |
57 | o23ann = { "latitude": 36.072222, "longitude": -79.793889, "optical.regens": 0 } | 57 | o23ann = { "latitude": 36.072222, "longitude": -79.793889, "optical.regens": 0 } |
58 | - O23 = self.addSwitch( 'GNBONCEU', dpid='0000ffffffffff17', annotations=o23ann, cls=OpticalSwitch ) | 58 | + O23 = self.addSwitch( 'GNBONCEU', dpid='0000ffffffffff17', annotations=o23ann, cls=LINCSwitch ) |
59 | o24ann = { "latitude": 41.765833, "longitude": -72.676389, "optical.regens": 0 } | 59 | o24ann = { "latitude": 41.765833, "longitude": -72.676389, "optical.regens": 0 } |
60 | - O24 = self.addSwitch( 'HRFRCT03', dpid='0000ffffffffff18', annotations=o24ann, cls=OpticalSwitch ) | 60 | + O24 = self.addSwitch( 'HRFRCT03', dpid='0000ffffffffff18', annotations=o24ann, cls=LINCSwitch ) |
61 | o25ann = { "latitude": 29.748333, "longitude": -95.36528, "optical.regens": 0 } | 61 | o25ann = { "latitude": 29.748333, "longitude": -95.36528, "optical.regens": 0 } |
62 | - O25 = self.addSwitch( 'HSTNTX01', dpid='0000ffffffffff19', annotations=o25ann, cls=OpticalSwitch ) | 62 | + O25 = self.addSwitch( 'HSTNTX01', dpid='0000ffffffffff19', annotations=o25ann, cls=LINCSwitch ) |
63 | o26ann = { "latitude": 30.33071, "longitude": -81.43, "optical.regens": 0 } | 63 | o26ann = { "latitude": 30.33071, "longitude": -81.43, "optical.regens": 0 } |
64 | - O26 = self.addSwitch( 'JCVLFLCL', dpid='0000ffffffffff1a', annotations=o26ann, cls=OpticalSwitch ) | 64 | + O26 = self.addSwitch( 'JCVLFLCL', dpid='0000ffffffffff1a', annotations=o26ann, cls=LINCSwitch ) |
65 | o27ann = { "latitude": 39.096649, "longitude": -94.578716, "optical.regens": 0 } | 65 | o27ann = { "latitude": 39.096649, "longitude": -94.578716, "optical.regens": 0 } |
66 | - O27 = self.addSwitch( 'KSCYMO09', dpid='0000ffffffffff1b', annotations=o27ann, cls=OpticalSwitch ) | 66 | + O27 = self.addSwitch( 'KSCYMO09', dpid='0000ffffffffff1b', annotations=o27ann, cls=LINCSwitch ) |
67 | o28ann = { "latitude": 40.5899999,"longitude": -73.6699993, "optical.regens": 0 } | 67 | o28ann = { "latitude": 40.5899999,"longitude": -73.6699993, "optical.regens": 0 } |
68 | - O28 = self.addSwitch( 'LGISLAND', dpid='0000ffffffffff1c', annotations=o28ann, cls=OpticalSwitch ) | 68 | + O28 = self.addSwitch( 'LGISLAND', dpid='0000ffffffffff1c', annotations=o28ann, cls=LINCSwitch ) |
69 | o29ann = { "latitude": 34.051227, "longitude": -118.252958, "optical.regens": 0 } | 69 | o29ann = { "latitude": 34.051227, "longitude": -118.252958, "optical.regens": 0 } |
70 | - O29 = self.addSwitch( 'LSANCA03', dpid='0000ffffffffff1d', annotations=o29ann, cls=OpticalSwitch ) # LSANCA03 Connected to packet node | 70 | + O29 = self.addSwitch( 'LSANCA03', dpid='0000ffffffffff1d', annotations=o29ann, cls=LINCSwitch ) # LSANCA03 Connected to packet node |
71 | o30ann = { "latitude": 36.168056, "longitude": -115.138889, "optical.regens": 0 } | 71 | o30ann = { "latitude": 36.168056, "longitude": -115.138889, "optical.regens": 0 } |
72 | - O30 = self.addSwitch( 'LSVGNV02', dpid='0000ffffffffff1e', annotations=o30ann, cls=OpticalSwitch ) | 72 | + O30 = self.addSwitch( 'LSVGNV02', dpid='0000ffffffffff1e', annotations=o30ann, cls=LINCSwitch ) |
73 | o31ann = { "latitude":38.249167, "longitude": -85.760833, "optical.regens": 0 } | 73 | o31ann = { "latitude":38.249167, "longitude": -85.760833, "optical.regens": 0 } |
74 | - O31 = self.addSwitch( 'LSVLKYCS', dpid='0000ffffffffff1f', annotations=o31ann, cls=OpticalSwitch ) | 74 | + O31 = self.addSwitch( 'LSVLKYCS', dpid='0000ffffffffff1f', annotations=o31ann, cls=LINCSwitch ) |
75 | o32ann = { "latitude": 34.740833, "longitude": -92.271942, "optical.regens": 2 } | 75 | o32ann = { "latitude": 34.740833, "longitude": -92.271942, "optical.regens": 2 } |
76 | - O32 = self.addSwitch( 'LTRKARFR', dpid='0000ffffffffff20', annotations=o32ann, cls=OpticalSwitch ) | 76 | + O32 = self.addSwitch( 'LTRKARFR', dpid='0000ffffffffff20', annotations=o32ann, cls=LINCSwitch ) |
77 | o33ann = { "latitude": 25.779167, "longitude": -80.195, "optical.regens": 0 } | 77 | o33ann = { "latitude": 25.779167, "longitude": -80.195, "optical.regens": 0 } |
78 | - O33 = self.addSwitch( 'MIAMFLAC', dpid='0000ffffffffff21', annotations=o33ann, cls=OpticalSwitch ) | 78 | + O33 = self.addSwitch( 'MIAMFLAC', dpid='0000ffffffffff21', annotations=o33ann, cls=LINCSwitch ) |
79 | o34ann = { "latitude": 43.037224, "longitude": -87.922501, "optical.regens": 0 } | 79 | o34ann = { "latitude": 43.037224, "longitude": -87.922501, "optical.regens": 0 } |
80 | - O34 = self.addSwitch( 'MILWWIHE', dpid='0000ffffffffff22', annotations=o34ann, cls=OpticalSwitch ) | 80 | + O34 = self.addSwitch( 'MILWWIHE', dpid='0000ffffffffff22', annotations=o34ann, cls=LINCSwitch ) |
81 | o35ann = { "latitude": 35.145158, "longitude": -90.048058, "optical.regens": 0 } | 81 | o35ann = { "latitude": 35.145158, "longitude": -90.048058, "optical.regens": 0 } |
82 | - O35 = self.addSwitch( 'MMPHTNMA', dpid='0000ffffffffff23', annotations=o35ann, cls=OpticalSwitch ) | 82 | + O35 = self.addSwitch( 'MMPHTNMA', dpid='0000ffffffffff23', annotations=o35ann, cls=LINCSwitch ) |
83 | o36ann = { "latitude": 44.977365, "longitude": -93.26718, "optical.regens": 0 } | 83 | o36ann = { "latitude": 44.977365, "longitude": -93.26718, "optical.regens": 0 } |
84 | - O36 = self.addSwitch( 'MPLSMNDT', dpid='0000ffffffffff24', annotations=o36ann, cls=OpticalSwitch ) # MPLSMNDT Connected to packet node | 84 | + O36 = self.addSwitch( 'MPLSMNDT', dpid='0000ffffffffff24', annotations=o36ann, cls=LINCSwitch ) # MPLSMNDT Connected to packet node |
85 | o37ann = { "latitude": 36.853333, "longitude": -76.29, "optical.regens": 0 } | 85 | o37ann = { "latitude": 36.853333, "longitude": -76.29, "optical.regens": 0 } |
86 | - O37 = self.addSwitch( 'NRFLVABS', dpid='0000ffffffffff25', annotations=o37ann, cls=OpticalSwitch ) | 86 | + O37 = self.addSwitch( 'NRFLVABS', dpid='0000ffffffffff25', annotations=o37ann, cls=LINCSwitch ) |
87 | o38ann = { "latitude": 36.163955, "longitude": -86.775558, "optical.regens": 0 } | 87 | o38ann = { "latitude": 36.163955, "longitude": -86.775558, "optical.regens": 0 } |
88 | - O38 = self.addSwitch( 'NSVLTNMT', dpid='0000ffffffffff26', annotations=o38ann, cls=OpticalSwitch ) | 88 | + O38 = self.addSwitch( 'NSVLTNMT', dpid='0000ffffffffff26', annotations=o38ann, cls=LINCSwitch ) |
89 | o39ann = { "latitude": 29.949806, "longitude": -90.07222, "optical.regens": 0 } | 89 | o39ann = { "latitude": 29.949806, "longitude": -90.07222, "optical.regens": 0 } |
90 | - O39 = self.addSwitch( 'NWORLAMA', dpid='0000ffffffffff27', annotations=o39ann, cls=OpticalSwitch ) | 90 | + O39 = self.addSwitch( 'NWORLAMA', dpid='0000ffffffffff27', annotations=o39ann, cls=LINCSwitch ) |
91 | o40ann = { "latitude": 40.734408, "longitude": -74.177978, "optical.regens": 0 } | 91 | o40ann = { "latitude": 40.734408, "longitude": -74.177978, "optical.regens": 0 } |
92 | - O40 = self.addSwitch( 'NWRKNJ02', dpid='0000ffffffffff28', annotations=o40ann, cls=OpticalSwitch ) # NWRKNJ02 Connected to packet node | 92 | + O40 = self.addSwitch( 'NWRKNJ02', dpid='0000ffffffffff28', annotations=o40ann, cls=LINCSwitch ) # NWRKNJ02 Connected to packet node |
93 | o41ann = { "latitude": 40.767497, "longitude": -73.989713, "optical.regens": 0 } | 93 | o41ann = { "latitude": 40.767497, "longitude": -73.989713, "optical.regens": 0 } |
94 | - O41 = self.addSwitch( 'NYCMNY54', dpid='0000ffffffffff29', annotations=o41ann, cls=OpticalSwitch ) | 94 | + O41 = self.addSwitch( 'NYCMNY54', dpid='0000ffffffffff29', annotations=o41ann, cls=LINCSwitch ) |
95 | o42ann = { "latitude": 35.470833, "longitude": -97.515274, "optical.regens": 0 } | 95 | o42ann = { "latitude": 35.470833, "longitude": -97.515274, "optical.regens": 0 } |
96 | - O42 = self.addSwitch( 'OKCYOKCE', dpid='0000ffffffffff2a', annotations=o42ann, cls=OpticalSwitch ) | 96 | + O42 = self.addSwitch( 'OKCYOKCE', dpid='0000ffffffffff2a', annotations=o42ann, cls=LINCSwitch ) |
97 | o43ann = { "latitude": 37.805556, "longitude": -122.268889, "optical.regens": 2 } | 97 | o43ann = { "latitude": 37.805556, "longitude": -122.268889, "optical.regens": 2 } |
98 | - O43 = self.addSwitch( 'OKLDCA03', dpid='0000ffffffffff2b', annotations=o43ann, cls=OpticalSwitch ) | 98 | + O43 = self.addSwitch( 'OKLDCA03', dpid='0000ffffffffff2b', annotations=o43ann, cls=LINCSwitch ) |
99 | o44ann = { "latitude": 41.259167, "longitude":-95.940277, "optical.regens": 0 } | 99 | o44ann = { "latitude": 41.259167, "longitude":-95.940277, "optical.regens": 0 } |
100 | - O44 = self.addSwitch( 'OMAHNENW', dpid='0000ffffffffff2c', annotations=o44ann, cls=OpticalSwitch ) | 100 | + O44 = self.addSwitch( 'OMAHNENW', dpid='0000ffffffffff2c', annotations=o44ann, cls=LINCSwitch ) |
101 | o45ann = { "latitude": 28.543279, "longitude": -81.377502, "optical.regens": 0 } | 101 | o45ann = { "latitude": 28.543279, "longitude": -81.377502, "optical.regens": 0 } |
102 | - O45 = self.addSwitch( 'ORLDFLMA', dpid='0000ffffffffff2d', annotations=o45ann, cls=OpticalSwitch ) # ORLDFLMA Connected to packet node | 102 | + O45 = self.addSwitch( 'ORLDFLMA', dpid='0000ffffffffff2d', annotations=o45ann, cls=LINCSwitch ) # ORLDFLMA Connected to packet node |
103 | o46ann = { "latitude": 39.946446, "longitude": -75.184139, "optical.regens": 0 } | 103 | o46ann = { "latitude": 39.946446, "longitude": -75.184139, "optical.regens": 0 } |
104 | - O46 = self.addSwitch( 'PHLAPASL', dpid='0000ffffffffff2e', annotations=o46ann, cls=OpticalSwitch ) | 104 | + O46 = self.addSwitch( 'PHLAPASL', dpid='0000ffffffffff2e', annotations=o46ann, cls=LINCSwitch ) |
105 | o47ann = { "latitude": 33.450361, "longitude": -112.07709, "optical.regens": 0 } | 105 | o47ann = { "latitude": 33.450361, "longitude": -112.07709, "optical.regens": 0 } |
106 | - O47 = self.addSwitch( 'PHNXAZMA', dpid='0000ffffffffff2f', annotations=o47ann, cls=OpticalSwitch ) # PHNXAZMA Connected to packet node | 106 | + O47 = self.addSwitch( 'PHNXAZMA', dpid='0000ffffffffff2f', annotations=o47ann, cls=LINCSwitch ) # PHNXAZMA Connected to packet node |
107 | o48ann = { "latitude":40.441387, "longitude": -79.995552, "optical.regens": 0 } | 107 | o48ann = { "latitude":40.441387, "longitude": -79.995552, "optical.regens": 0 } |
108 | - O48 = self.addSwitch( 'PITBPADG', dpid='0000ffffffffff30', annotations=o48ann, cls=OpticalSwitch ) | 108 | + O48 = self.addSwitch( 'PITBPADG', dpid='0000ffffffffff30', annotations=o48ann, cls=LINCSwitch ) |
109 | o49ann = { "latitude":41.818889, "longitude": -71.415278, "optical.regens": 0 } | 109 | o49ann = { "latitude":41.818889, "longitude": -71.415278, "optical.regens": 0 } |
110 | - O49 = self.addSwitch( 'PRVDRIGR', dpid='0000ffffffffff31', annotations=o49ann, cls=OpticalSwitch ) | 110 | + O49 = self.addSwitch( 'PRVDRIGR', dpid='0000ffffffffff31', annotations=o49ann, cls=LINCSwitch ) |
111 | o50ann = { "latitude": 45.522499, "longitude": -122.678055, "optical.regens": 2 } | 111 | o50ann = { "latitude": 45.522499, "longitude": -122.678055, "optical.regens": 2 } |
112 | - O50 = self.addSwitch( 'PTLDOR62', dpid='0000ffffffffff32', annotations=o50ann, cls=OpticalSwitch ) | 112 | + O50 = self.addSwitch( 'PTLDOR62', dpid='0000ffffffffff32', annotations=o50ann, cls=LINCSwitch ) |
113 | o51ann = { "latitude": 37.540752, "longitude": -77.436096, "optical.regens": 0 } | 113 | o51ann = { "latitude": 37.540752, "longitude": -77.436096, "optical.regens": 0 } |
114 | - O51 = self.addSwitch( 'RCMDVAGR', dpid='0000ffffffffff33', annotations=o51ann, cls=OpticalSwitch ) | 114 | + O51 = self.addSwitch( 'RCMDVAGR', dpid='0000ffffffffff33', annotations=o51ann, cls=LINCSwitch ) |
115 | o52ann = { "latitude": 35.779656, "longitude": -78.640831, "optical.regens": 0 } | 115 | o52ann = { "latitude": 35.779656, "longitude": -78.640831, "optical.regens": 0 } |
116 | - O52 = self.addSwitch( 'RLGHNCMO', dpid='0000ffffffffff34', annotations=o52ann, cls=OpticalSwitch ) | 116 | + O52 = self.addSwitch( 'RLGHNCMO', dpid='0000ffffffffff34', annotations=o52ann, cls=LINCSwitch ) |
117 | o53ann = { "latitude": 43.157222, "longitude": -77.616389, "optical.regens": 0 } | 117 | o53ann = { "latitude": 43.157222, "longitude": -77.616389, "optical.regens": 0 } |
118 | - O53 = self.addSwitch( 'ROCHNYXA', dpid='0000ffffffffff35', annotations=o53ann, cls=OpticalSwitch ) # ROCHNYXA Connected to packet node | 118 | + O53 = self.addSwitch( 'ROCHNYXA', dpid='0000ffffffffff35', annotations=o53ann, cls=LINCSwitch ) # ROCHNYXA Connected to packet node |
119 | o54ann = { "latitude": 38.578609, "longitude": -121.487221, "optical.regens": 0 } | 119 | o54ann = { "latitude": 38.578609, "longitude": -121.487221, "optical.regens": 0 } |
120 | - O54 = self.addSwitch( 'SCRMCA01', dpid='0000ffffffffff36', annotations=o54ann, cls=OpticalSwitch ) | 120 | + O54 = self.addSwitch( 'SCRMCA01', dpid='0000ffffffffff36', annotations=o54ann, cls=LINCSwitch ) |
121 | o55ann = { "latitude": 41.415278, "longitude": -75.649167, "optical.regens": 0 } | 121 | o55ann = { "latitude": 41.415278, "longitude": -75.649167, "optical.regens": 0 } |
122 | - O55 = self.addSwitch( 'SCTNPA01', dpid='0000ffffffffff37', annotations=o55ann, cls=OpticalSwitch ) | 122 | + O55 = self.addSwitch( 'SCTNPA01', dpid='0000ffffffffff37', annotations=o55ann, cls=LINCSwitch ) |
123 | o56ann = { "latitude": 40.767776, "longitude": -111.888336, "optical.regens": 0 } | 123 | o56ann = { "latitude": 40.767776, "longitude": -111.888336, "optical.regens": 0 } |
124 | - O56 = self.addSwitch( 'SLKCUTMA', dpid='0000ffffffffff38', annotations=o56ann, cls=OpticalSwitch ) | 124 | + O56 = self.addSwitch( 'SLKCUTMA', dpid='0000ffffffffff38', annotations=o56ann, cls=LINCSwitch ) |
125 | o57ann = { "latitude": 29.429445, "longitude": -98.488892, "optical.regens": 0 } | 125 | o57ann = { "latitude": 29.429445, "longitude": -98.488892, "optical.regens": 0 } |
126 | - O57 = self.addSwitch( 'SNANTXCA', dpid='0000ffffffffff39', annotations=o57ann, cls=OpticalSwitch ) # SNANTXCA Connected to packet node | 126 | + O57 = self.addSwitch( 'SNANTXCA', dpid='0000ffffffffff39', annotations=o57ann, cls=LINCSwitch ) # SNANTXCA Connected to packet node |
127 | o58ann = { "latitude": 34.418889, "longitude": -119.7, "optical.regens": 0 } | 127 | o58ann = { "latitude": 34.418889, "longitude": -119.7, "optical.regens": 0 } |
128 | - O58 = self.addSwitch( 'SNBBCA01', dpid='0000ffffffffff3a', annotations=o58ann, cls=OpticalSwitch ) | 128 | + O58 = self.addSwitch( 'SNBBCA01', dpid='0000ffffffffff3a', annotations=o58ann, cls=LINCSwitch ) |
129 | o59ann = { "latitude":32.746944, "longitude": -117.158611, "optical.regens": 0 } | 129 | o59ann = { "latitude":32.746944, "longitude": -117.158611, "optical.regens": 0 } |
130 | - O59 = self.addSwitch( 'SNDGCA02', dpid='0000ffffffffff3b', annotations=o59ann, cls=OpticalSwitch ) | 130 | + O59 = self.addSwitch( 'SNDGCA02', dpid='0000ffffffffff3b', annotations=o59ann, cls=LINCSwitch ) |
131 | o60ann = { "latitude":37.785143, "longitude": -122.397263, "optical.regens": 0 } | 131 | o60ann = { "latitude":37.785143, "longitude": -122.397263, "optical.regens": 0 } |
132 | - O60 = self.addSwitch( 'SNFCCA21', dpid='0000ffffffffff3c', annotations=o60ann, cls=OpticalSwitch ) | 132 | + O60 = self.addSwitch( 'SNFCCA21', dpid='0000ffffffffff3c', annotations=o60ann, cls=LINCSwitch ) |
133 | o61ann = { "latitude": 37.333333, "longitude": -121.892778, "optical.regens": 0 } | 133 | o61ann = { "latitude": 37.333333, "longitude": -121.892778, "optical.regens": 0 } |
134 | - O61 = self.addSwitch( 'SNJSCA02', dpid='0000ffffffffff3d', annotations=o61ann, cls=OpticalSwitch ) # SNJSCA02 Connected to packet node | 134 | + O61 = self.addSwitch( 'SNJSCA02', dpid='0000ffffffffff3d', annotations=o61ann, cls=LINCSwitch ) # SNJSCA02 Connected to packet node |
135 | o62ann = { "latitude": 39.795278, "longitude": -89.649444, "optical.regens": 0 } | 135 | o62ann = { "latitude": 39.795278, "longitude": -89.649444, "optical.regens": 0 } |
136 | - O62 = self.addSwitch( 'SPFDILSD', dpid='0000ffffffffff3e', annotations=o62ann, cls=OpticalSwitch ) | 136 | + O62 = self.addSwitch( 'SPFDILSD', dpid='0000ffffffffff3e', annotations=o62ann, cls=LINCSwitch ) |
137 | o63ann = { "latitude": 47.654724, "longitude": -117.419167, "optical.regens": 0 } | 137 | o63ann = { "latitude": 47.654724, "longitude": -117.419167, "optical.regens": 0 } |
138 | - O63 = self.addSwitch( 'SPKNWA01', dpid='0000ffffffffff3f', annotations=o63ann, cls=OpticalSwitch ) | 138 | + O63 = self.addSwitch( 'SPKNWA01', dpid='0000ffffffffff3f', annotations=o63ann, cls=LINCSwitch ) |
139 | o64ann = { "latitude": 38.633335, "longitude": -90.215279, "optical.regens": 0 } | 139 | o64ann = { "latitude": 38.633335, "longitude": -90.215279, "optical.regens": 0 } |
140 | - O64 = self.addSwitch( 'STLSMO09', dpid='0000ffffffffff40', annotations=o64ann, cls=OpticalSwitch ) | 140 | + O64 = self.addSwitch( 'STLSMO09', dpid='0000ffffffffff40', annotations=o64ann, cls=LINCSwitch ) |
141 | o65ann = { "latitude": 47.606945, "longitude": -122.333336, "optical.regens": 0 } | 141 | o65ann = { "latitude": 47.606945, "longitude": -122.333336, "optical.regens": 0 } |
142 | - O65 = self.addSwitch( 'STTLWA06', dpid='0000ffffffffff41', annotations=o65ann, cls=OpticalSwitch ) | 142 | + O65 = self.addSwitch( 'STTLWA06', dpid='0000ffffffffff41', annotations=o65ann, cls=LINCSwitch ) |
143 | o66ann = { "latitude": 43.049444, "longitude": -76.1475, "optical.regens": 3 } | 143 | o66ann = { "latitude": 43.049444, "longitude": -76.1475, "optical.regens": 3 } |
144 | - O66 = self.addSwitch( 'SYRCNYSU', dpid='0000ffffffffff42', annotations=o66ann, cls=OpticalSwitch ) | 144 | + O66 = self.addSwitch( 'SYRCNYSU', dpid='0000ffffffffff42', annotations=o66ann, cls=LINCSwitch ) |
145 | o67ann = { "latitude": 28.0225, "longitude": -82.522778, "optical.regens": 0 } | 145 | o67ann = { "latitude": 28.0225, "longitude": -82.522778, "optical.regens": 0 } |
146 | - O67 = self.addSwitch( 'TAMQFLFN', dpid='0000ffffffffff43', annotations=o67ann, cls=OpticalSwitch ) | 146 | + O67 = self.addSwitch( 'TAMQFLFN', dpid='0000ffffffffff43', annotations=o67ann, cls=LINCSwitch ) |
147 | o68ann = { "latitude": 32.224444, "longitude": -110.968333, "optical.regens": 0 } | 147 | o68ann = { "latitude": 32.224444, "longitude": -110.968333, "optical.regens": 0 } |
148 | - O68 = self.addSwitch( 'TCSNAZMA', dpid='0000ffffffffff44', annotations=o68ann, cls=OpticalSwitch ) | 148 | + O68 = self.addSwitch( 'TCSNAZMA', dpid='0000ffffffffff44', annotations=o68ann, cls=LINCSwitch ) |
149 | o69ann = { "latitude": 30.456389, "longitude": -84.290833, "optical.regens": 0 } | 149 | o69ann = { "latitude": 30.456389, "longitude": -84.290833, "optical.regens": 0 } |
150 | - O69 = self.addSwitch( 'TLHSFLAT', dpid='0000ffffffffff45', annotations=o69ann, cls=OpticalSwitch ) | 150 | + O69 = self.addSwitch( 'TLHSFLAT', dpid='0000ffffffffff45', annotations=o69ann, cls=LINCSwitch ) |
151 | o70ann = { "latitude": 41.65, "longitude": -83.538056, "optical.regens": 2 } | 151 | o70ann = { "latitude": 41.65, "longitude": -83.538056, "optical.regens": 2 } |
152 | - O70 = self.addSwitch( 'TOLDOH21', dpid='0000ffffffffff46', annotations=o70ann, cls=OpticalSwitch ) | 152 | + O70 = self.addSwitch( 'TOLDOH21', dpid='0000ffffffffff46', annotations=o70ann, cls=LINCSwitch ) |
153 | o71ann = { "latitude": 36.151669, "longitude": -95.985832, "optical.regens": 0 } | 153 | o71ann = { "latitude": 36.151669, "longitude": -95.985832, "optical.regens": 0 } |
154 | - O71 = self.addSwitch( 'TULSOKTB', dpid='0000ffffffffff47', annotations=o71ann, cls=OpticalSwitch ) | 154 | + O71 = self.addSwitch( 'TULSOKTB', dpid='0000ffffffffff47', annotations=o71ann, cls=LINCSwitch ) |
155 | o72ann = { "latitude": 38.88306 , "longitude": -77.01028, "optical.regens": 0 } | 155 | o72ann = { "latitude": 38.88306 , "longitude": -77.01028, "optical.regens": 0 } |
156 | - O72 = self.addSwitch( 'WASHDCSW', dpid='0000ffffffffff48', annotations=o72ann, cls=OpticalSwitch ) # WASHDCSW Connected to packet node | 156 | + O72 = self.addSwitch( 'WASHDCSW', dpid='0000ffffffffff48', annotations=o72ann, cls=LINCSwitch ) # WASHDCSW Connected to packet node |
157 | o73ann = { "latitude": 39.739167, "longitude": -75.553889, "optical.regens": 0 } | 157 | o73ann = { "latitude": 39.739167, "longitude": -75.553889, "optical.regens": 0 } |
158 | - O73 = self.addSwitch( 'WLMGDE01', dpid='0000ffffffffff49', annotations=o73ann, cls=OpticalSwitch ) | 158 | + O73 = self.addSwitch( 'WLMGDE01', dpid='0000ffffffffff49', annotations=o73ann, cls=LINCSwitch ) |
159 | o74ann = { "latitude": 26.709391, "longitude": -80.05278, "optical.regens": 0 } | 159 | o74ann = { "latitude": 26.709391, "longitude": -80.05278, "optical.regens": 0 } |
160 | - O74 = self.addSwitch( 'WPBHFLAN', dpid='0000ffffffffff4a', annotations=o74ann, cls=OpticalSwitch ) | 160 | + O74 = self.addSwitch( 'WPBHFLAN', dpid='0000ffffffffff4a', annotations=o74ann, cls=LINCSwitch ) |
161 | o75ann = { "latitude": 29.57, "longitude": -96.7, "optical.regens": 0 } | 161 | o75ann = { "latitude": 29.57, "longitude": -96.7, "optical.regens": 0 } |
162 | - O75 = self.addSwitch( 'AUSTTXGR', dpid='0000ffffffffff4b', annotations=o75ann, cls=OpticalSwitch ) | 162 | + O75 = self.addSwitch( 'AUSTTXGR', dpid='0000ffffffffff4b', annotations=o75ann, cls=LINCSwitch ) |
163 | #o25ann = { "latitude": 29.748333, "longitude": -95.36528, "optical.regens": 0 } | 163 | #o25ann = { "latitude": 29.748333, "longitude": -95.36528, "optical.regens": 0 } |
164 | #o57ann = { "latitude": 29.429445, "longitude": -98.488892, "optical.regens": 0 } | 164 | #o57ann = { "latitude": 29.429445, "longitude": -98.488892, "optical.regens": 0 } |
165 | 165 | ||
... | @@ -188,162 +188,162 @@ class BigOpticalTopo( Topo ): | ... | @@ -188,162 +188,162 @@ class BigOpticalTopo( Topo ): |
188 | 188 | ||
189 | 189 | ||
190 | # Optical Links between the ROADMs (although Distance is not used; we should keep these for future reference) | 190 | # Optical Links between the ROADMs (although Distance is not used; we should keep these for future reference) |
191 | - self.addLink( O1, O18, port1=100, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 334, "durable": "true" }, cls=OpticalLink ) # ABLNTXRO DLLSTXTL | 191 | + self.addLink( O1, O18, port1=100, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 334, "durable": "true" }, cls=LINCLink ) # ABLNTXRO DLLSTXTL |
192 | - self.addLink( O1, O21, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 768, "durable": "true" }, cls=OpticalLink ) # ABLNTXRO ELPSTXMA | 192 | + self.addLink( O1, O21, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 768, "durable": "true" }, cls=LINCLink ) # ABLNTXRO ELPSTXMA |
193 | - self.addLink( O3, O16, port1=100, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 265, "durable": "true" }, cls=OpticalLink ) # ALBYNYSS CMBRMA01 | 193 | + self.addLink( O3, O16, port1=100, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 265, "durable": "true" }, cls=LINCLink ) # ALBYNYSS CMBRMA01 |
194 | - self.addLink( O3, O66, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 239, "durable": "true" }, cls=OpticalLink ) # ALBYNYSS SYRCNYSU | 194 | + self.addLink( O3, O66, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 239, "durable": "true" }, cls=LINCLink ) # ALBYNYSS SYRCNYSU |
195 | - self.addLink( O2, O18, port1=100, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1134, "durable": "true" }, cls=OpticalLink ) # ALBQNMMA DLLSTXTL | 195 | + self.addLink( O2, O18, port1=100, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1134, "durable": "true" }, cls=LINCLink ) # ALBQNMMA DLLSTXTL |
196 | - self.addLink( O2, O19, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 646, "durable": "true" }, cls=OpticalLink ) # ALBQNMMA DNVRCOMA | 196 | + self.addLink( O2, O19, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 646, "durable": "true" }, cls=LINCLink ) # ALBQNMMA DNVRCOMA |
197 | - self.addLink( O2, O21, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 444, "durable": "true" }, cls=OpticalLink ) # ALBQNMMA ELPSTXMA | 197 | + self.addLink( O2, O21, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 444, "durable": "true" }, cls=LINCLink ) # ALBQNMMA ELPSTXMA |
198 | - self.addLink( O2, O30, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 931, "durable": "true" }, cls=OpticalLink ) # ALBQNMMA LSVGNV02 | 198 | + self.addLink( O2, O30, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 931, "durable": "true" }, cls=LINCLink ) # ALBQNMMA LSVGNV02 |
199 | - self.addLink( O4, O8, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 271, "durable": "true" }, cls=OpticalLink ) # ATLNGATL BRHMALMT | 199 | + self.addLink( O4, O8, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 271, "durable": "true" }, cls=LINCLink ) # ATLNGATL BRHMALMT |
200 | - self.addLink( O4, O12, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 436, "durable": "true" }, cls=OpticalLink ) # ATLNGATL CHRLNCCA | 200 | + self.addLink( O4, O12, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 436, "durable": "true" }, cls=LINCLink ) # ATLNGATL CHRLNCCA |
201 | - self.addLink( O4, O26, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 566, "durable": "true" }, cls=OpticalLink ) # ATLNGATL JCVLFLCL | 201 | + self.addLink( O4, O26, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 566, "durable": "true" }, cls=LINCLink ) # ATLNGATL JCVLFLCL |
202 | - self.addLink( O75, O25, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 283, "durable": "true" }, cls=OpticalLink ) # AUSTTXGR HSTNTX01 | 202 | + self.addLink( O75, O25, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 283, "durable": "true" }, cls=LINCLink ) # AUSTTXGR HSTNTX01 |
203 | - self.addLink( O75, O57, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 141, "durable": "true" }, cls=OpticalLink ) # AUSTTXGR SNANTXCA | 203 | + self.addLink( O75, O57, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 141, "durable": "true" }, cls=LINCLink ) # AUSTTXGR SNANTXCA |
204 | - self.addLink( O7, O46, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 170, "durable": "true" }, cls=OpticalLink ) # BLTMMDCH PHLAPASL | 204 | + self.addLink( O7, O46, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 170, "durable": "true" }, cls=LINCLink ) # BLTMMDCH PHLAPASL |
205 | - self.addLink( O7, O48, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 378, "durable": "true" }, cls=OpticalLink ) # BLTMMDCH PITBPADG | 205 | + self.addLink( O7, O48, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 378, "durable": "true" }, cls=LINCLink ) # BLTMMDCH PITBPADG |
206 | - self.addLink( O7, O70, port1=103, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 68, "durable": "true" }, cls=OpticalLink ) # BLTMMDCH WASHDCSW | 206 | + self.addLink( O7, O70, port1=103, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 68, "durable": "true" }, cls=LINCLink ) # BLTMMDCH WASHDCSW |
207 | - self.addLink( O10, O25, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 491, "durable": "true" }, cls=OpticalLink ) # BTRGLAMA HSTNTX01 | 207 | + self.addLink( O10, O25, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 491, "durable": "true" }, cls=LINCLink ) # BTRGLAMA HSTNTX01 |
208 | - self.addLink( O10, O39, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 144, "durable": "true" }, cls=OpticalLink ) # BTRGLAMA NWORLAMA | 208 | + self.addLink( O10, O39, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 144, "durable": "true" }, cls=LINCLink ) # BTRGLAMA NWORLAMA |
209 | - self.addLink( O6, O9, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 724, "durable": "true" }, cls=OpticalLink ) # BLNGMTMA BSMRNDJC | 209 | + self.addLink( O6, O9, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 724, "durable": "true" }, cls=LINCLink ) # BLNGMTMA BSMRNDJC |
210 | - self.addLink( O6, O19, port1=102, port2=107, annotations={ "optical.wves": 80, "optical.type": "WDM", "optical.kms": 875, "durable": "true" }, cls=OpticalLink ) # BLNGMTMA DNVRCOMA | 210 | + self.addLink( O6, O19, port1=102, port2=107, annotations={ "optical.wves": 80, "optical.type": "WDM", "optical.kms": 875, "durable": "true" }, cls=LINCLink ) # BLNGMTMA DNVRCOMA |
211 | - self.addLink( O6, O63, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 852, "durable": "true" }, cls=OpticalLink ) # BLNGMTMA SPKNWA01 | 211 | + self.addLink( O6, O63, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 852, "durable": "true" }, cls=LINCLink ) # BLNGMTMA SPKNWA01 |
212 | - self.addLink( O8, O38, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 353, "durable": "true" }, cls=OpticalLink ) # BRHMALMT NSVLTNMT | 212 | + self.addLink( O8, O38, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 353, "durable": "true" }, cls=LINCLink ) # BRHMALMT NSVLTNMT |
213 | - self.addLink( O8, O39, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 602, "durable": "true" }, cls=OpticalLink ) # BRHMALMT NWORLAMA | 213 | + self.addLink( O8, O39, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 602, "durable": "true" }, cls=LINCLink ) # BRHMALMT NWORLAMA |
214 | - self.addLink( O9, O36, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 741, "durable": "true" }, cls=OpticalLink ) # BSMRNDJC MPLSMNDT | 214 | + self.addLink( O9, O36, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 741, "durable": "true" }, cls=LINCLink ) # BSMRNDJC MPLSMNDT |
215 | - self.addLink( O16, O49, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 80, "durable": "true" }, cls=OpticalLink ) # CMBRMA01 PRVDRIGR | 215 | + self.addLink( O16, O49, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 80, "durable": "true" }, cls=LINCLink ) # CMBRMA01 PRVDRIGR |
216 | - self.addLink( O5, O14, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 333, "durable": "true" }, cls=OpticalLink ) # BFLONYFR CLEVOH02 | 216 | + self.addLink( O5, O14, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 333, "durable": "true" }, cls=LINCLink ) # BFLONYFR CLEVOH02 |
217 | - self.addLink( O5, O53, port1=104, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 128, "durable": "true" }, cls=OpticalLink ) # BFLONYFR ROCHNYXA | 217 | + self.addLink( O5, O53, port1=104, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 128, "durable": "true" }, cls=LINCLink ) # BFLONYFR ROCHNYXA |
218 | - self.addLink( O13, O26, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 368, "durable": "true" }, cls=OpticalLink ) # CHTNSCDT JCVLFLCL | 218 | + self.addLink( O13, O26, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 368, "durable": "true" }, cls=LINCLink ) # CHTNSCDT JCVLFLCL |
219 | - self.addLink( O13, O52, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 424, "durable": "true" }, cls=OpticalLink ) # CHTNSCDT RLGHNCMO | 219 | + self.addLink( O13, O52, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 424, "durable": "true" }, cls=LINCLink ) # CHTNSCDT RLGHNCMO |
220 | - self.addLink( O12, O23, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 160, "durable": "true" }, cls=OpticalLink ) # CHRLNCCA GNBONCEU | 220 | + self.addLink( O12, O23, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 160, "durable": "true" }, cls=LINCLink ) # CHRLNCCA GNBONCEU |
221 | - self.addLink( O11, O20, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 458, "durable": "true" }, cls=OpticalLink ) # CHCGILCL DTRTMIBA | 221 | + self.addLink( O11, O20, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 458, "durable": "true" }, cls=LINCLink ) # CHCGILCL DTRTMIBA |
222 | - self.addLink( O11, O34, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 156, "durable": "true" }, cls=OpticalLink ) # CHCGILCL MILWWIHE | 222 | + self.addLink( O11, O34, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 156, "durable": "true" }, cls=LINCLink ) # CHCGILCL MILWWIHE |
223 | - self.addLink( O11, O62, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 344, "durable": "true" }, cls=OpticalLink ) # CHCGILCL SPFDILSD | 223 | + self.addLink( O11, O62, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 344, "durable": "true" }, cls=LINCLink ) # CHCGILCL SPFDILSD |
224 | - self.addLink( O17, O15, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 194, "durable": "true" }, cls=OpticalLink ) # CNCNOHWS CLMBOH11 | 224 | + self.addLink( O17, O15, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 194, "durable": "true" }, cls=LINCLink ) # CNCNOHWS CLMBOH11 |
225 | - self.addLink( O17, O31, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 172, "durable": "true" }, cls=OpticalLink ) # CNCNOHWS LSVLKYCS | 225 | + self.addLink( O17, O31, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 172, "durable": "true" }, cls=LINCLink ) # CNCNOHWS LSVLKYCS |
226 | - self.addLink( O17, O72, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 779, "durable": "true" }, cls=OpticalLink ) # CNCNOHWS WASHDCSW | 226 | + self.addLink( O17, O72, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 779, "durable": "true" }, cls=LINCLink ) # CNCNOHWS WASHDCSW |
227 | - self.addLink( O14, O15, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 243, "durable": "true" }, cls=OpticalLink ) # CLEVOH02 CLMBOH11 | 227 | + self.addLink( O14, O15, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 243, "durable": "true" }, cls=LINCLink ) # CLEVOH02 CLMBOH11 |
228 | - self.addLink( O14, O70, port1=102, port2=101, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 185, "durable": "true" }, cls=OpticalLink ) # CLEVOH02 TOLDOH21 | 228 | + self.addLink( O14, O70, port1=102, port2=101, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 185, "durable": "true" }, cls=LINCLink ) # CLEVOH02 TOLDOH21 |
229 | - self.addLink( O15, O48, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 312, "durable": "true" }, cls=OpticalLink ) # CLMBOH11 PITBPADG | 229 | + self.addLink( O15, O48, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 312, "durable": "true" }, cls=LINCLink ) # CLMBOH11 PITBPADG |
230 | - self.addLink( O18, O25, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 437, "durable": "true" }, cls=OpticalLink ) # DLLSTXTL HSTNTX01 | 230 | + self.addLink( O18, O25, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 437, "durable": "true" }, cls=LINCLink ) # DLLSTXTL HSTNTX01 |
231 | - self.addLink( O18, O32, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 563, "durable": "true" }, cls=OpticalLink ) # DLLSTXTL LTRKARFR | 231 | + self.addLink( O18, O32, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 563, "durable": "true" }, cls=LINCLink ) # DLLSTXTL LTRKARFR |
232 | - self.addLink( O18, O42, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 365, "durable": "true" }, cls=OpticalLink ) # DLLSTXTL OKCYOKCE | 232 | + self.addLink( O18, O42, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 365, "durable": "true" }, cls=LINCLink ) # DLLSTXTL OKCYOKCE |
233 | - self.addLink( O19, O44, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 940, "durable": "true" }, cls=OpticalLink ) # DNVRCOMA OMAHNENW | 233 | + self.addLink( O19, O44, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 940, "durable": "true" }, cls=LINCLink ) # DNVRCOMA OMAHNENW |
234 | - self.addLink( O19, O56, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 714, "durable": "true" }, cls=OpticalLink ) # DNVRCOMA SLKCUTMA | 234 | + self.addLink( O19, O56, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 714, "durable": "true" }, cls=LINCLink ) # DNVRCOMA SLKCUTMA |
235 | - self.addLink( O20, O70, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 103, "durable": "true" }, cls=OpticalLink ) # DTRTMIBA TOLDOH21 | 235 | + self.addLink( O20, O70, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 103, "durable": "true" }, cls=LINCLink ) # DTRTMIBA TOLDOH21 |
236 | - self.addLink( O21, O57, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 969, "durable": "true" }, cls=OpticalLink ) # ELPSTXMA SNANTXCA | 236 | + self.addLink( O21, O57, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 969, "durable": "true" }, cls=LINCLink ) # ELPSTXMA SNANTXCA |
237 | - self.addLink( O21, O68, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 511, "durable": "true" }, cls=OpticalLink ) # ELPSTXMA TCSNAZMA | 237 | + self.addLink( O21, O68, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 511, "durable": "true" }, cls=LINCLink ) # ELPSTXMA TCSNAZMA |
238 | - self.addLink( O22, O31, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 505, "durable": "true" }, cls=OpticalLink ) # FRSNCA01 LSVGNV02 | 238 | + self.addLink( O22, O31, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 505, "durable": "true" }, cls=LINCLink ) # FRSNCA01 LSVGNV02 |
239 | - self.addLink( O22, O29, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 396, "durable": "true" }, cls=OpticalLink ) # FRSNCA01 LSANCA03 | 239 | + self.addLink( O22, O29, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 396, "durable": "true" }, cls=LINCLink ) # FRSNCA01 LSANCA03 |
240 | - self.addLink( O22, O42, port1=103, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 298, "durable": "true" }, cls=OpticalLink ) # FRSNCA01 OKLDCA03 | 240 | + self.addLink( O22, O42, port1=103, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 298, "durable": "true" }, cls=LINCLink ) # FRSNCA01 OKLDCA03 |
241 | - self.addLink( O23, O31, port1=101, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 697, "durable": "true" }, cls=OpticalLink ) # GNBONCEU LSVLKYCS | 241 | + self.addLink( O23, O31, port1=101, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 697, "durable": "true" }, cls=LINCLink ) # GNBONCEU LSVLKYCS |
242 | - self.addLink( O23, O52, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 130, "durable": "true" }, cls=OpticalLink ) # GNBONCEU RLGHNCMO | 242 | + self.addLink( O23, O52, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 130, "durable": "true" }, cls=LINCLink ) # GNBONCEU RLGHNCMO |
243 | - self.addLink( O23, O51, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 319, "durable": "true" }, cls=OpticalLink ) # GNBONCEU RCMDVAGR | 243 | + self.addLink( O23, O51, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 319, "durable": "true" }, cls=LINCLink ) # GNBONCEU RCMDVAGR |
244 | - self.addLink( O24, O28, port1=101, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 185, "durable": "true" }, cls=OpticalLink ) # HRFRCT03 L_Island | 244 | + self.addLink( O24, O28, port1=101, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 185, "durable": "true" }, cls=LINCLink ) # HRFRCT03 L_Island |
245 | - self.addLink( O24, O49, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 125, "durable": "true" }, cls=OpticalLink ) # HRFRCT03 PRVDRIGR | 245 | + self.addLink( O24, O49, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 125, "durable": "true" }, cls=LINCLink ) # HRFRCT03 PRVDRIGR |
246 | - self.addLink( O26, O45, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 238, "durable": "true" }, cls=OpticalLink ) # JCVLFLCL ORLDFLMA | 246 | + self.addLink( O26, O45, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 238, "durable": "true" }, cls=LINCLink ) # JCVLFLCL ORLDFLMA |
247 | - self.addLink( O27, O44, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 320, "durable": "true" }, cls=OpticalLink ) # KSCYMO09 OMAHNENW | 247 | + self.addLink( O27, O44, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 320, "durable": "true" }, cls=LINCLink ) # KSCYMO09 OMAHNENW |
248 | - self.addLink( O27, O64, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 457, "durable": "true" }, cls=OpticalLink ) # KSCYMO09 STLSMO09 | 248 | + self.addLink( O27, O64, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 457, "durable": "true" }, cls=LINCLink ) # KSCYMO09 STLSMO09 |
249 | - self.addLink( O27, O71, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 420, "durable": "true" }, cls=OpticalLink ) # KSCYMO09 TULSOKTB | 249 | + self.addLink( O27, O71, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 420, "durable": "true" }, cls=LINCLink ) # KSCYMO09 TULSOKTB |
250 | - self.addLink( O30, O47, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 494, "durable": "true" }, cls=OpticalLink ) # LSVGNV02 PHNXAZMA | 250 | + self.addLink( O30, O47, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 494, "durable": "true" }, cls=LINCLink ) # LSVGNV02 PHNXAZMA |
251 | - self.addLink( O30, O56, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 701, "durable": "true" }, cls=OpticalLink ) # LSVGNV02 SLKCUTMA | 251 | + self.addLink( O30, O56, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 701, "durable": "true" }, cls=LINCLink ) # LSVGNV02 SLKCUTMA |
252 | - self.addLink( O32, O35, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 249, "durable": "true" }, cls=OpticalLink ) # LTRKARFR MMPHTNMA | 252 | + self.addLink( O32, O35, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 249, "durable": "true" }, cls=LINCLink ) # LTRKARFR MMPHTNMA |
253 | - self.addLink( O28, O41, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 40, "durable": "true" }, cls=OpticalLink ) # L_Island NYCMNY54 | 253 | + self.addLink( O28, O41, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 40, "durable": "true" }, cls=LINCLink ) # L_Island NYCMNY54 |
254 | - self.addLink( O29, O59, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 212, "durable": "true" }, cls=OpticalLink ) # LSANCA03 SNDGCA02 | 254 | + self.addLink( O29, O59, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 212, "durable": "true" }, cls=LINCLink ) # LSANCA03 SNDGCA02 |
255 | - self.addLink( O29, O58, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 167, "durable": "true" }, cls=OpticalLink ) # LSANCA03 SNBBCA01 | 255 | + self.addLink( O29, O58, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 167, "durable": "true" }, cls=LINCLink ) # LSANCA03 SNBBCA01 |
256 | - self.addLink( O31, O38, port1=104, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 298, "durable": "true" }, cls=OpticalLink ) # LSVLKYCS NSVLTNMT | 256 | + self.addLink( O31, O38, port1=104, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 298, "durable": "true" }, cls=LINCLink ) # LSVLKYCS NSVLTNMT |
257 | - self.addLink( O31, O64, port1=102, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 468, "durable": "true" }, cls=OpticalLink ) # LSVLKYCS STLSMO09 | 257 | + self.addLink( O31, O64, port1=102, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 468, "durable": "true" }, cls=LINCLink ) # LSVLKYCS STLSMO09 |
258 | - self.addLink( O35, O38, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 380, "durable": "true" }, cls=OpticalLink ) # MMPHTNMA NSVLTNMT | 258 | + self.addLink( O35, O38, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 380, "durable": "true" }, cls=LINCLink ) # MMPHTNMA NSVLTNMT |
259 | - self.addLink( O33, O67, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 407, "durable": "true" }, cls=OpticalLink ) # MIAMFLAC TAMQFLFN | 259 | + self.addLink( O33, O67, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 407, "durable": "true" }, cls=LINCLink ) # MIAMFLAC TAMQFLFN |
260 | - self.addLink( O33, O74, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 125, "durable": "true" }, cls=OpticalLink ) # MIAMFLAC WPBHFLAN | 260 | + self.addLink( O33, O74, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 125, "durable": "true" }, cls=LINCLink ) # MIAMFLAC WPBHFLAN |
261 | - self.addLink( O34, O36, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 574, "durable": "true" }, cls=OpticalLink ) # MILWWIHE MPLSMNDT | 261 | + self.addLink( O34, O36, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 574, "durable": "true" }, cls=LINCLink ) # MILWWIHE MPLSMNDT |
262 | - self.addLink( O36, O44, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 560, "durable": "true" }, cls=OpticalLink ) # MPLSMNDT OMAHNENW | 262 | + self.addLink( O36, O44, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 560, "durable": "true" }, cls=LINCLink ) # MPLSMNDT OMAHNENW |
263 | - self.addLink( O39, O69, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 670, "durable": "true" }, cls=OpticalLink ) # NWORLAMA TLHSFLAT | 263 | + self.addLink( O39, O69, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 670, "durable": "true" }, cls=LINCLink ) # NWORLAMA TLHSFLAT |
264 | - self.addLink( O41, O40, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 19, "durable": "true" }, cls=OpticalLink ) # NYCMNY54 NWRKNJ02 | 264 | + self.addLink( O41, O40, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 19, "durable": "true" }, cls=LINCLink ) # NYCMNY54 NWRKNJ02 |
265 | - self.addLink( O41, O55, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 187, "durable": "true" }, cls=OpticalLink ) # NYCMNY54 SCTNPA01 | 265 | + self.addLink( O41, O55, port1=102, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 187, "durable": "true" }, cls=LINCLink ) # NYCMNY54 SCTNPA01 |
266 | - self.addLink( O41, O73, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 210, "durable": "true" }, cls=OpticalLink ) # NYCMNY54 WLMGDE01 | 266 | + self.addLink( O41, O73, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 210, "durable": "true" }, cls=LINCLink ) # NYCMNY54 WLMGDE01 |
267 | - self.addLink( O40, O46, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 146, "durable": "true" }, cls=OpticalLink ) # NWRKNJ02 PHLAPASL | 267 | + self.addLink( O40, O46, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 146, "durable": "true" }, cls=LINCLink ) # NWRKNJ02 PHLAPASL |
268 | - self.addLink( O37, O52, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 290, "durable": "true" }, cls=OpticalLink ) # NRFLVABS RLGHNCMO | 268 | + self.addLink( O37, O52, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 290, "durable": "true" }, cls=LINCLink ) # NRFLVABS RLGHNCMO |
269 | - self.addLink( O37, O73, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 392, "durable": "true" }, cls=OpticalLink ) # NRFLVABS WLMGDE01 | 269 | + self.addLink( O37, O73, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 392, "durable": "true" }, cls=LINCLink ) # NRFLVABS WLMGDE01 |
270 | - self.addLink( O43, O54, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 131, "durable": "true" }, cls=OpticalLink ) # OKLDCA03 SCRMCA01 | 270 | + self.addLink( O43, O54, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 131, "durable": "true" }, cls=LINCLink ) # OKLDCA03 SCRMCA01 |
271 | - self.addLink( O43, O56, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1142, "durable": "true" }, cls=OpticalLink ) # OKLDCA03 SLKCUTMA | 271 | + self.addLink( O43, O56, port1=102, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1142, "durable": "true" }, cls=LINCLink ) # OKLDCA03 SLKCUTMA |
272 | - self.addLink( O43, O60, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 13, "durable": "true" }, cls=OpticalLink ) # OKLDCA03 SNFCCA21 | 272 | + self.addLink( O43, O60, port1=103, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 13, "durable": "true" }, cls=LINCLink ) # OKLDCA03 SNFCCA21 |
273 | - self.addLink( O42, O71, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 188, "durable": "true" }, cls=OpticalLink ) # OKCYOKCE TULSOKTB | 273 | + self.addLink( O42, O71, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 188, "durable": "true" }, cls=LINCLink ) # OKCYOKCE TULSOKTB |
274 | - self.addLink( O45, O74, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 290, "durable": "true" }, cls=OpticalLink ) # ORLDFLMA WPBHFLAN | 274 | + self.addLink( O45, O74, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 290, "durable": "true" }, cls=LINCLink ) # ORLDFLMA WPBHFLAN |
275 | - self.addLink( O46, O55, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 201, "durable": "true" }, cls=OpticalLink ) # PHLAPASL SCTNPA01 | 275 | + self.addLink( O46, O55, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 201, "durable": "true" }, cls=LINCLink ) # PHLAPASL SCTNPA01 |
276 | - self.addLink( O47, O59, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 575, "durable": "true" }, cls=OpticalLink ) # PHNXAZMA SNDGCA02 | 276 | + self.addLink( O47, O59, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 575, "durable": "true" }, cls=LINCLink ) # PHNXAZMA SNDGCA02 |
277 | - self.addLink( O47, O68, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 205, "durable": "true" }, cls=OpticalLink ) # PHNXAZMA TCSNAZMA | 277 | + self.addLink( O47, O68, port1=102, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 205, "durable": "true" }, cls=LINCLink ) # PHNXAZMA TCSNAZMA |
278 | - self.addLink( O48, O55, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 457, "durable": "true" }, cls=OpticalLink ) # PITBPADG SCTNPA01 | 278 | + self.addLink( O48, O55, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 457, "durable": "true" }, cls=LINCLink ) # PITBPADG SCTNPA01 |
279 | - self.addLink( O50, O54, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 934, "durable": "true" }, cls=OpticalLink ) # PTLDOR62 SCRMCA01 | 279 | + self.addLink( O50, O54, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 934, "durable": "true" }, cls=LINCLink ) # PTLDOR62 SCRMCA01 |
280 | - self.addLink( O50, O56, port1=102, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1225, "durable": "true" }, cls=OpticalLink ) # PTLDOR62 SLKCUTMA | 280 | + self.addLink( O50, O56, port1=102, port2=108, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 1225, "durable": "true" }, cls=LINCLink ) # PTLDOR62 SLKCUTMA |
281 | - self.addLink( O50, O65, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 280, "durable": "true" }, cls=OpticalLink ) # PTLDOR62 STTLWA06 | 281 | + self.addLink( O50, O65, port1=103, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 280, "durable": "true" }, cls=LINCLink ) # PTLDOR62 STTLWA06 |
282 | - self.addLink( O51, O72, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 184, "durable": "true" }, cls=OpticalLink ) # RCMDVAGR WASHDCSW | 282 | + self.addLink( O51, O72, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 184, "durable": "true" }, cls=LINCLink ) # RCMDVAGR WASHDCSW |
283 | - self.addLink( O53, O66, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 143, "durable": "true" }, cls=OpticalLink ) # ROCHNYXA SYRCNYSU | 283 | + self.addLink( O53, O66, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 143, "durable": "true" }, cls=LINCLink ) # ROCHNYXA SYRCNYSU |
284 | - self.addLink( O60, O61, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 80., "durable": "true" }, cls=OpticalLink ) # SNFCCA21 SNJSCA02 | 284 | + self.addLink( O60, O61, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 80., "durable": "true" }, cls=LINCLink ) # SNFCCA21 SNJSCA02 |
285 | - self.addLink( O61, O58, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 455, "durable": "true" }, cls=OpticalLink ) # SNJSCA02 SNBBCA01 | 285 | + self.addLink( O61, O58, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 455, "durable": "true" }, cls=LINCLink ) # SNJSCA02 SNBBCA01 |
286 | - self.addLink( O55, O66, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 223, "durable": "true" }, cls=OpticalLink ) # SCTNPA01 SYRCNYSU | 286 | + self.addLink( O55, O66, port1=101, port2=105, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 223, "durable": "true" }, cls=LINCLink ) # SCTNPA01 SYRCNYSU |
287 | - self.addLink( O65, O63, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 442, "durable": "true" }, cls=OpticalLink ) # STTLWA06 SPKNWA01 | 287 | + self.addLink( O65, O63, port1=101, port2=107, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 442, "durable": "true" }, cls=LINCLink ) # STTLWA06 SPKNWA01 |
288 | - self.addLink( O62, O64, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 165, "durable": "true" }, cls=OpticalLink ) # SPFDILSD STLSMO09 | 288 | + self.addLink( O62, O64, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 165, "durable": "true" }, cls=LINCLink ) # SPFDILSD STLSMO09 |
289 | - self.addLink( O69, O67, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 384, "durable": "true" }, cls=OpticalLink ) # TLHSFLAT TAMQFLFN | 289 | + self.addLink( O69, O67, port1=101, port2=106, annotations={ "optical.waves": 80, "optical.type": "WDM", "optical.kms": 384, "durable": "true" }, cls=LINCLink ) # TLHSFLAT TAMQFLFN |
290 | 290 | ||
291 | # Packet/Optical cross connect links (this will be the tap interfaces) | 291 | # Packet/Optical cross connect links (this will be the tap interfaces) |
292 | - self.addLink( WASHDCSWR, O72, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 292 | + self.addLink( WASHDCSWR, O72, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
293 | - self.addLink( WASHDCSWR, O72, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 293 | + self.addLink( WASHDCSWR, O72, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
294 | - self.addLink( WASHDCSWR, O72, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 294 | + self.addLink( WASHDCSWR, O72, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
295 | - self.addLink( WASHDCSWR, O72, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 295 | + self.addLink( WASHDCSWR, O72, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
296 | - self.addLink( WASHDCSWR, O72, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 296 | + self.addLink( WASHDCSWR, O72, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
297 | - self.addLink( SNJSCA02R, O61, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 297 | + self.addLink( SNJSCA02R, O61, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
298 | - self.addLink( SNJSCA02R, O61, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 298 | + self.addLink( SNJSCA02R, O61, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
299 | - self.addLink( SNJSCA02R, O61, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 299 | + self.addLink( SNJSCA02R, O61, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
300 | - self.addLink( SNJSCA02R, O61, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 300 | + self.addLink( SNJSCA02R, O61, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
301 | - self.addLink( SNJSCA02R, O61, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 301 | + self.addLink( SNJSCA02R, O61, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
302 | - self.addLink( SNANTXCAR, O57, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 302 | + self.addLink( SNANTXCAR, O57, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
303 | - self.addLink( SNANTXCAR, O57, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 303 | + self.addLink( SNANTXCAR, O57, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
304 | - self.addLink( SNANTXCAR, O57, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 304 | + self.addLink( SNANTXCAR, O57, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
305 | - self.addLink( SNANTXCAR, O57, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 305 | + self.addLink( SNANTXCAR, O57, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
306 | - self.addLink( SNANTXCAR, O57, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 306 | + self.addLink( SNANTXCAR, O57, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
307 | - self.addLink( ROCHNYXAR, O53, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 307 | + self.addLink( ROCHNYXAR, O53, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
308 | - self.addLink( ROCHNYXAR, O53, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 308 | + self.addLink( ROCHNYXAR, O53, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
309 | - self.addLink( ROCHNYXAR, O53, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 309 | + self.addLink( ROCHNYXAR, O53, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
310 | - self.addLink( ROCHNYXAR, O53, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 310 | + self.addLink( ROCHNYXAR, O53, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
311 | - self.addLink( ROCHNYXAR, O53, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 311 | + self.addLink( ROCHNYXAR, O53, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
312 | - self.addLink( PHNXAZMAR, O47, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 312 | + self.addLink( PHNXAZMAR, O47, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
313 | - self.addLink( PHNXAZMAR, O47, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 313 | + self.addLink( PHNXAZMAR, O47, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
314 | - self.addLink( PHNXAZMAR, O47, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 314 | + self.addLink( PHNXAZMAR, O47, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
315 | - self.addLink( PHNXAZMAR, O47, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 315 | + self.addLink( PHNXAZMAR, O47, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
316 | - self.addLink( PHNXAZMAR, O47, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 316 | + self.addLink( PHNXAZMAR, O47, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
317 | - self.addLink( ORLDFLMAR, O45, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 317 | + self.addLink( ORLDFLMAR, O45, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
318 | - self.addLink( ORLDFLMAR, O45, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 318 | + self.addLink( ORLDFLMAR, O45, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
319 | - self.addLink( ORLDFLMAR, O45, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 319 | + self.addLink( ORLDFLMAR, O45, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
320 | - self.addLink( ORLDFLMAR, O45, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 320 | + self.addLink( ORLDFLMAR, O45, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
321 | - self.addLink( ORLDFLMAR, O45, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 321 | + self.addLink( ORLDFLMAR, O45, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
322 | - self.addLink( NWRKNJ02R, O40, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 322 | + self.addLink( NWRKNJ02R, O40, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
323 | - self.addLink( NWRKNJ02R, O40, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 323 | + self.addLink( NWRKNJ02R, O40, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
324 | - self.addLink( NWRKNJ02R, O40, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 324 | + self.addLink( NWRKNJ02R, O40, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
325 | - self.addLink( NWRKNJ02R, O40, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 325 | + self.addLink( NWRKNJ02R, O40, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
326 | - self.addLink( NWRKNJ02R, O40, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 326 | + self.addLink( NWRKNJ02R, O40, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
327 | - self.addLink( MPLSMNDTR, O36, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 327 | + self.addLink( MPLSMNDTR, O36, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
328 | - self.addLink( MPLSMNDTR, O36, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 328 | + self.addLink( MPLSMNDTR, O36, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
329 | - self.addLink( MPLSMNDTR, O36, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 329 | + self.addLink( MPLSMNDTR, O36, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
330 | - self.addLink( MPLSMNDTR, O36, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 330 | + self.addLink( MPLSMNDTR, O36, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
331 | - self.addLink( MPLSMNDTR, O36, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 331 | + self.addLink( MPLSMNDTR, O36, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
332 | - self.addLink( LSANCA03R, O29, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 332 | + self.addLink( LSANCA03R, O29, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
333 | - self.addLink( LSANCA03R, O29, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 333 | + self.addLink( LSANCA03R, O29, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
334 | - self.addLink( LSANCA03R, O29, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 334 | + self.addLink( LSANCA03R, O29, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
335 | - self.addLink( LSANCA03R, O29, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 335 | + self.addLink( LSANCA03R, O29, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
336 | - self.addLink( LSANCA03R, O29, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 336 | + self.addLink( LSANCA03R, O29, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
337 | - self.addLink( DLLSTXTLR, O18, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 337 | + self.addLink( DLLSTXTLR, O18, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
338 | - self.addLink( DLLSTXTLR, O18, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 338 | + self.addLink( DLLSTXTLR, O18, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
339 | - self.addLink( DLLSTXTLR, O18, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 339 | + self.addLink( DLLSTXTLR, O18, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
340 | - self.addLink( DLLSTXTLR, O18, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 340 | + self.addLink( DLLSTXTLR, O18, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
341 | - self.addLink( DLLSTXTLR, O18, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 341 | + self.addLink( DLLSTXTLR, O18, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
342 | - self.addLink( ATLNGATLR, O4, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 342 | + self.addLink( ATLNGATLR, O4, port1=2, port2=10, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
343 | - self.addLink( ATLNGATLR, O4, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 343 | + self.addLink( ATLNGATLR, O4, port1=3, port2=11, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
344 | - self.addLink( ATLNGATLR, O4, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 344 | + self.addLink( ATLNGATLR, O4, port1=4, port2=12, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
345 | - self.addLink( ATLNGATLR, O4, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 345 | + self.addLink( ATLNGATLR, O4, port1=5, port2=13, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
346 | - self.addLink( ATLNGATLR, O4, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=OpticalLink ) | 346 | + self.addLink( ATLNGATLR, O4, port1=6, port2=14, speed1=10000, annotations={ "bandwidth": 100000, "optical.type": "cross-connect", "durable": "true" }, cls=LINCLink ) |
347 | 347 | ||
348 | 348 | ||
349 | # Attach hosts to the packet layer switches | 349 | # Attach hosts to the packet layer switches |
... | @@ -379,7 +379,7 @@ if __name__ == '__main__': | ... | @@ -379,7 +379,7 @@ if __name__ == '__main__': |
379 | if len( sys.argv ) >= 2: | 379 | if len( sys.argv ) >= 2: |
380 | controllers = sys.argv[1:] | 380 | controllers = sys.argv[1:] |
381 | else: | 381 | else: |
382 | - print 'Usage: ./opticalUtils.py (<Controller IP>)+' | 382 | + print 'Usage: sudo -E python opticalTestBig.py (<Controller IP>)+' |
383 | print 'Using localhost...\n' | 383 | print 'Using localhost...\n' |
384 | controllers = [ '127.0.0.1' ] | 384 | controllers = [ '127.0.0.1' ] |
385 | 385 | ... | ... |
... | @@ -4,7 +4,7 @@ | ... | @@ -4,7 +4,7 @@ |
4 | Notes: | 4 | Notes: |
5 | 5 | ||
6 | This file contains classes and methods useful for integrating LincOE with Mininet, | 6 | This file contains classes and methods useful for integrating LincOE with Mininet, |
7 | -such as startOE, stopOE, OpticalLink, and OpticalSwitch | 7 | +such as startOE, stopOE, LINCLink, and OpticalSwitch |
8 | 8 | ||
9 | - $ONOS_ROOT ust be set | 9 | - $ONOS_ROOT ust be set |
10 | - Need to run with sudo -E to preserve ONOS_ROOT env var | 10 | - Need to run with sudo -E to preserve ONOS_ROOT env var |
... | @@ -22,10 +22,10 @@ such as startOE, stopOE, OpticalLink, and OpticalSwitch | ... | @@ -22,10 +22,10 @@ such as startOE, stopOE, OpticalLink, and OpticalSwitch |
22 | 22 | ||
23 | Usage: | 23 | Usage: |
24 | ------------ | 24 | ------------ |
25 | - - import OpticalLink and OpticalSwitch from this module | 25 | + - import LINCLink and OpticalSwitch from this module |
26 | - import startOE and stopOE from this module | 26 | - import startOE and stopOE from this module |
27 | - create topology as you would a normal topology. when | 27 | - create topology as you would a normal topology. when |
28 | - to an optical switch with topo.addLink, always specify cls=OpticalLink | 28 | + to an optical switch with topo.addLink, always specify cls=LINCLink |
29 | - when creating an optical switch, use cls=OpticalSwitch in topo.addSwitch | 29 | - when creating an optical switch, use cls=OpticalSwitch in topo.addSwitch |
30 | - for annotations on links and switches, a dictionary must be passed in as | 30 | - for annotations on links and switches, a dictionary must be passed in as |
31 | the annotations argument | 31 | the annotations argument |
... | @@ -51,7 +51,7 @@ switches have been started, the new Mininet start() method should also push the | ... | @@ -51,7 +51,7 @@ switches have been started, the new Mininet start() method should also push the |
51 | Topology configuration file to ONOS. | 51 | Topology configuration file to ONOS. |
52 | 52 | ||
53 | ''' | 53 | ''' |
54 | - | 54 | +import sys |
55 | import re | 55 | import re |
56 | import json | 56 | import json |
57 | import os | 57 | import os |
... | @@ -65,25 +65,123 @@ from mininet.log import setLogLevel, info, error, warn | ... | @@ -65,25 +65,123 @@ from mininet.log import setLogLevel, info, error, warn |
65 | from mininet.link import Link, Intf | 65 | from mininet.link import Link, Intf |
66 | from mininet.cli import CLI | 66 | from mininet.cli import CLI |
67 | 67 | ||
68 | -class OpticalSwitch( Switch ): | 68 | +class OpticalSwitch(Switch): |
69 | + """ | ||
70 | + For now, same as Switch class. | ||
71 | + """ | ||
72 | + pass | ||
73 | + | ||
74 | +class OpticalIntf(Intf): | ||
75 | + """ | ||
76 | + For now,same as Intf class. | ||
77 | + """ | ||
78 | + pass | ||
79 | + | ||
80 | +class OpticalLink(Link): | ||
81 | + """ | ||
82 | + For now, same as Link. | ||
83 | + """ | ||
84 | + pass | ||
69 | 85 | ||
70 | - def __init__( self, name, dpid=None, allowed=True, | 86 | +class LINCSwitch(OpticalSwitch): |
71 | - switchType='ROADM', annotations={}, **params ): | 87 | + """ |
88 | + LINCSwitch class | ||
89 | + """ | ||
90 | + # FIXME:Sometimes LINC doesn't remove pipes and on restart increase the pipe | ||
91 | + # number from erlang.pipe.1.* to erlang.pipe.2.*, so should read and write | ||
92 | + # from latest pipe files. For now we are removing all the pipes before | ||
93 | + # starting LINC. | ||
94 | + ### User Name ### | ||
95 | + user = os.getlogin() | ||
96 | + ### pipes ### | ||
97 | + readPipe = "/tmp/home/{}/linc-oe/rel/linc/erlang.pipe.1.r".format(user) | ||
98 | + writePipe = "/tmp/home/{}/linc-oe/rel/linc/erlang.pipe.1.w".format(user) | ||
99 | + ### sys.config path ### | ||
100 | + sysConfig = "/home/{}/linc-oe/rel/linc/releases/1.0/sys.config".format(user) | ||
101 | + ### method, mapping dpid to LINC switchId ### | ||
102 | + @staticmethod | ||
103 | + def dpids_to_ids(sysConfig): | ||
104 | + ''' | ||
105 | + return the dict containing switch dpids as key and LINC switch id as values | ||
106 | + ''' | ||
107 | + dpids_to_ids = {} | ||
108 | + fd = None | ||
109 | + try: | ||
110 | + with open(sysConfig, 'r', 0) as fd: | ||
111 | + switch_id = 1 | ||
112 | + for line in fd: | ||
113 | + dpid = re.search(r'([0-9A-Fa-f]{2}[:-]){7}([0-9A-Fa-f]{2})+', line, re.I) | ||
114 | + if dpid: | ||
115 | + dpids_to_ids[dpid.group().replace(':', '')] = switch_id | ||
116 | + switch_id += 1 | ||
117 | + return dpids_to_ids | ||
118 | + except: | ||
119 | + print "Error working with {}\nError: {}\n".format(sysConfig, sys.exc_info()) | ||
120 | + fd.close() | ||
121 | + return None | ||
122 | + ### dict of containing dpids as key and corresponding LINC switchId as values ### | ||
123 | + dpidsToLINCSwitchId = dpids_to_ids.__func__(sysConfig) | ||
124 | + @staticmethod | ||
125 | + def findDir(directory, userName): | ||
126 | + "finds and returns the path of any directory in the user's home directory" | ||
127 | + homeDir = '/home/' + userName | ||
128 | + Dir = quietRun('find %s -maxdepth 1 -name %s -type d' % (homeDir, directory)).strip('\n') | ||
129 | + DirList = Dir.split('\n') | ||
130 | + if not Dir: | ||
131 | + return None | ||
132 | + elif len(DirList) > 1 : | ||
133 | + warn('***WARNING: Found multiple instances of %s; using %s\n' | ||
134 | + % (directory, DirList[ 0 ])) | ||
135 | + return DirList[ 0 ] | ||
136 | + else: | ||
137 | + return Dir | ||
138 | + ### ONOS Directory ### | ||
139 | + try: | ||
140 | + onosDir = os.environ[ 'ONOS_ROOT' ] | ||
141 | + except: | ||
142 | + onosDir = findDir('onos', user) | ||
143 | + if not onosDir: | ||
144 | + error('Please set ONOS_ROOT environment variable!\n') | ||
145 | + else: | ||
146 | + os.environ[ 'ONOS_ROOT' ] = onosDir | ||
147 | + ### LINC-directory | ||
148 | + lincDir = findDir.__func__('linc-oe', user) | ||
149 | + if not lincDir: | ||
150 | + error("***ERROR: Could not find linc-oe in user's home directory\n") | ||
151 | + ### LINC config generator directory### | ||
152 | + configGen = findDir.__func__('LINC-config-generator', user) | ||
153 | + if not configGen: | ||
154 | + error("***ERROR: Could not find LINC-config-generator in user's home directory\n") | ||
155 | + # list of all the controllers | ||
156 | + controllers = None | ||
157 | + def __init__(self, name, dpid=None, allowed=True, | ||
158 | + switchType='ROADM', topo=None, annotations={}, controller=None, **params): | ||
72 | params[ 'inNamespace' ] = False | 159 | params[ 'inNamespace' ] = False |
73 | - Switch.__init__( self, name, dpid=dpid, **params ) | 160 | + Switch.__init__(self, name, dpid=dpid, **params) |
74 | self.name = name | 161 | self.name = name |
75 | self.annotations = annotations | 162 | self.annotations = annotations |
76 | self.allowed = allowed | 163 | self.allowed = allowed |
77 | self.switchType = switchType | 164 | self.switchType = switchType |
78 | self.configDict = {} # dictionary that holds all of the JSON configuration data | 165 | self.configDict = {} # dictionary that holds all of the JSON configuration data |
166 | + self.crossConnects = [] | ||
167 | + self.deletedCrossConnects = [] | ||
168 | + self.controller = controller | ||
169 | + self.lincId = self._get_linc_id() # use to communicate with LINC | ||
170 | + self.lincStarted = False | ||
79 | 171 | ||
80 | - def start( self, *opts, **params ): | 172 | + def start(self, *opts, **params): |
81 | '''Instead of starting a virtual switch, we build the JSON | 173 | '''Instead of starting a virtual switch, we build the JSON |
82 | dictionary for the emulated optical switch''' | 174 | dictionary for the emulated optical switch''' |
175 | + # TODO:Once LINC has the ability to spawn network element dynamically | ||
176 | + # we need to use this method to spawn new logical LINC switch rather then | ||
177 | + # bulding JSON. | ||
178 | + # if LINC is started then we can start and stop logical switches else create JSON | ||
179 | + if self.lincStarted: | ||
180 | + return self.start_oe() | ||
83 | self.configDict[ 'uri' ] = 'of:' + self.dpid | 181 | self.configDict[ 'uri' ] = 'of:' + self.dpid |
84 | self.configDict[ 'annotations' ] = self.annotations | 182 | self.configDict[ 'annotations' ] = self.annotations |
85 | - self.configDict[ 'annotations' ].setdefault( 'name', self.name ) | 183 | + self.configDict[ 'annotations' ].setdefault('name', self.name) |
86 | - self.configDict[ 'hw' ] = 'OE' | 184 | + self.configDict[ 'hw' ] = 'LINC-OE' |
87 | self.configDict[ 'mfr' ] = 'Linc' | 185 | self.configDict[ 'mfr' ] = 'Linc' |
88 | self.configDict[ 'mac' ] = 'ffffffffffff' + self.dpid[-2] + self.dpid[-1] | 186 | self.configDict[ 'mac' ] = 'ffffffffffff' + self.dpid[-2] + self.dpid[-1] |
89 | self.configDict[ 'type' ] = self.switchType | 187 | self.configDict[ 'type' ] = self.switchType |
... | @@ -92,95 +190,137 @@ class OpticalSwitch( Switch ): | ... | @@ -92,95 +190,137 @@ class OpticalSwitch( Switch ): |
92 | if intf.name == 'lo': | 190 | if intf.name == 'lo': |
93 | continue | 191 | continue |
94 | else: | 192 | else: |
95 | - self.configDict[ 'ports' ].append( intf.json() ) | 193 | + self.configDict[ 'ports' ].append(intf.json()) |
96 | - | 194 | + self.lincStarted = True |
97 | - | 195 | + |
98 | - def json( self ): | 196 | + def stop(self, deleteIntfs=False): |
99 | - "return json configuration dictionary for switch" | 197 | + ''' |
100 | - return self.configDict | 198 | + stop the existing switch |
101 | - | 199 | + ''' |
102 | - def terminate( self ): | 200 | + # TODO:Add support for deleteIntf |
201 | + self.stop_oe() | ||
202 | + | ||
203 | + def dpctl( self, *args ): | ||
204 | + "Run dpctl command: ignore for now" | ||
103 | pass | 205 | pass |
104 | 206 | ||
105 | -class OpticalLink( Link ): | 207 | + def write_to_cli(self, command): |
106 | - | 208 | + ''' |
107 | - def __init__( self, node1, node2, port1=None, port2=None, allowed=True, | 209 | + send command to LINC |
108 | - intfName1=None, intfName2=None, linkType='OPTICAL', | 210 | + ''' |
109 | - annotations={}, speed1=0, speed2=0, **params ): | 211 | + fd = None |
110 | - "Creates a dummy link without a virtual ethernet pair." | 212 | + try: |
111 | - self.allowed = allowed | 213 | + fd = open(self.writePipe, 'w', 0) |
112 | - self.annotations = annotations | 214 | + fd.write(command) |
113 | - self.linkType = linkType | 215 | + fd.close() |
114 | - params1 = { 'speed': speed1 } | 216 | + except: |
115 | - params2 = { 'speed': speed2 } | 217 | + print "Error working with {}\nError: {}\n".format(self.writePipe, sys.exc_info()) |
116 | - | 218 | + if fd: |
117 | - if isinstance( node1, OpticalSwitch ): | 219 | + fd.close() |
118 | - cls1 = OpticalIntf | 220 | + |
221 | + def read_from_cli(self): | ||
222 | + ''' | ||
223 | + read the output from the LINC CLI | ||
224 | + ''' | ||
225 | + response = None | ||
226 | + fd = None | ||
227 | + try: | ||
228 | + fd = open(self.readPipe, 'r', 0) | ||
229 | + fcntl.fcntl(fd, fcntl.F_SETFL, os.O_NONBLOCK) # for non-blocking read | ||
230 | + # FIXME:Due to non-blocking read most for the time we read nothing | ||
231 | + response = fd.read() | ||
232 | + fd.close() | ||
233 | + except : | ||
234 | + # print "Error working with {}\nError: {}\n".format(self.readPipe, sys.exc_info()) | ||
235 | + if fd: | ||
236 | + fd.close() | ||
237 | + return response | ||
238 | + | ||
239 | + def _get_linc_id(self): | ||
240 | + ''' | ||
241 | + return the corresponding LINC switchId. | ||
242 | + ''' | ||
243 | + return LINCSwitch.dpidsToLINCSwitchId.get(self.dpid) | ||
244 | + #-------------------------------------------------------------------------- | ||
245 | + # LINC CLI commands | ||
246 | + #-------------------------------------------------------------------------- | ||
247 | + def start_oe(self): | ||
248 | + ''' | ||
249 | + start the existing LINC switch | ||
250 | + ''' | ||
251 | + #starting Switch | ||
252 | + cmd = "linc:start_switch({}).\r\n".format(self.lincId) | ||
253 | + self.write_to_cli(cmd) | ||
254 | + #hanlding taps interfaces related to the switch | ||
255 | + crossConnectJSON = {} | ||
256 | + linkConfig = [] | ||
257 | + for i in range(0,len(self.deletedCrossConnects)): | ||
258 | + crossConnect = self.deletedCrossConnects.pop() | ||
259 | + tap = None | ||
260 | + if isinstance(crossConnect.intf1.node, LINCSwitch): | ||
261 | + intf = crossConnect.intf2 | ||
262 | + tapPort = crossConnect.intf1.port | ||
119 | else: | 263 | else: |
120 | - cls1 = Intf | 264 | + intf = crossConnect.intf1 |
121 | - # bad hack to stop error message from appearing when we try to set up intf in a packet switch, | 265 | + tapPort = crossConnect.intf2.port |
122 | - # and there is no interface there( because we do not run makeIntfPair ). This way, we just set lo up | 266 | + tap = LINCSwitch.findTap(self, tapPort) |
123 | - intfName1 = 'lo' | 267 | + if tap: |
124 | - if isinstance( node2, OpticalSwitch ): | 268 | + LINCSwitch.setupInts([tap]) |
125 | - cls2 = OpticalIntf | 269 | + intf.node.attach(tap) |
270 | + self.crossConnects.append(crossConnect) | ||
271 | + linkConfig.append(crossConnect.json()) | ||
272 | + #Sending crossConnect info to the ONOS. | ||
273 | + crossConnectJSON['links'] = linkConfig | ||
274 | + with open("crossConnect.json", 'w') as fd: | ||
275 | + json.dump(crossConnectJSON, fd, indent=4, separators=(',', ': ')) | ||
276 | + info('*** Pushing crossConnect.json to ONOS\n') | ||
277 | + output = quietRun('%s/tools/test/bin/onos-topo-cfg %s\ | ||
278 | + Topology.json' % (self.onosDir, self.controllers[ 0 ].ip), shell=True) | ||
279 | + | ||
280 | + def stop_oe(self): | ||
281 | + ''' | ||
282 | + stop the existing LINC switch | ||
283 | + ''' | ||
284 | + cmd = "linc:stop_switch({}).\r\n".format(self.lincId) | ||
285 | + self.write_to_cli(cmd) | ||
286 | + #handling taps if any | ||
287 | + for i in range(0, len(self.crossConnects)): | ||
288 | + crossConnect = self.crossConnects.pop() | ||
289 | + if isinstance(crossConnect.intf1.node, LINCSwitch): | ||
290 | + intf = crossConnect.intf2 | ||
291 | + tapPort = crossConnect.intf1.port | ||
126 | else: | 292 | else: |
127 | - cls2 = Intf | 293 | + intf = crossConnect.intf1 |
128 | - intfName2 = 'lo' | 294 | + tapPort = crossConnect.intf2.port |
129 | - Link.__init__( self, node1, node2, port1=port1, port2=port2, | 295 | + intf.node.detach(LINCSwitch.findTap(self, tapPort)) |
130 | - intfName1=intfName1, intfName2=intfName2, cls1=cls1, | 296 | + self.deletedCrossConnects.append(crossConnect) |
131 | - cls2=cls2, params1=params1, params2=params2 ) | 297 | + |
132 | - | 298 | + def w_port_up(self, port): |
133 | - | 299 | + ''' |
134 | - @classmethod | 300 | + port_up |
135 | - def makeIntfPair( _cls, intfName1, intfName2, *args, **kwargs ): | 301 | + ''' |
136 | - pass | 302 | + cmd = "linc:port_up({},{}).\r\n".format(self.lincId, port) |
137 | - | 303 | + self.write_to_cli(cmd) |
138 | - def json( self ): | 304 | + |
139 | - "build and return the json configuration dictionary for this link" | 305 | + def w_port_down(self, port): |
140 | - configData = {} | 306 | + ''' |
141 | - configData[ 'src' ] = ( 'of:' + self.intf1.node.dpid + | 307 | + port_down |
142 | - '/%s' % self.intf1.node.ports[ self.intf1 ] ) | 308 | + ''' |
143 | - configData[ 'dst' ] = ( 'of:' + self.intf2.node.dpid + | 309 | + cmd = "linc:port_down({},{}).\r\n".format(self.lincId, port) |
144 | - '/%s' % self.intf2.node.ports[ self.intf2 ] ) | 310 | + self.write_to_cli(cmd) |
145 | - configData[ 'type' ] = self.linkType | 311 | + |
146 | - configData[ 'annotations' ] = self.annotations | 312 | + # helper functions |
147 | - return configData | 313 | + @staticmethod |
148 | - | 314 | + def switchJSON(switch): |
149 | -class OpticalIntf( Intf ): | ||
150 | - | ||
151 | - def __init__( self, name=None, node=None, speed=0, | ||
152 | - port=None, link=None, **params ): | ||
153 | - self.node = node | ||
154 | - self.speed = speed | ||
155 | - self.port = port | ||
156 | - self.link = link | ||
157 | - self.name = name | ||
158 | - node.addIntf( self, port=port ) | ||
159 | - self.params = params | ||
160 | - self.ip = None | ||
161 | - | ||
162 | - def json( self ): | ||
163 | - "build and return the JSON information for this interface( not used right now )" | ||
164 | - configDict = {} | ||
165 | - configDict[ 'port' ] = self.port | ||
166 | - configDict[ 'speed' ] = self.speed | ||
167 | - configDict[ 'type' ] = 'FIBER' | ||
168 | - return configDict | ||
169 | - | ||
170 | - def config( self, *args, **kwargs ): | ||
171 | - "dont configure a dummy interface" | ||
172 | - pass | ||
173 | - | ||
174 | -def switchJSON( switch ): | ||
175 | "Returns the json configuration for a packet switch" | 315 | "Returns the json configuration for a packet switch" |
176 | configDict = {} | 316 | configDict = {} |
177 | configDict[ 'uri' ] = 'of:' + switch.dpid | 317 | configDict[ 'uri' ] = 'of:' + switch.dpid |
178 | - configDict[ 'mac' ] = quietRun( 'cat /sys/class/net/%s/address' % switch.name ).strip( '\n' ).translate( None, ':' ) | 318 | + configDict[ 'mac' ] = quietRun('cat /sys/class/net/%s/address' % switch.name).strip('\n').translate(None, ':') |
179 | configDict[ 'hw' ] = 'PK' # FIXME what about OVS? | 319 | configDict[ 'hw' ] = 'PK' # FIXME what about OVS? |
180 | configDict[ 'mfr' ] = 'Linc' # FIXME what about OVS? | 320 | configDict[ 'mfr' ] = 'Linc' # FIXME what about OVS? |
181 | configDict[ 'type' ] = 'SWITCH' # FIXME what about OVS? | 321 | configDict[ 'type' ] = 'SWITCH' # FIXME what about OVS? |
182 | - annotations = switch.params.get( 'annotations', {} ) | 322 | + annotations = switch.params.get('annotations', {}) |
183 | - annotations.setdefault( 'name', switch.name ) | 323 | + annotations.setdefault('name', switch.name) |
184 | configDict[ 'annotations' ] = annotations | 324 | configDict[ 'annotations' ] = annotations |
185 | ports = [] | 325 | ports = [] |
186 | for port, intf in switch.intfs.items(): | 326 | for port, intf in switch.intfs.items(): |
... | @@ -188,153 +328,152 @@ def switchJSON( switch ): | ... | @@ -188,153 +328,152 @@ def switchJSON( switch ): |
188 | continue | 328 | continue |
189 | portDict = {} | 329 | portDict = {} |
190 | portDict[ 'port' ] = port | 330 | portDict[ 'port' ] = port |
191 | - portDict[ 'type' ] = 'FIBER' if isinstance( intf.link, OpticalLink ) else 'COPPER' | 331 | + portDict[ 'type' ] = 'FIBER' if isinstance(intf.link, LINCLink) else 'COPPER' |
192 | intfList = [ intf.link.intf1, intf.link.intf2 ] | 332 | intfList = [ intf.link.intf1, intf.link.intf2 ] |
193 | - intfList.remove( intf ) | 333 | + intfList.remove(intf) |
194 | - portDict[ 'speed' ] = intfList[ 0 ].speed if isinstance( intf.link, OpticalLink ) else 0 | 334 | + portDict[ 'speed' ] = intfList[ 0 ].speed if isinstance(intf.link, LINCLink) else 0 |
195 | - ports.append( portDict ) | 335 | + ports.append(portDict) |
196 | configDict[ 'ports' ] = ports | 336 | configDict[ 'ports' ] = ports |
197 | return configDict | 337 | return configDict |
198 | 338 | ||
199 | - | 339 | + @staticmethod |
200 | -def startOE( net ): | 340 | + def bootOE(net): |
201 | "Start the LINC optical emulator within a mininet instance" | 341 | "Start the LINC optical emulator within a mininet instance" |
202 | opticalJSON = {} | 342 | opticalJSON = {} |
203 | linkConfig = [] | 343 | linkConfig = [] |
204 | devices = [] | 344 | devices = [] |
345 | + #setting up the controllers for LINCSwitch class | ||
346 | + LINCSwitch.controllers = net.controllers | ||
205 | 347 | ||
206 | for switch in net.switches: | 348 | for switch in net.switches: |
207 | - if isinstance( switch, OpticalSwitch ): | 349 | + if isinstance(switch, OpticalSwitch): |
208 | - devices.append( switch.json() ) | 350 | + devices.append(switch.json()) |
209 | else: | 351 | else: |
210 | - devices.append( switchJSON( switch ) ) | 352 | + devices.append(LINCSwitch.switchJSON(switch)) |
211 | opticalJSON[ 'devices' ] = devices | 353 | opticalJSON[ 'devices' ] = devices |
212 | 354 | ||
213 | for link in net.links: | 355 | for link in net.links: |
214 | - if isinstance( link, OpticalLink ) : | 356 | + if isinstance(link, LINCLink) : |
215 | - linkConfig.append( link.json() ) | 357 | + linkConfig.append(link.json()) |
216 | - | ||
217 | opticalJSON[ 'links' ] = linkConfig | 358 | opticalJSON[ 'links' ] = linkConfig |
218 | 359 | ||
219 | - try: | 360 | + info('*** Writing Topology.json file\n') |
220 | - onosDir = os.environ[ 'ONOS_ROOT' ] | 361 | + with open('Topology.json', 'w') as outfile: |
221 | - except: | 362 | + json.dump(opticalJSON, outfile, indent=4, separators=(',', ': ')) |
222 | - onosDir = findDir( 'onos' ) | ||
223 | - if not onosDir: | ||
224 | - error( 'Please set ONOS_ROOT environment variable!\n' ) | ||
225 | - return False | ||
226 | - else: | ||
227 | - os.environ[ 'ONOS_ROOT' ] = onosDir | ||
228 | - | ||
229 | - info( '*** Writing Topology.json file\n' ) | ||
230 | - with open( 'Topology.json', 'w' ) as outfile: | ||
231 | - json.dump( opticalJSON, outfile, indent=4, separators=(',', ': ') ) | ||
232 | 363 | ||
233 | - info( '*** Converting Topology.json to linc-oe format (TopoConfig.json) file\n' ) | 364 | + info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file\n') |
234 | - output = quietRun( '%s/tools/test/bin/onos-oecfg ./Topology.json > TopoConfig.json' % onosDir, shell=True ) | 365 | + output = quietRun('%s/tools/test/bin/onos-oecfg ./Topology.json > TopoConfig.json' % LINCSwitch.onosDir, shell=True) |
235 | if output: | 366 | if output: |
236 | - error( '***ERROR: Error creating topology file: %s ' % output + '\n' ) | 367 | + error('***ERROR: Error creating topology file: %s ' % output + '\n') |
237 | return False | 368 | return False |
238 | 369 | ||
239 | - info( '*** Creating sys.config...\n' ) | 370 | + info('*** Creating sys.config...\n') |
240 | - configGen = findDir( 'LINC-config-generator' ) | 371 | + output = quietRun('%s/config_generator TopoConfig.json %s/sys.config.template %s %s' |
241 | - if not configGen: | 372 | + % (LINCSwitch.configGen, LINCSwitch.configGen, LINCSwitch.controllers[ 0 ].ip, LINCSwitch.controllers[ 0 ].port), shell=True) |
242 | - error( "***ERROR: Could not find LINC-config-generator in user's home directory\n" ) | ||
243 | - return False | ||
244 | - output = quietRun( '%s/config_generator TopoConfig.json %s/sys.config.template %s %s' | ||
245 | - % ( configGen, configGen, net.controllers[ 0 ].ip, net.controllers[ 0 ].port ), shell=True ) | ||
246 | if output: | 373 | if output: |
247 | - error( '***ERROR: Error creating sys.config file: %s\n' % output ) | 374 | + error('***ERROR: Error creating sys.config file: %s\n' % output) |
248 | return False | 375 | return False |
249 | 376 | ||
250 | - info ('*** Setting multiple controllers in sys.config...\n' ) | 377 | + info ('*** Setting multiple controllers in sys.config...\n') |
251 | searchStr = '\[{"Switch.*$' | 378 | searchStr = '\[{"Switch.*$' |
252 | ctrlStr = '' | 379 | ctrlStr = '' |
253 | - for index in range(len(net.controllers)): | 380 | + for index in range(len(LINCSwitch.controllers)): |
254 | ctrlStr += '{"Switch%d-Controller","%s",%d,tcp},' % (index, net.controllers[index].ip, net.controllers[index].port) | 381 | ctrlStr += '{"Switch%d-Controller","%s",%d,tcp},' % (index, net.controllers[index].ip, net.controllers[index].port) |
255 | replaceStr = '[%s]},' % ctrlStr[:-1] # Cut off last comma | 382 | replaceStr = '[%s]},' % ctrlStr[:-1] # Cut off last comma |
256 | sedCmd = 'sed -i \'s/%s/%s/\' sys.config' % (searchStr, replaceStr) | 383 | sedCmd = 'sed -i \'s/%s/%s/\' sys.config' % (searchStr, replaceStr) |
257 | - output = quietRun( sedCmd, shell=True ) | 384 | + output = quietRun(sedCmd, shell=True) |
258 | 385 | ||
259 | - info( '*** Copying sys.config to linc-oe directory: ', output + '\n' ) | 386 | + info('*** Copying sys.config to linc-oe directory: ', output + '\n') |
260 | - lincDir = findDir( 'linc-oe' ) | 387 | + output = quietRun('cp -v sys.config %s/rel/linc/releases/1.0/' % LINCSwitch.lincDir, shell=True).strip('\n') |
261 | - if not lincDir: | 388 | + info(output + '\n') |
262 | - error( "***ERROR: Could not find linc-oe in user's home directory\n" ) | 389 | + |
263 | - return False | 390 | + info('*** Adding taps and bringing them up...\n') |
264 | - output = quietRun( 'cp -v sys.config %s/rel/linc/releases/1.0/' % lincDir, shell=True ).strip( '\n' ) | 391 | + LINCSwitch.setupInts(LINCSwitch.getTaps()) |
265 | - info( output + '\n' ) | ||
266 | 392 | ||
267 | - info( '*** Starting linc OE...\n' ) | 393 | + info('*** removing pipes if any \n') |
268 | - output = quietRun( '%s/rel/linc/bin/linc start' % lincDir, shell=True ) | 394 | + quietRun('rm /tmp/home/%s/linc-oe/rel/linc/*' % LINCSwitch.user, shell=True) |
395 | + | ||
396 | + info('*** Starting linc OE...\n') | ||
397 | + output = quietRun('%s/rel/linc/bin/linc start' % LINCSwitch.lincDir, shell=True) | ||
269 | if output: | 398 | if output: |
270 | - error( '***ERROR: LINC-OE: %s' % output + '\n' ) | 399 | + error('***ERROR: LINC-OE: %s' % output + '\n') |
271 | - quietRun( '%s/rel/linc/bin/linc stop' % lincDir, shell=True ) | 400 | + quietRun('%s/rel/linc/bin/linc stop' % LINCSwitch.lincDir, shell=True) |
272 | return False | 401 | return False |
273 | 402 | ||
274 | - info( '*** Waiting for linc-oe to start...\n' ) | 403 | + info('*** Waiting for linc-oe to start...\n') |
275 | - waitStarted( net ) | 404 | + LINCSwitch.waitStarted(net) |
276 | 405 | ||
277 | - info( '*** Adding cross-connect (tap) interfaces to packet switches...\n' ) | 406 | + info('*** Adding cross-connect (tap) interfaces to packet switches...\n') |
278 | for link in net.links: | 407 | for link in net.links: |
279 | - if isinstance( link, OpticalLink ): | 408 | + if isinstance(link, LINCLink): |
280 | if link.annotations[ 'optical.type' ] == 'cross-connect': | 409 | if link.annotations[ 'optical.type' ] == 'cross-connect': |
281 | for intf in [ link.intf1, link.intf2 ]: | 410 | for intf in [ link.intf1, link.intf2 ]: |
282 | - if not isinstance( intf, OpticalIntf ): | 411 | + if not isinstance(intf, LINCIntf): |
283 | intfList = [ intf.link.intf1, intf.link.intf2 ] | 412 | intfList = [ intf.link.intf1, intf.link.intf2 ] |
284 | - intfList.remove( intf ) | 413 | + intfList.remove(intf) |
285 | intf2 = intfList[ 0 ] | 414 | intf2 = intfList[ 0 ] |
286 | - intf.node.attach( findTap( intf2.node, intf2.node.ports[ intf2 ] ) ) | 415 | + intf.node.attach(LINCSwitch.findTap(intf2.node, intf2.node.ports[ intf2 ])) |
287 | 416 | ||
288 | - info( '*** Press ENTER to push Topology.json to onos...\n' ) | 417 | + info('*** Press ENTER to push Topology.json to onos...\n') |
289 | raw_input() # FIXME... we should eventually remove this | 418 | raw_input() # FIXME... we should eventually remove this |
290 | - info( '*** Pushing Topology.json to ONOS\n' ) | 419 | + info('*** Pushing Topology.json to ONOS\n') |
291 | - output = quietRun( '%s/tools/test/bin/onos-topo-cfg %s Topology.json' % ( onosDir, net.controllers[ 0 ].ip ), shell=True ) | 420 | + output = quietRun('%s/tools/test/bin/onos-topo-cfg %s Topology.json' % (LINCSwitch.onosDir, LINCSwitch.controllers[ 0 ].ip), shell=True) |
292 | # successful output contains the two characters '{}' | 421 | # successful output contains the two characters '{}' |
293 | # if there is more output than this, there is an issue | 422 | # if there is more output than this, there is an issue |
294 | - if output.strip( '{}' ): | 423 | + if output.strip('{}'): |
295 | - warn( '***WARNING: Could not push topology file to ONOS: %s' % output ) | 424 | + warn('***WARNING: Could not push topology file to ONOS: %s' % output) |
296 | 425 | ||
297 | -def waitStarted( net, timeout=None ): | 426 | + @staticmethod |
427 | + def waitStarted(net, timeout=None): | ||
298 | "wait until all tap interfaces are available" | 428 | "wait until all tap interfaces are available" |
299 | tapCount = 0 | 429 | tapCount = 0 |
300 | time = 0 | 430 | time = 0 |
301 | for link in net.links: | 431 | for link in net.links: |
302 | - if isinstance( link, OpticalLink ): | 432 | + if isinstance(link, LINCLink): |
303 | if link.annotations[ 'optical.type' ] == 'cross-connect': | 433 | if link.annotations[ 'optical.type' ] == 'cross-connect': |
304 | tapCount += 1 | 434 | tapCount += 1 |
305 | 435 | ||
306 | while True: | 436 | while True: |
307 | - if str( tapCount ) == quietRun( 'ip addr | grep tap | wc -l', shell=True ).strip( '\n' ): | 437 | + if str(tapCount) == quietRun('ip addr | grep tap | wc -l', shell=True).strip('\n'): |
308 | return True | 438 | return True |
309 | if timeout: | 439 | if timeout: |
310 | if time >= timeout: | 440 | if time >= timeout: |
311 | - error( '***ERROR: Linc OE did not start within %s seconds' % timeout ) | 441 | + error('***ERROR: Linc OE did not start within %s seconds' % timeout) |
312 | return False | 442 | return False |
313 | time += .5 | 443 | time += .5 |
314 | - sleep( .5 ) | 444 | + sleep(.5) |
315 | 445 | ||
316 | -def stopOE(): | 446 | + @staticmethod |
447 | + def shutdownOE(): | ||
317 | "stop the optical emulator" | 448 | "stop the optical emulator" |
318 | - info( '*** Stopping linc OE...\n' ) | 449 | + info('*** Stopping linc OE...\n') |
319 | - lincDir = findDir( 'linc-oe' ) | 450 | + quietRun('%s/rel/linc/bin/linc stop' % LINCSwitch.lincDir, shell=True) |
320 | - quietRun( '%s/rel/linc/bin/linc stop' % lincDir, shell=True ) | 451 | + |
321 | - | 452 | + @staticmethod |
322 | -def findDir( directory ): | 453 | + def setupInts(intfs): |
323 | - "finds and returns the path of any directory in the user's home directory" | 454 | + ''' |
324 | - user = findUser() | 455 | + add taps and bring them up. |
325 | - homeDir = '/home/' + user | 456 | + ''' |
326 | - Dir = quietRun( 'find %s -maxdepth 1 -name %s -type d' % ( homeDir, directory ) ).strip( '\n' ) | 457 | + for i in intfs: |
327 | - DirList = Dir.split( '\n' ) | 458 | + quietRun('ip tuntap add dev %s mode tap' % i) |
328 | - if not Dir: | 459 | + quietRun('ip link set dev %s up' % i) |
329 | - return None | 460 | + info('*** Intf %s set\n' % i) |
330 | - elif len( DirList ) > 1 : | 461 | + |
331 | - warn( '***WARNING: Found multiple instances of %s; using %s\n' | 462 | + @staticmethod |
332 | - % ( directory, DirList[ 0 ] ) ) | 463 | + def getTaps(path=None): |
333 | - return DirList[ 0 ] | 464 | + ''' |
334 | - else: | 465 | + return list of all the tops in sys.config |
335 | - return Dir | 466 | + ''' |
336 | - | 467 | + if path is None: |
337 | -def findUser(): | 468 | + path = '%s/rel/linc/releases/1.0/sys.config' % LINCSwitch.lincDir |
469 | + fd = open(path, 'r', 0) | ||
470 | + sys_data = fd.read() | ||
471 | + taps = re.findall('tap\d+', sys_data) | ||
472 | + fd.close() | ||
473 | + return taps | ||
474 | + | ||
475 | + @staticmethod | ||
476 | + def findUser(): | ||
338 | "Try to return logged-in (usually non-root) user" | 477 | "Try to return logged-in (usually non-root) user" |
339 | try: | 478 | try: |
340 | # If we're running sudo | 479 | # If we're running sudo |
... | @@ -342,32 +481,29 @@ def findUser(): | ... | @@ -342,32 +481,29 @@ def findUser(): |
342 | except: | 481 | except: |
343 | try: | 482 | try: |
344 | # Logged-in user (if we have a tty) | 483 | # Logged-in user (if we have a tty) |
345 | - return quietRun( 'who am i' ).split()[ 0 ] | 484 | + return quietRun('who am i').split()[ 0 ] |
346 | except: | 485 | except: |
347 | # Give up and return effective user | 486 | # Give up and return effective user |
348 | - return quietRun( 'whoami' ) | 487 | + return quietRun('whoami') |
349 | 488 | ||
350 | 489 | ||
351 | -def findTap( node, port, path=None ): | 490 | + @staticmethod |
491 | + def findTap(node, port, path=None): | ||
352 | '''utility function to parse through a sys.config | 492 | '''utility function to parse through a sys.config |
353 | file to find tap interfaces for a switch''' | 493 | file to find tap interfaces for a switch''' |
354 | - switch=False | 494 | + switch = False |
355 | portLine = '' | 495 | portLine = '' |
356 | intfLines = [] | 496 | intfLines = [] |
357 | 497 | ||
358 | if path is None: | 498 | if path is None: |
359 | - lincDir = findDir( 'linc-oe' ) | 499 | + path = '%s/rel/linc/releases/1.0/sys.config' % LINCSwitch.lincDir |
360 | - if not lincDir: | ||
361 | - error( '***ERROR: Could not find linc-oe in users home directory\n' ) | ||
362 | - return None | ||
363 | - path = '%s/rel/linc/releases/1.0/sys.config' % lincDir | ||
364 | 500 | ||
365 | - with open( path ) as f: | 501 | + with open(path) as f: |
366 | for line in f: | 502 | for line in f: |
367 | if 'tap' in line: | 503 | if 'tap' in line: |
368 | - intfLines.append( line ) | 504 | + intfLines.append(line) |
369 | - if node.dpid in line.translate( None, ':' ): | 505 | + if node.dpid in line.translate(None, ':'): |
370 | - switch=True | 506 | + switch = True |
371 | continue | 507 | continue |
372 | if switch: | 508 | if switch: |
373 | if 'switch' in line: | 509 | if 'switch' in line: |
... | @@ -377,65 +513,129 @@ def findTap( node, port, path=None ): | ... | @@ -377,65 +513,129 @@ def findTap( node, port, path=None ): |
377 | break | 513 | break |
378 | 514 | ||
379 | if portLine: | 515 | if portLine: |
380 | - m = re.search( 'port,\d+', portLine ) | 516 | + m = re.search('port,\d+', portLine) |
381 | - port = m.group( 0 ).split( ',' )[ 1 ] | 517 | + port = m.group(0).split(',')[ 1 ] |
382 | else: | 518 | else: |
383 | - error( '***ERROR: Could not find any ports in sys.config\n' ) | 519 | + error('***ERROR: Could not find any ports in sys.config\n') |
384 | return | 520 | return |
385 | 521 | ||
386 | for intfLine in intfLines: | 522 | for intfLine in intfLines: |
387 | if 'port,%s' % port in intfLine: | 523 | if 'port,%s' % port in intfLine: |
388 | - return re.findall( 'tap\d+', intfLine )[ 0 ] | 524 | + return re.findall('tap\d+', intfLine)[ 0 ] |
389 | 525 | ||
526 | + def json(self): | ||
527 | + "return json configuration dictionary for switch" | ||
528 | + return self.configDict | ||
529 | + | ||
530 | + def terminate(self): | ||
531 | + pass | ||
390 | 532 | ||
391 | -class MininetOE( Mininet ): | 533 | +class LINCLink(Link): |
534 | + """ | ||
535 | + LINC link class | ||
536 | + """ | ||
537 | + def __init__(self, node1, node2, port1=None, port2=None, allowed=True, | ||
538 | + intfName1=None, intfName2=None, linkType='OPTICAL', | ||
539 | + annotations={}, speed1=0, speed2=0, **params): | ||
540 | + "Creates a dummy link without a virtual ethernet pair." | ||
541 | + self.allowed = allowed | ||
542 | + self.annotations = annotations | ||
543 | + self.linkType = linkType | ||
544 | + self.port1 = port1 | ||
545 | + self.port2 = port2 | ||
546 | + params1 = { 'speed': speed1 } | ||
547 | + params2 = { 'speed': speed2 } | ||
548 | + # self.isCrossConnect = True if self.annotations.get('optical.type') == 'cross-connect' else False | ||
549 | + if isinstance(node1, LINCSwitch) and isinstance(node2, LINCSwitch): | ||
550 | + self.isCrossConnect = False | ||
551 | + else: | ||
552 | + self.isCrossConnect = True | ||
553 | + if isinstance(node1, LINCSwitch): | ||
554 | + cls1 = LINCIntf | ||
555 | + if self.isCrossConnect: | ||
556 | + node1.crossConnects.append(self) | ||
557 | + else: | ||
558 | + cls1 = Intf | ||
559 | + # bad hack to stop error message from appearing when we try to set up intf in a packet switch, | ||
560 | + # and there is no interface there( because we do not run makeIntfPair ). This way, we just set lo up | ||
561 | + intfName1 = 'lo' | ||
562 | + if isinstance(node2, LINCSwitch): | ||
563 | + cls2 = LINCIntf | ||
564 | + if self.isCrossConnect: | ||
565 | + node2.crossConnects.append(self) | ||
566 | + else: | ||
567 | + cls2 = Intf | ||
568 | + intfName2 = 'lo' | ||
569 | + Link.__init__(self, node1, node2, port1=port1, port2=port2, | ||
570 | + intfName1=intfName1, intfName2=intfName2, cls1=cls1, | ||
571 | + cls2=cls2, params1=params1, params2=params2) | ||
572 | + | ||
573 | + @classmethod | ||
574 | + def makeIntfPair(_cls, intfName1, intfName2, *args, **kwargs): | ||
575 | + pass | ||
576 | + | ||
577 | + def json(self): | ||
578 | + "build and return the json configuration dictionary for this link" | ||
579 | + configData = {} | ||
580 | + configData[ 'src' ] = ('of:' + self.intf1.node.dpid + | ||
581 | + '/%s' % self.intf1.node.ports[ self.intf1 ]) | ||
582 | + configData[ 'dst' ] = ('of:' + self.intf2.node.dpid + | ||
583 | + '/%s' % self.intf2.node.ports[ self.intf2 ]) | ||
584 | + configData[ 'type' ] = self.linkType | ||
585 | + configData[ 'annotations' ] = self.annotations | ||
586 | + return configData | ||
587 | + | ||
588 | +class LINCIntf(OpticalIntf): | ||
589 | + """ | ||
590 | + LINC interface class | ||
591 | + """ | ||
592 | + def __init__(self, name=None, node=None, speed=0, | ||
593 | + port=None, link=None, **params): | ||
594 | + self.node = node | ||
595 | + self.speed = speed | ||
596 | + self.port = port | ||
597 | + self.link = link | ||
598 | + self.name = name | ||
599 | + node.addIntf(self, port=port) | ||
600 | + self.params = params | ||
601 | + self.ip = None | ||
602 | + | ||
603 | + def json(self): | ||
604 | + "build and return the JSON information for this interface( not used right now )" | ||
605 | + configDict = {} | ||
606 | + configDict[ 'port' ] = self.port | ||
607 | + configDict[ 'speed' ] = self.speed | ||
608 | + configDict[ 'type' ] = 'FIBER' | ||
609 | + return configDict | ||
610 | + | ||
611 | + def config(self, *args, **kwargs): | ||
612 | + "dont configure a dummy interface" | ||
613 | + pass | ||
614 | + | ||
615 | + def ifconfig(self, status): | ||
616 | + "configure the status" | ||
617 | + if status == "up": | ||
618 | + return self.node.w_port_up(self.port) | ||
619 | + elif status == "down": | ||
620 | + return self.node.w_port_down(self.port) | ||
621 | + | ||
622 | + | ||
623 | +class MininetOE(Mininet): | ||
392 | "Mininet with Linc-OE support (starts and stops linc-oe)" | 624 | "Mininet with Linc-OE support (starts and stops linc-oe)" |
393 | 625 | ||
394 | - def start( self ): | 626 | + def start(self): |
395 | - Mininet.start( self ) | 627 | + Mininet.start(self) |
396 | - startOE( self ) | 628 | + LINCSwitch.bootOE(self) |
397 | 629 | ||
398 | - def stop( self ): | 630 | + def stop(self): |
399 | - Mininet.stop( self ) | 631 | + Mininet.stop(self) |
400 | - stopOE() | 632 | + LINCSwitch.shutdownOE() |
401 | 633 | ||
402 | - def addControllers( self, controllers ): | 634 | + def addControllers(self, controllers): |
403 | i = 0 | 635 | i = 0 |
404 | for ctrl in controllers: | 636 | for ctrl in controllers: |
405 | - self.addController( RemoteController( 'c%d' % i, ip=ctrl ) ) | 637 | + self.addController(RemoteController('c%d' % i, ip=ctrl)) |
406 | - | 638 | + i += 1 |
407 | - | ||
408 | -class OpticalTestTopo( Topo ): | ||
409 | - | ||
410 | - def build( self ): | ||
411 | - opticalAnn = { 'optical.waves': 80, 'optical.type': "WDM", 'durable': True } | ||
412 | - switchAnn = { 'bandwidth': 100000, 'optical.type': 'cross-connect', 'durable': True } | ||
413 | - h1 = self.addHost( 'h1' ) | ||
414 | - h2 = self.addHost( 'h2' ) | ||
415 | - s1 = self.addSwitch( 's1' ) | ||
416 | - s2 = self.addSwitch( 's2' ) | ||
417 | - O4 = self.addSwitch( 'O4', cls=OpticalSwitch ) | ||
418 | - O5 = self.addSwitch( 'O5', cls=OpticalSwitch ) | ||
419 | - O6 = self.addSwitch( 'O6', cls=OpticalSwitch ) | ||
420 | - self.addLink( O4, O5, cls=OpticalLink, annotations=opticalAnn ) | ||
421 | - self.addLink( O5, O6, cls=OpticalLink, annotations=opticalAnn ) | ||
422 | - self.addLink( s1, O4, cls=OpticalLink, annotations=switchAnn ) | ||
423 | - self.addLink( s2, O6, cls=OpticalLink, annotations=switchAnn ) | ||
424 | - self.addLink( h1, s1 ) | ||
425 | - self.addLink( h2, s2 ) | ||
426 | 639 | ||
427 | if __name__ == '__main__': | 640 | if __name__ == '__main__': |
428 | - import sys | 641 | + pass |
429 | - if len( sys.argv ) >= 2: | ||
430 | - controllers = sys.argv[1:] | ||
431 | - else: | ||
432 | - print 'Usage: ./opticalUtils.py (<Controller IP>)+' | ||
433 | - print 'Using localhost...\n' | ||
434 | - controllers = [ '127.0.0.1' ] | ||
435 | - | ||
436 | - setLogLevel( 'info' ) | ||
437 | - net = MininetOE( topo=OpticalTestTopo(), controller=None, autoSetMacs=True ) | ||
438 | - net.addControllers( controllers ) | ||
439 | - net.start() | ||
440 | - CLI( net ) | ||
441 | - net.stop() | ... | ... |
-
Please register or login to post a comment