Modified BMv2 demo scripts to work with onos.py

Change-Id: Ie6ff318f9aae2cbbeb288ba894e99a57d4d308db
diff --git a/tools/test/topos/bmv2-demo-cfg.json b/tools/test/topos/bmv2-demo-cfg.json
index 4ff2e0d..afdbf5b 100644
--- a/tools/test/topos/bmv2-demo-cfg.json
+++ b/tools/test/topos/bmv2-demo-cfg.json
@@ -7,42 +7,42 @@
     }
   },
   "devices": {
-    "bmv2:192.168.57.100:9090#11": {
+    "bmv2:192.168.123.4:9090#11": {
       "basic": {
         "name": "bmv2:11",
         "latitude": 40,
         "longitude": -107
       }
     },
-    "bmv2:192.168.57.100:9091#12": {
+    "bmv2:192.168.123.4:9091#12": {
       "basic": {
         "name": "bmv2:12",
         "latitude": 40,
         "longitude": -99
       }
     },
-    "bmv2:192.168.57.100:9092#13": {
+    "bmv2:192.168.123.4:9092#13": {
       "basic": {
         "name": "bmv2:13",
         "latitude": 40,
         "longitude": -91
       }
     },
-    "bmv2:192.168.57.100:9093#21": {
+    "bmv2:192.168.123.4:9093#21": {
       "basic": {
         "name": "bmv2:21",
         "latitude": 46,
         "longitude": -107
       }
     },
-    "bmv2:192.168.57.100:9094#22": {
+    "bmv2:192.168.123.4:9094#22": {
       "basic": {
         "name": "bmv2:22",
         "latitude": 46,
         "longitude": -99
       }
     },
-    "bmv2:192.168.57.100:9095#23": {
+    "bmv2:192.168.123.4:9095#23": {
       "basic": {
         "name": "bmv2:23",
         "latitude": 46,
@@ -51,83 +51,83 @@
     }
   },
   "links": {
-    "bmv2:192.168.57.100:9090#11/1-bmv2:192.168.57.100:9093#21/1": {
+    "bmv2:192.168.123.4:9090#11/1-bmv2:192.168.123.4:9093#21/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9093#21/1-bmv2:192.168.57.100:9090#11/1": {
+    "bmv2:192.168.123.4:9093#21/1-bmv2:192.168.123.4:9090#11/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9090#11/2-bmv2:192.168.57.100:9093#21/2": {
+    "bmv2:192.168.123.4:9090#11/2-bmv2:192.168.123.4:9093#21/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9093#21/2-bmv2:192.168.57.100:9090#11/2": {
+    "bmv2:192.168.123.4:9093#21/2-bmv2:192.168.123.4:9090#11/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9090#11/3-bmv2:192.168.57.100:9094#22/1": {
+    "bmv2:192.168.123.4:9090#11/3-bmv2:192.168.123.4:9094#22/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9094#22/1-bmv2:192.168.57.100:9090#11/3": {
+    "bmv2:192.168.123.4:9094#22/1-bmv2:192.168.123.4:9090#11/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9090#11/4-bmv2:192.168.57.100:9095#23/1": {
+    "bmv2:192.168.123.4:9090#11/4-bmv2:192.168.123.4:9095#23/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9095#23/1-bmv2:192.168.57.100:9090#11/4": {
+    "bmv2:192.168.123.4:9095#23/1-bmv2:192.168.123.4:9090#11/4": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9091#12/1-bmv2:192.168.57.100:9093#21/3": {
+    "bmv2:192.168.123.4:9091#12/1-bmv2:192.168.123.4:9093#21/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9093#21/3-bmv2:192.168.57.100:9091#12/1": {
+    "bmv2:192.168.123.4:9093#21/3-bmv2:192.168.123.4:9091#12/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9091#12/2-bmv2:192.168.57.100:9094#22/2": {
+    "bmv2:192.168.123.4:9091#12/2-bmv2:192.168.123.4:9094#22/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9094#22/2-bmv2:192.168.57.100:9091#12/2": {
+    "bmv2:192.168.123.4:9094#22/2-bmv2:192.168.123.4:9091#12/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9091#12/3-bmv2:192.168.57.100:9094#22/3": {
+    "bmv2:192.168.123.4:9091#12/3-bmv2:192.168.123.4:9094#22/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9094#22/3-bmv2:192.168.57.100:9091#12/3": {
+    "bmv2:192.168.123.4:9094#22/3-bmv2:192.168.123.4:9091#12/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9091#12/4-bmv2:192.168.57.100:9095#23/2": {
+    "bmv2:192.168.123.4:9091#12/4-bmv2:192.168.123.4:9095#23/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9095#23/2-bmv2:192.168.57.100:9091#12/4": {
+    "bmv2:192.168.123.4:9095#23/2-bmv2:192.168.123.4:9091#12/4": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9092#13/1-bmv2:192.168.57.100:9093#21/4": {
+    "bmv2:192.168.123.4:9092#13/1-bmv2:192.168.123.4:9093#21/4": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9093#21/4-bmv2:192.168.57.100:9092#13/1": {
+    "bmv2:192.168.123.4:9093#21/4-bmv2:192.168.123.4:9092#13/1": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9092#13/2-bmv2:192.168.57.100:9094#22/4": {
+    "bmv2:192.168.123.4:9092#13/2-bmv2:192.168.123.4:9094#22/4": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9094#22/4-bmv2:192.168.57.100:9092#13/2": {
+    "bmv2:192.168.123.4:9094#22/4-bmv2:192.168.123.4:9092#13/2": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9092#13/3-bmv2:192.168.57.100:9095#23/3": {
+    "bmv2:192.168.123.4:9092#13/3-bmv2:192.168.123.4:9095#23/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9095#23/3-bmv2:192.168.57.100:9092#13/3": {
+    "bmv2:192.168.123.4:9095#23/3-bmv2:192.168.123.4:9092#13/3": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9092#13/4-bmv2:192.168.57.100:9095#23/4": {
+    "bmv2:192.168.123.4:9092#13/4-bmv2:192.168.123.4:9095#23/4": {
       "basic": {}
     },
-    "bmv2:192.168.57.100:9095#23/4-bmv2:192.168.57.100:9092#13/4": {
+    "bmv2:192.168.123.4:9095#23/4-bmv2:192.168.123.4:9092#13/4": {
       "basic": {}
     }
   },
   "hosts": {
     "00:00:00:00:00:01/-1": {
       "basic": {
-        "location": "bmv2:192.168.57.100:9090#11/5",
+        "location": "bmv2:192.168.123.4:9090#11/5",
         "ips": [
           "10.0.0.1"
         ],
@@ -138,7 +138,7 @@
     },
     "00:00:00:00:00:02/-1": {
       "basic": {
-        "location": "bmv2:192.168.57.100:9091#12/5",
+        "location": "bmv2:192.168.123.4:9091#12/5",
         "ips": [
           "10.0.0.2"
         ],
@@ -149,7 +149,7 @@
     },
     "00:00:00:00:00:03/-1": {
       "basic": {
-        "location": "bmv2:192.168.57.100:9092#13/5",
+        "location": "bmv2:192.168.123.4:9092#13/5",
         "ips": [
           "10.0.0.3"
         ],
diff --git a/tools/test/topos/bmv2-demo.py b/tools/test/topos/bmv2-demo.py
index d82a874..2ef6825 100644
--- a/tools/test/topos/bmv2-demo.py
+++ b/tools/test/topos/bmv2-demo.py
@@ -4,23 +4,26 @@
 import sys
 import argparse
 
-# Find and import bmv2.py
 if 'ONOS_ROOT' not in os.environ:
     print "Environment var $ONOS_ROOT not set"
     exit()
 else:
-    sys.path.append(os.environ["ONOS_ROOT"] + "/tools/dev/mininet")
-    from bmv2 import ONOSBmv2Switch
+    ONOS_ROOT = os.environ["ONOS_ROOT"]
+    sys.path.append(ONOS_ROOT + "/tools/dev/mininet")
+
+from onos import ONOSCluster, ONOSCLI
+from bmv2 import ONOSBmv2Switch
 
 from itertools import combinations
 from time import sleep
+from subprocess import call
 
 from mininet.cli import CLI
 from mininet.link import TCLink
 from mininet.log import setLogLevel
 from mininet.net import Mininet
 from mininet.node import RemoteController, Host
-from mininet.topo import Topo
+from mininet.topo import Topo, SingleSwitchTopo
 
 
 class ClosTopo(Topo):
@@ -126,39 +129,54 @@
 def main(args):
     topo = ClosTopo()
 
-    net = Mininet(topo=topo, build=False)
+    if not args.onos_ip:
+        controller = ONOSCluster('c0', 3)
+        onosIp = controller.nodes()[0].IP()
+    else:
+        controller = RemoteController('c0', ip=args.onos_ip, port=args.onos_port)
+        onosIp = args.onos_ip
 
-    net.addController('c0', controller=RemoteController, ip=args.onos_ip, port=args.onos_port)
+    net = Mininet(topo=topo, build=False, controller=[controller])
 
     net.build()
     net.start()
 
-    print "Network started..."
+    print "Network started"
 
-    # Generates background traffic (needed for host discovery and bmv2 config swap).
+    # Generate background traffic.
     sleep(3)
     for (h1, h2) in combinations(net.hosts, 2):
         h1.startPingBg(h2)
         h2.startPingBg(h1)
 
+    print "Background ping started"
+
     for h in net.hosts:
         h.startIperfServer()
 
-    print "Background ping started..."
+    print "Iperf servers started"
 
     # sleep(4)
     # print "Starting traffic from h1 to h3..."
     # net.hosts[0].startIperfClient(net.hosts[-1], flowBw="200k", numFlows=100, duration=10)
 
-    CLI(net)
+    print "Setting netcfg..."
+    call(("onos-netcfg", onosIp,
+          "%s/tools/test/topos/bmv2-demo-cfg.json" % ONOS_ROOT))
+
+    if not args.onos_ip:
+        ONOSCLI(net)
+    else:
+        CLI(net)
 
     net.stop()
 
 
 if __name__ == '__main__':
-    parser = argparse.ArgumentParser(description='BMv2 mininet demo script (2-stage Clos topology)')
+    parser = argparse.ArgumentParser(
+        description='BMv2 mininet demo script (2-stage Clos topology)')
     parser.add_argument('--onos-ip', help='ONOS-BMv2 controller IP address',
-                        type=str, action="store", required=True)
+                        type=str, action="store", required=False)
     parser.add_argument('--onos-port', help='ONOS-BMv2 controller port',
                         type=int, action="store", default=40123)
     args = parser.parse_args()