Modified BMv2 demo scripts to work with onos.py

Change-Id: Ie6ff318f9aae2cbbeb288ba894e99a57d4d308db
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()