Merge "added optical-2.py added oe-nonlinear-topo10"
diff --git a/tools/test/bin/old.json b/tools/test/bin/old.json
new file mode 100644
index 0000000..713efbf
--- /dev/null
+++ b/tools/test/bin/old.json
@@ -0,0 +1,387 @@
+{
+    "linkConfig": [
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:01",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:02",
+            "params": {
+                "nodeName1": "SFO-W10",
+                "nodeName2": "SJC-W10",
+                "numWaves": 80,
+                "port1": 50,
+                "port2": 30
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:03",
+            "params": {
+                "nodeName1": "SJC-W10",
+                "nodeName2": "LAX-W10",
+                "numWaves": 80,
+                "port1": 50,
+                "port2": 30
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:03",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
+            "params": {
+                "nodeName1": "LAX-W10",
+                "nodeName2": "SDG-W10",
+                "numWaves": 80,
+                "port1": 50,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:01",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:05",
+            "params": {
+                "nodeName1": "SFO-W10",
+                "nodeName2": "MSP-M10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:05",
+            "params": {
+                "nodeName1": "SJC-W10",
+                "nodeName2": "MSP-M10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 20
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:03",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "nodeName1": "LAX-W10",
+                "nodeName2": "DFW-M10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:04",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "nodeName1": "SDG-W10",
+                "nodeName2": "DFW-M10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 20
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:05",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "nodeName1": "MSP-M10",
+                "nodeName2": "DFW-M10",
+                "numWaves": 80,
+                "port1": 30,
+                "port2": 40
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:05",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:07",
+            "params": {
+                "nodeName1": "MSP-M10",
+                "nodeName2": "CHG-N10",
+                "numWaves": 80,
+                "port1": 40,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:06",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:08",
+            "params": {
+                "nodeName1": "DFW-M10",
+                "nodeName2": "IAD-M10",
+                "numWaves": 80,
+                "port1": 30,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:07",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:08",
+            "params": {
+                "nodeName1": "CHG-N10",
+                "nodeName2": "IAD-M10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 30
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:07",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:09",
+            "params": {
+                "nodeName1": "CHG-N10",
+                "nodeName2": "JFK-M10",
+                "numWaves": 80,
+                "port1": 30,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:08",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0A",
+            "params": {
+                "nodeName1": "IAD-M10",
+                "nodeName2": "ATL-S10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 50
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:09",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0A",
+            "params": {
+                "nodeName1": "JFK-M10",
+                "nodeName2": "ATL-S10",
+                "numWaves": 80,
+                "port1": 20,
+                "port2": 20
+            },
+            "type": "wdmLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:01",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:01",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": "SFO-R10",
+                "nodeName2": "SFO-W10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:02",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": null,
+                "nodeName2": "SDG-W10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:03",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": "LAX-R10",
+                "nodeName2": "DFW-M10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:04",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:07",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": "SDG-R10",
+                "nodeName2": "CHG-N10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:05",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:09",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": null,
+                "nodeName2": "JFK-M10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        },
+        {
+            "allowed": true,
+            "nodeDpid1": "00:00:ff:ff:ff:ff:00:06",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0A",
+            "params": {
+                "bandwidth": 100000,
+                "nodeName1": null,
+                "nodeName2": "ATL-S10",
+                "port1": 2,
+                "port2": 10
+            },
+            "type": "pktOptLink"
+        }
+    ],
+    "switchConfig": [
+        {
+            "allowed": true,
+            "latitude": 37.6,
+            "longitude": 122.3,
+            "name": "SFO-W10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:01",
+            "params": {
+                "numRegen": 0
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 37.3,
+            "longitude": 121.9,
+            "name": "SJC-W10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:02",
+            "params": {
+                "numRegen": 0
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 33.9,
+            "longitude": 118.4,
+            "name": "LAX-W10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:03",
+            "params": {
+                "numRegen": 0
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 32.8,
+            "longitude": 117.1,
+            "name": "SDG-W10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:04",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 44.8,
+            "longitude": 93.1,
+            "name": "MSP-M10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:05",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 32.8,
+            "longitude": 97.1,
+            "name": "DFW-M10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 41.8,
+            "longitude": 120.1,
+            "name": "CHG-N10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:07",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 38.8,
+            "longitude": 77.1,
+            "name": "IAD-M10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:08",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 40.8,
+            "longitude": 73.1,
+            "name": "JFK-M10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:09",
+            "params": {
+                "numRegen": 0
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 33.8,
+            "longitude": 84.1,
+            "name": "ATL-S10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0A",
+            "params": {
+                "numRegen": 0
+            },
+            "type": "Roadm"
+        },
+        {
+            "allowed": true,
+            "latitude": 32.8,
+            "longitude": 97.1,
+            "name": "DFW-M10",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:06",
+            "params": {
+                "numRegen": 3
+            },
+            "type": "Roadm"
+        }
+    ]
+}
diff --git a/tools/test/topos/oe-nonlinear-10.json b/tools/test/topos/oe-nonlinear-10.json
index 59c5b89..52e8b99 100644
--- a/tools/test/topos/oe-nonlinear-10.json
+++ b/tools/test/topos/oe-nonlinear-10.json
@@ -31,12 +31,6 @@
             "ports": [ { "port": 30, "speed": 0, "type": "FIBER" }, { "port": 31, "speed": 0, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffffff06", "mac": "ffffffffffff06", "type": "ROADM",
-            "mfr": "Linc", "hw": "OE", "sw": "?", "serial": "?", "name": "DFW-M10",
-            "annotations": { "latitude": 32.8, "longitude": 97.1, "optical.regens": 3 },
-            "ports": [ { "port": 30, "speed": 0, "type": "FIBER" }, { "port": 31, "speed": 0, "type": "FIBER" } ]
-        },
-        {
             "uri": "of:0000ffffffffff07", "mac": "ffffffffffff07", "type": "ROADM",
             "mfr": "Linc", "hw": "OE", "sw": "?", "serial": "?", "name": "CHG-N10",
             "annotations": { "latitude": 41.8, "longitude": 120.1, "optical.regens": 3 },
@@ -67,31 +61,31 @@
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffff0003", "mac": "ffffffffff0003", "type": "SWITCH",
+            "uri": "of:0000ffffffff0002", "mac": "ffffffffff0003", "type": "SWITCH",
             "mfr": "Linc", "hw": "PK", "sw": "?", "serial": "?", "name": "LAX-R10",
             "annotations": { "latitude": 33.9, "longitude": 118.4 },
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffff0004", "mac": "ffffffffff0004", "type": "SWITCH",
+            "uri": "of:0000ffffffff0003", "mac": "ffffffffff0004", "type": "SWITCH",
             "mfr": "Linc", "hw": "PK", "sw": "?", "serial": "?", "name": "SDG-R10",
             "annotations": { "latitude": 32.8, "longitude": 117.1 },
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffff0007", "mac": "ffffffffff0007", "type": "SWITCH",
+            "uri": "of:0000ffffffff0004", "mac": "ffffffffff0007", "type": "SWITCH",
             "mfr": "Linc", "hw": "PK", "sw": "?", "serial": "?", "name": "CHG-R10",
             "annotations": { "latitude": 41.8, "longitude": 120.1 },
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffff0009", "mac": "ffffffffff0009", "type": "SWITCH",
+            "uri": "of:0000ffffffff0005", "mac": "ffffffffff0009", "type": "SWITCH",
             "mfr": "Linc", "hw": "PK", "sw": "?", "serial": "?", "name": "JFK-R10",
             "annotations": { "latitude": 40.8, "longitude": 73.1 },
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
         },
         {
-            "uri": "of:0000ffffffff000A", "mac": "ffffffffff000A", "type": "SWITCH",
+            "uri": "of:0000ffffffff0006", "mac": "ffffffffff000A", "type": "SWITCH",
             "mfr": "Linc", "hw": "PK", "sw": "?", "serial": "?", "name": "ATL-R10",
             "annotations": { "latitude": 33.8, "longitude": 84.1 },
             "ports": [ { "port": 1, "speed": 10000, "type": "COPPER" }, { "port": 2, "speed": 100000, "type": "FIBER" } ]
diff --git a/tools/test/topos/optical-2.py b/tools/test/topos/optical-2.py
new file mode 100755
index 0000000..245d449
--- /dev/null
+++ b/tools/test/topos/optical-2.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+''' file: custom/optical.py '''
+from mininet.node import RemoteController
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.cli import CLI
+from mininet.log import setLogLevel, info
+from mininet.util import irange
+
+switches = []
+
+class OpticalTopo( Topo ):
+
+    def build( self, n=6, tapStart=29 ):
+	global switches
+        # Add hosts and switches
+        hosts = []
+        switches = []
+        for i in irange( 1, n ):
+            h = self.addHost( 'h%d' % i )
+            s = self.addSwitch( 's%d' % i, dpid='0000ffffffff%04d' % i )
+            self.addLink( h, s )
+            hosts.append( h )
+            switches.append( s )
+
+        # Add optical tap interfaces
+        tapNum = tapStart
+        #for sw in switches:
+        #    self.addLink( sw, sw, intfName1='%s-eth0' % sw, intfName2='tap%d' % tapNum )
+	    #Add tap interface  up
+            #sudo ip link set dev tap25 up
+       #     tapNum += 1
+
+# if you use, sudo mn --custom custom/optical.py, then register the topo:
+#sudo mn --custom ~/mininet/custom/optical-2.py --topo optical,6 --controller=remote
+#sudo ./mininet/custom/optical-2.py
+topos = { 'optical': OpticalTopo }
+
+def installStaticFlows( net ):
+    for swName in [ 's1', 's2', 's3', 's4', 's5', 's6' ]:
+      info( 'Adding flows to %s...' % swName )
+      sw = net[ swName ]
+      sw.dpctl( 'add-flow', 'in_port=1,actions=output=2' )
+      sw.dpctl( 'add-flow', 'in_port=2,actions=output=1' )
+      info( sw.dpctl( 'dump-flows' ) )
+
+def run():
+    net = Mininet( topo=OpticalTopo(), controller=RemoteController )
+    net.start()
+    #installStaticFlows( net )
+    tapStart = 29
+    for sw in switches:
+        net.get(sw).attach( 'tap%d' %tapStart )
+        tapStart += 1
+    CLI( net )
+    net.stop()
+
+# if the script is run directly (sudo custom/optical.py):
+if __name__ == '__main__':
+    setLogLevel( 'info' )
+    run()