fahad
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
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()
......