Merge "Create testcases in FUNCflow for testing OF1.3 features"
diff --git a/TestON/README.md b/TestON/README.md
index fdb9200..5335503 100644
--- a/TestON/README.md
+++ b/TestON/README.md
@@ -45,7 +45,7 @@
 
        resides into "TestON-master" directory as following:
 
-            paxterra@paxterra-desktop:~/TestON/bin$ ./cli.py
+            sdn@test-station:~/TestON/bin$ ./cli.py
             teston>run MininetTest
 
   2. TAI (Test Authoring Interface) UI based :
@@ -61,7 +61,7 @@
 --------
 For more examples, refer 'examples' directory.
 Please find the below link for examples:
-     https://github.com/Paxterra/TestON/tree/TestOn-1.0.0/examples
+     https://github.com/opennetworkinglab/OnosSystemTest/tree/master/TestON/examples
 
 
 
diff --git a/TestON/bin/cli.py b/TestON/bin/cli.py
index f29a8ec..13423a5 100755
--- a/TestON/bin/cli.py
+++ b/TestON/bin/cli.py
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 '''
 Created on 20-Dec-2012
+Modified 2016 by ON.Lab
 
-@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
-
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -261,20 +262,24 @@
         '''
         options = self.initOptions(options)
         try :
-            for index, option in enumerate(args):
+            index = 0
+            while index < len( args ):
+                option = args[index]
                 if index > 0 :
-                    if re.match("logdir|mail|example|testdir|testcases|onoscell", option, flags = 0):
-                        index = index+1
-                        options[option] = args[index]
-                        options = self.testcasesInRange(index,option,args,options)
-                    elif re.match("--params", option, flags=0):
+                    if re.match("--params", option, flags=0):
                         # check if there is a params
-                        index = index + 1
-                        options['params'].append(args[index])
+                        options['params'].append(args[index+1])
+                    elif re.match("logdir|mail|example|testdir|testcases|onoscell", option, flags = 0):
+                        options[option] = args[index+1]
+                        options = self.testcasesInRange(index+1,option,args,options)
+                    index += 2
                 else :
                     options['testname'] = option
+                    index += 1
         except IndexError as e:
-            print e
+            print (e)
+            main.cleanup()
+            main.exit()
 
         return options
 
diff --git a/TestON/core/graph.py b/TestON/core/graph.py
index c893adc..e8c8a7a 100644
--- a/TestON/core/graph.py
+++ b/TestON/core/graph.py
@@ -1,4 +1,13 @@
 #!/usr/bin/env python
+"""
+Created 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+"""
+
+
 import time
 import random
 
@@ -126,8 +135,9 @@
                                                                                                                                    attributeValueA,
                                                                                                                                    attributeValueB ) )
             if not result:
-                main.log.debug( "Graph: graphDictA: {}".format( graphDictA ) )
-                main.log.debug( "Graph: graphDictB: {}".format( graphDictB ) )
+                #main.log.debug( "Graph: graphDictA: {}".format( graphDictA ) )
+                #main.log.debug( "Graph: graphDictB: {}".format( graphDictB ) )
+                pass
             return result
         except TypeError:
             main.log.exception( "Graph: TypeError exception found" )
@@ -158,7 +168,7 @@
             for chain in self.chains:
                 for edge in chain:
                     nonCutEdges.append( edge )
-            main.log.debug( 'Non-cut-edges: {}'.format( nonCutEdges ) )
+            #main.log.debug( 'Non-cut-edges: {}'.format( nonCutEdges ) )
             return nonCutEdges
         except Exception:
             main.log.exception( "Graph: Uncaught exception" )
@@ -182,14 +192,14 @@
                 # chain, the chain is a cycle chain
                 if chain[ 0 ][ 0 ] == chain[ -1 ][ 1 ]:
                     cycleChains.append( chain )
-            main.log.debug( 'Cycle chains: {}'.format( cycleChains ) )
+            #main.log.debug( 'Cycle chains: {}'.format( cycleChains ) )
             # Get a set of vertices which are the first vertices of a cycle chain (excluding the first
             # cycle chain), and these vertices are a subset of all cut-vertices
             subsetOfCutVertices = []
             if len( cycleChains ) > 1:
                 for cycleChain in cycleChains[ 1: ]:
                     subsetOfCutVertices.append( cycleChain[ 0 ][ 0 ] )
-            main.log.debug( 'Subset of cut vertices: {}'.format( subsetOfCutVertices ) )
+            #main.log.debug( 'Subset of cut vertices: {}'.format( subsetOfCutVertices ) )
             nonCutVertices = []
             assert nonCutEdges != None
             for vertex in self.graphDict.keys():
@@ -204,7 +214,7 @@
                         break
                 if vertexIsNonCut:
                     nonCutVertices.append( vertex )
-            main.log.debug( 'Non-cut-vertices: {}'.format( nonCutVertices ) )
+            #main.log.debug( 'Non-cut-vertices: {}'.format( nonCutVertices ) )
             return nonCutVertices
         except KeyError:
             main.log.exception( "Graph: KeyError exception found" )
diff --git a/TestON/core/logger.py b/TestON/core/logger.py
index 05693ba..79f7c7f 100644
--- a/TestON/core/logger.py
+++ b/TestON/core/logger.py
@@ -1,8 +1,11 @@
 #/usr/bin/env python
 '''
 Created on 07-Jan-2013
+Modified 2015 by ON.Lab
 
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/core/openspeak.py b/TestON/core/openspeak.py
index 3794910..b98c68b 100644
--- a/TestON/core/openspeak.py
+++ b/TestON/core/openspeak.py
@@ -1,9 +1,11 @@
 #/usr/bin/env python
 '''
 Created on 20-Dec-2012
+Modified 2015 by ON.Lab
 
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index a770490..e3b50a5 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 '''
 Created on 22-Oct-2012
+Modified 2016 by ON.Lab
 
-@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -412,7 +414,7 @@
         argument is given.
 
         Optional Arguments:
-            result: Case insensite string. Can be 'PASS' or 'FAIL' and will set
+            result: Case insensitive string. Can be 'PASS' or 'FAIL' and will set
                     the case result accordingly.
             msg: Message to be printed when the case is skipped in the reports.
         """
@@ -949,7 +951,7 @@
             if not re.search( ".=.", param ):
                 print( "Error when parsing params: params should follow key=value format" )
                 continue
-            # Split the param string to netest keys and value
+            # Split the param string to catch nested keys and the value
             [ keys, value ] = param.split( "=" )
             # Split the nested keys according to its hierarchy
             keyList = keys.split( "/" )
diff --git a/TestON/core/testparser.py b/TestON/core/testparser.py
index aab4388..904ebc0 100644
--- a/TestON/core/testparser.py
+++ b/TestON/core/testparser.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 '''
 Created on 26-Dec-2012
+Modified 2015 by ON.Lab
 
-@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/core/utilities.py b/TestON/core/utilities.py
index ce502cb..43d56dc 100644
--- a/TestON/core/utilities.py
+++ b/TestON/core/utilities.py
@@ -1,11 +1,11 @@
 #!/usr/bin/env python
 '''
 Created on 23-Oct-2012
+Modified 2015 by ON.Lab
 
-@authors: Anil Kumar (anilkumar.s@paxterrasolutions.com),
-          Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/core/xmldict.py b/TestON/core/xmldict.py
index 8d1dcf4..0746f3a 100644
--- a/TestON/core/xmldict.py
+++ b/TestON/core/xmldict.py
@@ -1,5 +1,10 @@
 '''
 Created on 03-Dec-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 @author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
 
diff --git a/TestON/core/xmlparser.py b/TestON/core/xmlparser.py
index f12f69c..e639d57 100644
--- a/TestON/core/xmlparser.py
+++ b/TestON/core/xmlparser.py
@@ -1,6 +1,11 @@
 #/usr/bin/env python
 '''
 Created on 07-Jan-2013
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 @author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
 
diff --git a/TestON/drivers/common/api/controller/onosrestdriver.py b/TestON/drivers/common/api/controller/onosrestdriver.py
index 64c3e18..033353b 100644
--- a/TestON/drivers/common/api/controller/onosrestdriver.py
+++ b/TestON/drivers/common/api/controller/onosrestdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 07-08-2015
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/drivers/common/api/controllerdriver.py b/TestON/drivers/common/api/controllerdriver.py
index 1c3b3b8..6cda814 100644
--- a/TestON/drivers/common/api/controllerdriver.py
+++ b/TestON/drivers/common/api/controllerdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 29-Nov-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/api/dockerapidriver.py b/TestON/drivers/common/api/dockerapidriver.py
index 4a874c6..10743da 100644
--- a/TestON/drivers/common/api/dockerapidriver.py
+++ b/TestON/drivers/common/api/dockerapidriver.py
@@ -1,4 +1,11 @@
 #!/usr/bin/env python
+"""
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+"""
 
 import json
 import os
@@ -201,7 +208,7 @@
         """
         rmResult = main.TRUE
 
-        if self.dockerClient.images() is []: 
+        if self.dockerClient.images() is []:
             main.log.info( "No docker image found with RepoTags: " + image )
             return rmResult
         else:
diff --git a/TestON/drivers/common/api/fvtapidriver.py b/TestON/drivers/common/api/fvtapidriver.py
index 892eef9..f861f7d 100644
--- a/TestON/drivers/common/api/fvtapidriver.py
+++ b/TestON/drivers/common/api/fvtapidriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/apidriver.py b/TestON/drivers/common/apidriver.py
index af66d98..166211e 100644
--- a/TestON/drivers/common/apidriver.py
+++ b/TestON/drivers/common/apidriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 22-Nov-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/dpclidriver.py b/TestON/drivers/common/cli/dpclidriver.py
index 23214b8..f3ea3e5 100644
--- a/TestON/drivers/common/cli/dpclidriver.py
+++ b/TestON/drivers/common/cli/dpclidriver.py
@@ -1,5 +1,10 @@
 """
 Driver for blank dataplane VMs. Created for SDNIP test.
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 """
 import pexpect
 from drivers.common.clidriver import CLI
diff --git a/TestON/drivers/common/cli/emulator/flowvisordriver.py b/TestON/drivers/common/cli/emulator/flowvisordriver.py
index 6ec2ee6..35c0bbf 100644
--- a/TestON/drivers/common/cli/emulator/flowvisordriver.py
+++ b/TestON/drivers/common/cli/emulator/flowvisordriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Mar-2013
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/emulator/lincoedriver.py b/TestON/drivers/common/cli/emulator/lincoedriver.py
index ae3eef9..5024f17 100644
--- a/TestON/drivers/common/cli/emulator/lincoedriver.py
+++ b/TestON/drivers/common/cli/emulator/lincoedriver.py
@@ -13,6 +13,11 @@
     shreya@onlab.us
 
 OCT 20 2014
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 """
 
 import pexpect
diff --git a/TestON/drivers/common/cli/emulator/lincoemininetdriver.py b/TestON/drivers/common/cli/emulator/lincoemininetdriver.py
index 9372a54..1691ef8 100644
--- a/TestON/drivers/common/cli/emulator/lincoemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/lincoemininetdriver.py
@@ -16,7 +16,14 @@
 
 
 LincOEMininetDriver is an extension of the mininetclidriver to handle linc oe
+
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 """
+
 import pexpect
 import re
 import sys
@@ -25,7 +32,7 @@
 
 
 class LincOEMininetDriver( MininetCliDriver ):
-    def runOpticalMnScript( self,onosDirectory = 'onos', ctrllerIP = None ):
+    def runOpticalMnScript( self,onosDirectory = 'onos', ctrllerIP = None, topology = 'opticalTest' ):
         import time
         import types
         """
@@ -35,6 +42,7 @@
                 packet layer( mn ) and optical topology
             Optional:
                 name - Name of onos directory. (ONOS | onos)
+                topology - Name of optical topology to activate, defaults to opticalTest.py
             Required:
                 ctrllerIP = Controller(s) IP address
             TODO: If no ctrllerIP is provided, a default
@@ -58,7 +66,7 @@
                 else:
                     main.log.info( "You need to specify a valid IP" )
                     return main.FALSE
-                topoFile = "~/{0}/tools/test/topos/opticalTest.py".format( onosDirectory )
+                topoFile = "~/{0}/tools/test/topos/{1}.py".format( onosDirectory, topology )
                 cmd = "sudo -E python {0} {1}".format( topoFile, controller )
                 main.log.info( self.name + ": cmd = " + cmd )
                 self.handle.sendline( cmd )
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 1632fee..a587019 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2016 by ON.Lab
 
-author: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 TestON is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/TestON/drivers/common/cli/emulator/poxclidriver.py b/TestON/drivers/common/cli/emulator/poxclidriver.py
index 2d92139..02c43b1 100644
--- a/TestON/drivers/common/cli/emulator/poxclidriver.py
+++ b/TestON/drivers/common/cli/emulator/poxclidriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Raghav Kashyap( raghavkashyap@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index cc75755..bf1c6c6 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -1,9 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2016 by ON.Lab
 
-author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
diff --git a/TestON/drivers/common/cli/emulator/scapyclidriver.py b/TestON/drivers/common/cli/emulator/scapyclidriver.py
index 9321910..f1457ea 100644
--- a/TestON/drivers/common/cli/emulator/scapyclidriver.py
+++ b/TestON/drivers/common/cli/emulator/scapyclidriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 2015-2016
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 TestON is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
diff --git a/TestON/drivers/common/cli/emulatordriver.py b/TestON/drivers/common/cli/emulatordriver.py
index fa0309e..fb7a80d 100644
--- a/TestON/drivers/common/cli/emulatordriver.py
+++ b/TestON/drivers/common/cli/emulatordriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 32a08e9..eea502b 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -14,6 +14,11 @@
 shreya@onlab.us
 
 OCT 13 2014
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 """
 import pexpect
@@ -2809,9 +2814,12 @@
         """
         import json
         try:
-            topology = self.getTopology( self.topology() )
             summary = json.loads( self.summary() )
-
+        except ( TypeError, ValueError ):
+            main.log.exception( "{}: Object not as expected: {!r}".format( self.name, summary ) )
+            return main.ERROR
+        try:
+            topology = self.getTopology( self.topology() )
             if topology == {} or topology == None or summary == {} or summary == None:
                 return main.ERROR
             output = ""
@@ -4926,3 +4934,40 @@
         except Exception:
             main.log.exception( self.name + ": Uncaught exception!" )
             return None
+
+    def getIntentPerfSummary( self ):
+        '''
+        Send command to check intent-perf summary
+        Returns: dictionary for intent-perf summary
+                 if something wrong, function will return None
+        '''
+        cmd = "intent-perf -s"
+        respDic = {}
+        resp = self.sendline( cmd )
+        try:
+            # Generate the dictionary to return
+            for l in resp.split( "\n" ):
+                # Delete any white space in line
+                temp = re.sub( r'\s+', '', l )
+                temp = temp.split( ":" )
+                respDic[ temp[0] ] = temp[ 1 ]
+
+        except (TypeError, ValueError):
+            main.log.exception( self.name + ": Object not as expected" )
+            return None
+        except KeyError:
+            main.log.exception( self.name + ": KeyError exception found" )
+            return None
+        except AssertionError:
+            main.log.exception( self.name + ": AssertionError exception found" )
+            return None
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            return None
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            return None
+        return respDic
+
+
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 3c8d484..635178e 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -14,6 +14,11 @@
 andrew@onlab.us
 
 OCT 9 2014
+Modified 2016 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 """
 import time
@@ -2332,3 +2337,36 @@
 
         return main.TRUE if onosStatus else main.FALSE
 
+    def onosNetCfg( self, controllerIps, path, fileName ):
+        """
+        Push a specified json file to ONOS through the onos-netcfg service
+
+        Required:
+        controllerIps - the Ips of the ONOS nodes in the cluster
+        path - the location of the file to be sent
+        fileName - name of the json file to be sent
+
+        Returns main.TRUE on successfully sending json file, and main.FALSE if
+        there is an error.
+        """
+        try:
+            cmd = "onos-netcfg {0} {1}{2}.json".format( controllerIps, path, fileName )
+            main.log.info( "Sending: " + cmd )
+            main.ONOSbench.handle.sendline( cmd )
+            handle = self.handle.before
+            print handle
+            if "Error" in handle:
+                main.log.error( self.name + ":    " + self.handle.before )
+                return main.FALSE
+            else:
+                self.handle.expect( "\$" )
+                return main.TRUE
+        except pexpect.EOF:
+            main.log.error( self.name + ": EOF exception found" )
+            main.log.error( self.name + ":    " + self.handle.before )
+            main.cleanup()
+            main.exit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanup()
+            main.exit()
diff --git a/TestON/drivers/common/cli/quaggaclidriver.py b/TestON/drivers/common/cli/quaggaclidriver.py
index e89047e..721ae6a 100644
--- a/TestON/drivers/common/cli/quaggaclidriver.py
+++ b/TestON/drivers/common/cli/quaggaclidriver.py
@@ -1,4 +1,11 @@
 #!/usr/bin/env python
+"""
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+"""
 
 import time
 import pexpect
diff --git a/TestON/drivers/common/cli/remotesysdriver.py b/TestON/drivers/common/cli/remotesysdriver.py
index 963b8f4..a56f644 100644
--- a/TestON/drivers/common/cli/remotesysdriver.py
+++ b/TestON/drivers/common/cli/remotesysdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
index a000806..4f55a90 100644
--- a/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/floodlightclidriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 12-Feb-2013
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py b/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py
index 07fb668..aea470d 100644
--- a/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/necswitchdriver.py
@@ -1,3 +1,11 @@
+"""
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+"""
+
 class NEC:
 
     def __init__( self ):
diff --git a/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
index 6f2f90c..50100c9 100644
--- a/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/remotepoxdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 12-Feb-2013
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
index 892d998..f4a1f1a 100644
--- a/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
+++ b/TestON/drivers/common/cli/remotetestbed/remotevmdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 12-Feb-2013
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/remotetestbeddriver.py b/TestON/drivers/common/cli/remotetestbeddriver.py
index acb9ccc..ebf8fbe 100644
--- a/TestON/drivers/common/cli/remotetestbeddriver.py
+++ b/TestON/drivers/common/cli/remotetestbeddriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Oct-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Anil Kumar ( anilkumar.s@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/tool/dpctlclidriver.py b/TestON/drivers/common/cli/tool/dpctlclidriver.py
index 504567c..683f16e 100644
--- a/TestON/drivers/common/cli/tool/dpctlclidriver.py
+++ b/TestON/drivers/common/cli/tool/dpctlclidriver.py
@@ -1,6 +1,11 @@
 #/usr/bin/env python
 """
 Created on 26-Nov-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Raghav Kashyap( raghavkashyap@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/cli/toolsdriver.py b/TestON/drivers/common/cli/toolsdriver.py
index 775902f..c96cb4f 100644
--- a/TestON/drivers/common/cli/toolsdriver.py
+++ b/TestON/drivers/common/cli/toolsdriver.py
@@ -1,6 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 26-Nov-2012
+Modified 2015 by ON.Lab
+
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
 author:: Raghav Kashyap( raghavkashyap@paxterrasolutions.com )
 
diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
index a7404fa..283088d 100644
--- a/TestON/drivers/common/clidriver.py
+++ b/TestON/drivers/common/clidriver.py
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 24-Oct-2012
+Modified 2016 by ON.Lab
 
-author:s: Anil Kumar ( anilkumar.s@paxterrasolutions.com ),
-          Raghav Kashyap( raghavkashyap@paxterrasolutions.com )
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -18,9 +19,6 @@
 
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
-
-
-
 """
 import pexpect
 import re
diff --git a/TestON/drivers/component.py b/TestON/drivers/component.py
index b8a66e9..fc17d47 100644
--- a/TestON/drivers/component.py
+++ b/TestON/drivers/component.py
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
 """
 Created on 24-Oct-2012
+Modified 2015 by ON.Lab
 
-author:s: Anil Kumar ( anilkumar.s@paxterrasolutions.com ),
-          Raghav Kashyap( raghavkashyap@paxterrasolutions.com )
-
+Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
 
     TestON is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -18,9 +19,6 @@
 
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
-
-
-
 """
 import logging
 
diff --git a/TestON/install.sh b/TestON/install.sh
index dee85c9..4bbfe92 100755
--- a/TestON/install.sh
+++ b/TestON/install.sh
@@ -63,13 +63,20 @@
 echo "Installing TestON dependencies"
 if [ "$DIST" = "Fedora" ]; then
     # Fedora may have vlan enabled by default. Still need to confirm and update later
-    $install python-pip build-essential python-dev pep8 arping python3-requests
+    $install python-pip build-essential python-dev pep8 python3-requests
     $pipinstall pexpect==3.2 configobj==4.7.2 numpy
 else
-    $install python-pip build-essential python-dev pep8 vlan arping python3-requests
+    $install python-pip build-essential python-dev pep8 vlan python3-requests
     $pipinstall pexpect==3.2 configobj==4.7.2 numpy
 fi
 
+# Some Distos have this already from another package
+if which arping > /dev/null ; then
+    echo "Arping command detected, skipping package installation."
+else
+    $install arping
+fi
+
 # Add check here to make sure OnosSystemTest is cloned into home directory (place holder)
 
 # Add symbolic link to main TestON folder in Home dir
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
index c3a7346..6c9ef4b 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.params
@@ -15,18 +15,20 @@
     # 50. Set FlowObjective to True
     # 51. Set FlowObjective to False
     # 60. Rebalance devices across controllers
+    # 70. Run randomly generated events
+    # 80. Replay events from log file
     # 90. Sleep for some time
-    # 100. Do something else
+    # 100. Do nothing
     # Sample sequence: 0,1,2,3,[10,30,21,31,10,32,21,33,50,10,30,21,31,10,32,21,33,51,40,60,10,30,21,31,10,32,21,33,50,10,30,21,31,10,32,21,33,51,41,60]*500,100
     <testcases>
-        0,1,2,3,10,[30,21,31,32,21,33,50,30,21,31,32,21,33,51]*500,100
+        0,1,2,3,70
     </testcases>
 
     <TEST>
         <topo>1</topo>
         <IPv6>on</IPv6>
         <numCtrl>3</numCtrl>
-        <pauseTest>on</pauseTest>
+        <pauseTest>off</pauseTest>
         <caseSleep>0</caseSleep>
         <setIPv6CfgSleep>5</setIPv6CfgSleep>
         <loadTopoSleep>5</loadTopoSleep>
@@ -382,6 +384,20 @@
         <linkDownUpInterval>1</linkDownUpInterval>
     </CASE21>
 
+    <CASE70>
+        <sleepSec>2</sleepSec>
+        <addHostIntentWeight>3</addHostIntentWeight>
+        <addPointIntentWeight>3</addPointIntentWeight>
+        <linkDownWeight>3</linkDownWeight>
+        <deviceDownWeight>2</deviceDownWeight>
+    </CASE70>
+
+    <CASE80>
+        <filePath>/home/admin/log-for-replay</filePath>
+        <sleepTime>0.1</sleepTime>
+        <skipChecks>on</skipChecks>
+    </CASE80>
+
     <CASE90>
         <sleepSec>60</sleepSec>
     </CASE90>
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
index 7b07758..8937a4a 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
@@ -762,6 +762,138 @@
                                  onfail="Balance masters test failed" )
         time.sleep( main.caseSleep )
 
+    def CASE70( self, main ):
+        """
+        Randomly generate events
+        """
+        import time
+        import random
+        from tests.CHOTestMonkey.dependencies.events.Event import EventType
+        from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduleMethod
+
+        main.log.report( "Randomly generate events" )
+        main.log.report( "__________________________________________________" )
+        main.case( "Randomly generate events" )
+        main.step( "Randomly generate events" )
+        main.caseResult = main.TRUE
+        sleepSec = int( main.params[ 'CASE70' ][ 'sleepSec' ] )
+        hostIntentNum = 0
+        pointIntentNum = 0
+        downDeviceNum = 0
+        downLinkNum = 0
+        upControllers = [ 1, 2, 3 ]
+        while True:
+            events = []
+            for i in range( int( main.params[ 'CASE70' ][ 'addHostIntentWeight' ] ) ):
+                events.append( 'add-host-intent' )
+            for i in range( int( main.params[ 'CASE70' ][ 'addPointIntentWeight' ] ) ):
+                events.append( 'add-point-intent' )
+            for i in range( int( main.params[ 'CASE70' ][ 'linkDownWeight' ] ) ):
+                events.append( 'link-down' )
+            for i in range( int( main.params[ 'CASE70' ][ 'deviceDownWeight' ] ) ):
+                events.append( 'device-down' )
+            for i in range( int( pow( hostIntentNum, 1.5 ) / 100 ) ):
+                events.append( 'del-host-intent' )
+            for i in range( int( pow( pointIntentNum, 1.5 ) / 100 ) ):
+                events.append( 'del-point-intent' )
+            for i in range( pow( 2, downLinkNum ) - 1 ):
+                events.append( 'link-up' )
+            for i in range( pow( 5, downDeviceNum ) - 1 ):
+                events.append( 'device-up' )
+            main.log.debug( events )
+            event = random.sample( events, 1 )[ 0 ]
+            if event == 'add-host-intent':
+                n = random.randint( 5, 50 )
+                for i in range( n ):
+                    cliIndex = random.sample( upControllers, 1 )[ 0 ]
+                    main.eventGenerator.triggerEvent( EventType().APP_INTENT_HOST_ADD, EventScheduleMethod().RUN_BLOCK, 'random', 'random', cliIndex )
+                    hostIntentNum += 1
+            elif event == 'del-host-intent':
+                n = random.randint( 5, hostIntentNum )
+                for i in range( n ):
+                    cliIndex = random.sample( upControllers, 1 )[ 0 ]
+                    main.eventGenerator.triggerEvent( EventType().APP_INTENT_HOST_DEL, EventScheduleMethod().RUN_BLOCK, 'random', 'random', cliIndex )
+                    hostIntentNum -= 1
+            elif event == 'add-point-intent':
+                n = random.randint( 5, 50 )
+                for i in range( n ):
+                    cliIndex = random.sample( upControllers, 1 )[ 0 ]
+                    main.eventGenerator.triggerEvent( EventType().APP_INTENT_POINT_ADD, EventScheduleMethod().RUN_BLOCK, 'random', 'random', cliIndex, 'bidirectional' )
+                    pointIntentNum += 2
+            elif event == 'del-point-intent':
+                n = random.randint( 5, pointIntentNum / 2 )
+                for i in range( n ):
+                    cliIndex = random.sample( upControllers, 1 )[ 0 ]
+                    main.eventGenerator.triggerEvent( EventType().APP_INTENT_POINT_DEL, EventScheduleMethod().RUN_BLOCK, 'random', 'random', cliIndex, 'bidirectional' )
+                    pointIntentNum -= 2
+            elif event == 'link-down':
+                main.eventGenerator.triggerEvent( EventType().NETWORK_LINK_DOWN, EventScheduleMethod().RUN_BLOCK, 'random', 'random' )
+                downLinkNum += 1
+            elif event == 'link-up':
+                main.eventGenerator.triggerEvent( EventType().NETWORK_LINK_UP, EventScheduleMethod().RUN_BLOCK, 'random', 'random' )
+                downLinkNum -= 1
+            elif event == 'device-down':
+                main.eventGenerator.triggerEvent( EventType().NETWORK_DEVICE_DOWN, EventScheduleMethod().RUN_BLOCK, 'random' )
+                downDeviceNum += 1
+            elif event == 'device-up':
+                main.eventGenerator.triggerEvent( EventType().NETWORK_DEVICE_UP, EventScheduleMethod().RUN_BLOCK, 'random' )
+                downDeviceNum -= 1
+            else:
+                pass
+            main.eventGenerator.triggerEvent( EventType().CHECK_TOPO, EventScheduleMethod().RUN_NON_BLOCK )
+            main.eventGenerator.triggerEvent( EventType().CHECK_ONOS, EventScheduleMethod().RUN_NON_BLOCK )
+            main.eventGenerator.triggerEvent( EventType().CHECK_TRAFFIC, EventScheduleMethod().RUN_NON_BLOCK )
+            main.eventGenerator.triggerEvent( EventType().CHECK_FLOW, EventScheduleMethod().RUN_NON_BLOCK )
+            main.eventGenerator.triggerEvent( EventType().CHECK_INTENT, EventScheduleMethod().RUN_NON_BLOCK )
+            with main.eventScheduler.idleCondition:
+                while not main.eventScheduler.isIdle():
+                    main.eventScheduler.idleCondition.wait()
+            #time.sleep( sleepSec )
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=main.caseResult,
+                                 onpass="Randomly generate events test passed",
+                                 onfail="Randomly generate events test failed" )
+        time.sleep( main.caseSleep )
+
+    def CASE80( self, main ):
+        """
+        Replay events from log file
+        """
+        import time
+        from tests.CHOTestMonkey.dependencies.events.Event import EventType
+        from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduleMethod
+
+        main.log.report( "Replay events from log file" )
+        main.log.report( "__________________________________________________" )
+        main.case( "Replay events from log file" )
+        main.step( "Replay events from log file" )
+        main.caseResult = main.TRUE
+        try:
+            f = open( main.params[ 'CASE80' ][ 'filePath' ], 'r' )
+            for line in f.readlines():
+                if 'CHOTestMonkey' in line and 'Event recorded' in line:
+                    line = line.split()
+                    eventIndex = int( line[ 9 ] )
+                    eventName = line[ 10 ]
+                    args = line[ 11: ]
+                    assert eventName.startswith( 'CHECK' )\
+                    or eventName.startswith( 'NETWORK' )\
+                    or eventName.startswith( 'APP' )\
+                    or eventName.startswith( 'ONOS' )
+                    if main.params[ 'CASE80' ][ 'skipChecks' ] == 'on' and eventName.startswith( 'CHECK' ):
+                        continue
+                    with main.eventScheduler.idleCondition:
+                        while not main.eventScheduler.isIdle():
+                            main.eventScheduler.idleCondition.wait()
+                    main.eventGenerator.triggerEvent( eventIndex, EventScheduleMethod().RUN_BLOCK, *args )
+                    time.sleep( float( main.params[ 'CASE80' ][ 'sleepTime' ] ) )
+        except Exception as e:
+            print e
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=main.caseResult,
+                                 onpass="Replay from log file passed",
+                                 onfail="Replay from log file failed" )
+
     def CASE90( self, main ):
         """
         Sleep for some time
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
index 99ead73..ae32932 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
@@ -78,7 +78,7 @@
             else:
                 main.log.warn( "Event Scheduler - invalid index when isnerting event: %s" % ( index ) )
             self.pendingEventsCondition.notify()
-        self.printEvents()
+        #self.printEvents()
 
     def startScheduler( self ):
         """
@@ -127,7 +127,7 @@
 
         with self.runningEventsCondition:
             self.runningEvents.append( eventTuple )
-        self.printEvents()
+        #self.printEvents()
         rerunNum = 0
         result = eventTuple.startEvent()
         while result == EventStates().FAIL and rerunNum < eventTuple.maxRerunNum:
@@ -150,7 +150,7 @@
                     if len( self.pendingEvents ) == 0:
                         with self.idleCondition:
                             self.idleCondition.notify()
-        self.printEvents()
+        #self.printEvents()
 
     def printEvents( self ):
         """
@@ -172,18 +172,18 @@
             if len( self.pendingEvents ) > 0:
                 events += str( self.pendingEvents[ -1 ].typeIndex )
         events += "]"
-        #main.log.debug( "Event Scheduler - Events: " + events )
+        main.log.debug( "Event Scheduler - Events: " + events )
 
     def isAvailable( self ):
-        with self.pendingEventsCondition:
-            with self.runningEventsCondition:
+        with self.runningEventsCondition:
+            with self.pendingEventsCondition:
                 return len( self.pendingEvents ) < self.pendingEventsCapacity and\
                        len( self.runningEvents ) < self.runningEventsCapacity and\
                        self.isRunning
 
     def isIdle( self ):
-        with self.pendingEventsCondition:
-            with self.runningEventsCondition:
+        with self.runningEventsCondition:
+            with self.pendingEventsCondition:
                 return len( self.pendingEvents ) == 0 and\
                        len( self.runningEvents ) == 0 and\
                        self.isRunning
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventTrigger.py b/TestON/tests/CHOTestMonkey/dependencies/EventTrigger.py
index 0c3e0e0..27b8166 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventTrigger.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventTrigger.py
@@ -15,7 +15,7 @@
     address = ( host, port )
     conn = Client( address )
     request = []
-    request.append( 2 )
+    request.append( 1 )
     request.append( type )
     request.append( scheduleMethod )
     for arg in args:
@@ -23,7 +23,9 @@
     conn.send( request )
     response = conn.recv()
     while response == 11:
+        conn.close()
         time.sleep( 1 )
+        conn = Client( address )
         conn.send( request )
         response = conn.recv()
     if response == 10:
@@ -64,5 +66,19 @@
         else:
             pass
 
+def replayFromFile( filePath='/home/admin/event-list', sleepTime=1 ):
+    try:
+        f = open( filePath, 'r' )
+        for line in f.readlines():
+            event = line.split()
+            if event[ 3 ].startswith( 'CHECK' ):
+                continue
+            triggerEvent( event[ 3 ], 'RUN_BLOCK', *event[ 4: ] )
+            time.sleep( sleepTime )
+        f.close()
+    except Exception as e:
+        print e
+
 if __name__ == '__main__':
-    testLoop( 2 )
+    #testLoop( 2 )
+    replayFromFile()
diff --git a/TestON/tests/CHOTestMonkey/dependencies/cli.py b/TestON/tests/CHOTestMonkey/dependencies/cli.py
index d1a8448..a3fb18e 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/cli.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/cli.py
@@ -64,26 +64,28 @@
             if cmdList[ 0 ] in commandMap.keys():
                 num = paramNum[ cmdList[ 0 ] ]
                 name = commandMap[ cmdList[ 0 ] ]
+                '''
                 if len( cmdList ) < num + 1:
                     print 'not enough arguments'
                 elif len( cmdList ) > num + 1:
                     print 'Too many arguments'
                 else:
-                    result = triggerEvent( debugMode, name, 'RUN_BLOCK', cmdList[ 1: ] )
-                    if result == 10:
-                        pass
-                    elif result == 11:
-                        print "Scheduler busy...Try later or use debugging mode by entering \'debug\'"
-                    elif result == 20:
-                        print "Unknown message to server"
-                    elif result == 21:
-                        print "Unknown event type to server"
-                    elif result == 22:
-                        print "Unknown schedule method to server"
-                    elif result == 23:
-                        print "Not enough argument"
-                    else:
-                        print "Unknown response from server"
+                '''
+                result = triggerEvent( debugMode, name, 'RUN_BLOCK', cmdList[ 1: ] )
+                if result == 10:
+                    pass
+                elif result == 11:
+                    print "Scheduler busy...Try later or use debugging mode by entering \'debug\'"
+                elif result == 20:
+                    print "Unknown message to server"
+                elif result == 21:
+                    print "Unknown event type to server"
+                elif result == 22:
+                    print "Unknown schedule method to server"
+                elif result == 23:
+                    print "Not enough argument"
+                else:
+                    print "Unknown response from server"
             else:
                 print 'Unknown command'
 
diff --git a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
index b3618dd..31a4084 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
@@ -37,7 +37,7 @@
         self.outgoingLinks = []
 
     def __str__( self ):
-        return "name: " + self.name + ", dpid: " + self.dpid
+        return "name: " + self.name + ", dpid: " + self.dpid + ", status: " + self.status
 
 class Host( NetworkElement ):
     def __init__( self, index, name, id, mac, device, devicePort, vlan, ipAddresses ):
@@ -53,7 +53,7 @@
         self.handle = None
 
     def __str__( self ):
-        return "name: " + self.name + ", mac: " + self.mac + ", device: " + self.device.dpid + ", ipAddresses: " + str( self.ipAddresses )
+        return "name: " + self.name + ", mac: " + self.mac + ", device: " + self.device.dpid + ", ipAddresses: " + str( self.ipAddresses ) + ", status: " + self.status
 
     def setHandle( self, handle ):
         self.handle = handle
@@ -71,7 +71,7 @@
         self.portB = portB
 
     def __str__( self ):
-        return self.deviceA.dpid + "/" + self.portA + " - " + self.deviceB.dpid + "/" + self.portB
+        return self.deviceA.dpid + "/" + self.portA + " - " + self.deviceB.dpid + "/" + self.portB + ", status: " + self.status
 
     def setBackwardLink( self, link ):
         self.backwardLink = link
diff --git a/TestON/tests/CHOTestMonkey/dependencies/elements/ONOSElement.py b/TestON/tests/CHOTestMonkey/dependencies/elements/ONOSElement.py
index 6831811..e9dff29 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/elements/ONOSElement.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/elements/ONOSElement.py
@@ -33,7 +33,7 @@
         self.default = ''
         self.type = 'INTENT'
         self.id = id
-        self.expectedState = 'INSTALLED'
+        self.expectedState = 'UNKNOWN'
 
     def isHostIntent( self ):
         return self.type == 'INTENT_HOST'
@@ -47,12 +47,6 @@
     def isInstalled( self ):
         return self.expectedState == 'INSTALLED'
 
-    def setFailed( self ):
-        self.expectedState = 'FAILED'
-
-    def setInstalled( self ):
-        self.expectedState = 'INSTALLED'
-
 class HostIntent( Intent ):
     def __init__( self, id, hostA, hostB ):
         Intent.__init__( self, id )
@@ -62,6 +56,22 @@
         self.deviceA = hostA.device
         self.deviceB = hostB.device
 
+    def setWithdrawn( self ):
+        self.expectedState = 'WITHDRAWN'
+        if self.hostB in self.hostA.correspondents:
+            self.hostA.correspondents.remove( self.hostB )
+        if self.hostA in self.hostB.correspondents:
+            self.hostB.correspondents.remove( self.hostA )
+
+    def setFailed( self ):
+        self.expectedState = 'FAILED'
+
+    def setInstalled( self ):
+        if self.expectedState == 'UNKNOWN':
+            self.hostA.correspondents.append( self.hostB )
+            self.hostB.correspondents.append( self.hostA )
+        self.expectedState = 'INSTALLED'
+
     def __str__( self ):
         return "ID: " + self.id
 
@@ -72,5 +82,22 @@
         self.deviceA = deviceA
         self.deviceB = deviceB
 
+    def setWithdrawn( self ):
+        self.expectedState = 'WITHDRAWN'
+        for hostA in self.deviceA.hosts:
+            for hostB in self.deviceB.hosts:
+                if hostB in hostA.correspondents:
+                    hostA.correspondents.remove( hostB )
+
+    def setFailed( self ):
+        self.expectedState = 'FAILED'
+
+    def setInstalled( self ):
+        if self.expectedState == 'UNKNOWN':
+            for hostA in self.deviceA.hosts:
+                for hostB in self.deviceB.hosts:
+                    hostA.correspondents.append( hostB )
+        self.expectedState = 'INSTALLED'
+
     def __str__( self ):
         return "ID: " + self.id
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
index de5fd48..4283ff6 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
@@ -11,6 +11,47 @@
         # The index of the ONOS CLI that is going to run the command
         self.CLIIndex = 0
 
+    def getRandomCorrespondent( self, hostA, connected=True ):
+        import random
+        if connected:
+            candidates = hostA.correspondents
+        else:
+            candidates = [ host for host in main.hosts if host not in hostA.correspondents and host != hostA ]
+        if len( candidates ) == 0:
+            return None
+        hostB = random.sample( candidates, 1 )[0]
+        return hostB
+
+    def getRandomHostPair( self, connected=True ):
+        import random
+        candidateDict = {}
+        with main.variableLock:
+            for host in main.hosts:
+                correspondent = self.getRandomCorrespondent( host, connected=connected )
+                if correspondent != None:
+                    candidateDict[ host ] = correspondent
+            if candidateDict == {}:
+                return None
+            hostA = random.sample( candidateDict.keys(), 1 )[0]
+            hostB = candidateDict[ hostA ]
+            return [ hostA, hostB ]
+
+    def getIntentsByType( self, intentType ):
+        intents = []
+        with main.variableLock:
+            for intent in main.intents:
+                if intent.type == intentType:
+                    intents.append( intent )
+        return intents
+
+    def getRandomIntentByType( self, intentType ):
+        import random
+        intents = self.getIntentsByType( intentType )
+        if len( intents ) == 0:
+            return None
+        intent = random.sample( intents, 1 )[ 0 ]
+        return intent
+
 class HostIntentEvent( IntentEvent ):
     def __init__( self ):
         IntentEvent.__init__( self )
@@ -22,7 +63,7 @@
 
     def startEvent( self, args ):
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             if self.typeIndex == EventType().APP_INTENT_HOST_ADD or self.typeIndex == EventType().APP_INTENT_HOST_DEL:
                 if len( args ) < 3:
                     main.log.warn( "%s - Not enough arguments: %s" % ( self.typeString, args ) )
@@ -30,23 +71,39 @@
                 elif len( args ) > 3:
                     main.log.warn( "%s - Too many arguments: %s" % ( self.typeString, args ) )
                     return EventStates().ABORT
-                else:
-                    if args[ 0 ] == args[ 1 ]:
-                        main.log.warn( "%s - invalid argument: %s" % ( self.typeString, index ) )
+                try:
+                    if args[ 0 ] == 'random' or args[ 1 ] == 'random':
+                        if self.typeIndex == EventType().APP_INTENT_HOST_ADD:
+                            hostPairRandom = self.getRandomHostPair( connected=False )
+                            if hostPairRandom == None:
+                                main.log.warn( "All host pairs are connected, aborting event" )
+                                return EventStates().ABORT
+                            self.hostA = hostPairRandom[ 0 ]
+                            self.hostB = hostPairRandom[ 1 ]
+                        elif self.typeIndex == EventType().APP_INTENT_HOST_DEL:
+                            intent = self.getRandomIntentByType( 'INTENT_HOST' )
+                            if intent == None:
+                                main.log.warn( "No host intent for deletion, aborting event" )
+                                return EventStates().ABORT
+                            self.hostA = intent.hostA
+                            self.hostB = intent.hostB
+                    elif args[ 0 ] == args[ 1 ]:
+                        main.log.warn( "%s - invalid argument: %s, %s" % ( self.typeString, args[ 0 ], args[ 1 ] ) )
                         return EventStates().ABORT
-                    for host in main.hosts:
-                        if host.name == args[ 0 ]:
-                            self.hostA = host
-                        elif host.name == args[ 1 ]:
-                            self.hostB = host
-                        if self.hostA != None and self.hostB != None:
-                            break
-                    if self.hostA == None:
-                        main.log.warn( "Host %s does not exist: " % ( args[ 0 ] ) )
-                        return EventStates().ABORT
-                    if self.hostB == None:
-                        main.log.warn( "Host %s does not exist: " % ( args[ 1 ] ) )
-                        return EventStates().ABORT
+                    else:
+                        for host in main.hosts:
+                            if host.name == args[ 0 ]:
+                                self.hostA = host
+                            elif host.name == args[ 1 ]:
+                                self.hostB = host
+                            if self.hostA != None and self.hostB != None:
+                                break
+                        if self.hostA == None:
+                            main.log.warn( "Host %s does not exist: " % ( args[ 0 ] ) )
+                            return EventStates().ABORT
+                        if self.hostB == None:
+                            main.log.warn( "Host %s does not exist: " % ( args[ 1 ] ) )
+                            return EventStates().ABORT
                     index = int( args[ 2 ] )
                     if index < 1 or index > int( main.numCtrls ):
                         main.log.warn( "%s - invalid argument: %s" % ( self.typeString, index ) )
@@ -56,6 +113,9 @@
                         return EventStates().ABORT
                     self.CLIIndex = index
                     return self.startHostIntentEvent()
+                except Exception:
+                    main.log.warn( "Caught exception, aborting event" )
+                    return EventStates().ABORT
 
 class AddHostIntent( HostIntentEvent ):
     """
@@ -67,30 +127,35 @@
         self.typeIndex= int( main.params[ 'EVENT' ][ self.__class__.__name__ ][ 'typeIndex' ] )
 
     def startHostIntentEvent( self ):
-        assert self.hostA != None and self.hostB != None
-        # Check whether there already exists some intent for the host pair
-        # For now we should avoid installing overlapping intents
-        for intent in main.intents:
-            if not intent.type == 'INTENT_HOST':
-                continue
-            if intent.hostA == self.hostA and intent.hostB == self.hostB or\
-            intent.hostB == self.hostA and intent.hostA == self.hostB:
-                main.log.warn( self.typeString + " - find an exiting intent for the host pair, abort installation" )
-                return EventStates().ABORT
-        controller = main.controllers[ self.CLIIndex - 1 ]
-        with controller.CLILock:
-            id = controller.CLI.addHostIntent( self.hostA.id, self.hostB.id )
-        if id == None:
-            main.log.warn( self.typeString + " - add host intent failed" )
-            return EventStates().FAIL
-        with main.variableLock:
-            newHostIntent = HostIntent( id, self.hostA, self.hostB )
-            main.intents.append( newHostIntent )
-            # Update host connectivity status
-            # TODO: should we check whether hostA and hostB are already correspondents?
-            self.hostB.correspondents.append( self.hostA )
-            self.hostA.correspondents.append( self.hostB )
-        return EventStates().PASS
+        try:
+            assert self.hostA != None and self.hostB != None
+            # Check whether there already exists some intent for the host pair
+            # For now we should avoid installing overlapping intents
+            for intent in main.intents:
+                if not intent.type == 'INTENT_HOST':
+                    continue
+                if intent.hostA == self.hostA and intent.hostB == self.hostB or\
+                intent.hostB == self.hostA and intent.hostA == self.hostB:
+                    main.log.warn( self.typeString + " - find an exiting intent for the host pair, abort installation" )
+                    return EventStates().ABORT
+            main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.hostA.name, self.hostB.name, self.CLIIndex ) )
+            controller = main.controllers[ self.CLIIndex - 1 ]
+            with controller.CLILock:
+                id = controller.CLI.addHostIntent( self.hostA.id, self.hostB.id )
+            if id == None:
+                main.log.warn( self.typeString + " - add host intent failed" )
+                return EventStates().FAIL
+            with main.variableLock:
+                newHostIntent = HostIntent( id, self.hostA, self.hostB )
+                if self.hostA.isDown() or self.hostA.isRemoved() or self.hostB.isDown() or self.hostB.isRemoved():
+                    newHostIntent.setFailed()
+                else:
+                    newHostIntent.setInstalled()
+                main.intents.append( newHostIntent )
+            return EventStates().PASS
+        except Exception:
+            main.log.warn( "Caught exception, aborting event" )
+            return EventStates().ABORT
 
 class DelHostIntent( HostIntentEvent ):
     """
@@ -102,30 +167,33 @@
         self.typeIndex= int( main.params[ 'EVENT' ][ self.__class__.__name__ ][ 'typeIndex' ] )
 
     def startHostIntentEvent( self ):
-        assert self.hostA != None and self.hostB != None
-        targetIntent = None
-        for intent in main.intents:
-            if not intent.type == 'INTENT_HOST':
-                continue
-            if intent.hostA == self.hostA and intent.hostB == self.hostB or\
-            intent.hostB == self.hostA and intent.hostA == self.hostB:
-                targetIntent = intent
-                break
-        if targetIntent == None:
-            main.log.warn( self.typeString + " - intent does not exist" )
-            return EventStates().FAIL
-        controller = main.controllers[ self.CLIIndex - 1 ]
-        with controller.CLILock:
-            result = controller.CLI.removeIntent( targetIntent.id, purge=True )
-        if result == None or result == main.FALSE:
-            main.log.warn( self.typeString + " - delete host intent failed" )
-            return EventStates().FAIL
-        with main.variableLock:
-            main.intents.remove( targetIntent )
-            # Update host connectivity status
-            self.hostB.correspondents.remove( self.hostA )
-            self.hostA.correspondents.remove( self.hostB )
-        return EventStates().PASS
+        try:
+            assert self.hostA != None and self.hostB != None
+            targetIntent = None
+            for intent in main.intents:
+                if not intent.type == 'INTENT_HOST':
+                    continue
+                if intent.hostA == self.hostA and intent.hostB == self.hostB or\
+                intent.hostB == self.hostA and intent.hostA == self.hostB:
+                    targetIntent = intent
+                    break
+            if targetIntent == None:
+                main.log.warn( self.typeString + " - intent does not exist" )
+                return EventStates().FAIL
+            main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.hostA.name, self.hostB.name, self.CLIIndex ) )
+            controller = main.controllers[ self.CLIIndex - 1 ]
+            with controller.CLILock:
+                result = controller.CLI.removeIntent( targetIntent.id, purge=True )
+            if result == None or result == main.FALSE:
+                main.log.warn( self.typeString + " - delete host intent failed" )
+                return EventStates().FAIL
+            with main.variableLock:
+                targetIntent.setWithdrawn()
+                main.intents.remove( targetIntent )
+            return EventStates().PASS
+        except Exception:
+            main.log.warn( "Caught exception, aborting event" )
+            return EventStates().ABORT
 
 class PointIntentEvent( IntentEvent ):
     def __init__( self ):
@@ -138,28 +206,47 @@
 
     def startEvent( self, args ):
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             if self.typeIndex == EventType().APP_INTENT_POINT_ADD or self.typeIndex == EventType().APP_INTENT_POINT_DEL:
                 if len( args ) < 3:
                     main.log.warn( "%s - Not enough arguments: %s" % ( self.typeString, args ) )
                     return EventStates().ABORT
-                elif len( args ) > 3:
+                elif len( args ) > 4:
                     main.log.warn( "%s - Too many arguments: %s" % ( self.typeString, args ) )
                     return EventStates().ABORT
-                else:
-                    for device in main.devices:
-                        if device.name == args[ 0 ]:
-                            self.deviceA = device
-                        elif device.name == args[ 1 ]:
-                            self.deviceB = device
-                        if self.deviceA != None and self.deviceB != None:
-                            break
-                    if self.deviceA == None:
-                        main.log.warn( "Device %s does not exist: " % ( args[ 0 ] ) )
+                try:
+                    if args[ 0 ] == 'random' or args[ 1 ] == 'random':
+                        if self.typeIndex == EventType().APP_INTENT_POINT_ADD:
+                            hostPairRandom = self.getRandomHostPair( connected=False )
+                            if hostPairRandom == None:
+                                main.log.warn( "All host pairs are connected, aborting event" )
+                                return EventStates().ABORT
+                            self.deviceA = hostPairRandom[ 0 ].device
+                            self.deviceB = hostPairRandom[ 1 ].device
+                        elif self.typeIndex == EventType().APP_INTENT_POINT_DEL:
+                            intent = self.getRandomIntentByType( 'INTENT_POINT' )
+                            if intent == None:
+                                main.log.warn( "No point intent for deletion, aborting event" )
+                                return EventStates().ABORT
+                            self.deviceA = intent.deviceA
+                            self.deviceB = intent.deviceB
+                    elif args[ 0 ] == args[ 1 ]:
+                        main.log.warn( "%s - invalid argument: %s" % ( self.typeString, args[ 0 ], args[ 1 ] ) )
                         return EventStates().ABORT
-                    if self.deviceB == None:
-                        main.log.warn( "Device %s does not exist: " % ( args[ 1 ] ) )
-                        return EventStates().ABORT
+                    else:
+                        for device in main.devices:
+                            if device.name == args[ 0 ]:
+                                self.deviceA = device
+                            elif device.name == args[ 1 ]:
+                                self.deviceB = device
+                            if self.deviceA != None and self.deviceB != None:
+                                break
+                        if self.deviceA == None:
+                            main.log.warn( "Device %s does not exist: " % ( args[ 0 ] ) )
+                            return EventStates().ABORT
+                        if self.deviceB == None:
+                            main.log.warn( "Device %s does not exist: " % ( args[ 1 ] ) )
+                            return EventStates().ABORT
                     index = int( args[ 2 ] )
                     if index < 1 or index > int( main.numCtrls ):
                         main.log.warn( "%s - invalid argument: %s" % ( self.typeString, index ) )
@@ -168,7 +255,20 @@
                         main.log.warn( self.typeString + " - invalid argument: onos %s is down" % ( controller.index ) )
                         return EventStates().ABORT
                     self.CLIIndex = index
-                    return self.startPointIntentEvent()
+                    if len( args ) == 4 and args[ 3 ] == 'bidirectional':
+                        # Install point intents for both directions
+                        resultA = self.startPointIntentEvent()
+                        [ self.deviceA, self.deviceB ] = [ self.deviceB, self.deviceA ]
+                        resultB = self.startPointIntentEvent()
+                        if resultA == EventStates().PASS and resultB == EventStates().PASS:
+                            return EventStates().PASS
+                        else:
+                            return EventStates().FAIL
+                    else:
+                        return self.startPointIntentEvent()
+                except Exception:
+                    main.log.warn( "Caught exception, aborting event" )
+                    return EventStates().ABORT
 
 class AddPointIntent( PointIntentEvent ):
     """
@@ -180,39 +280,42 @@
         self.typeIndex= int( main.params[ 'EVENT' ][ self.__class__.__name__ ][ 'typeIndex' ] )
 
     def startPointIntentEvent( self ):
-        assert self.deviceA != None and self.deviceB != None
-        controller = main.controllers[ self.CLIIndex - 1 ]
-        # TODO: the following check only work when we use default port number for point intents
-        # Check whether there already exists some intent for the device pair
-        # For now we should avoid installing overlapping intents
-        for intent in main.intents:
-            if not intent.type == 'INTENT_POINT':
-                continue
-            if intent.deviceA == self.deviceA and intent.deviceB == self.deviceB:
-                main.log.warn( self.typeString + " - find an exiting intent for the device pair, abort installation" )
-                return EventStates().ABORT
-        controller = main.controllers[ self.CLIIndex - 1 ]
-        with controller.CLILock:
-            # TODO: handle the case that multiple hosts attach to one device
-            srcMAC = ""
-            dstMAC = ""
-            if len( self.deviceA.hosts ) > 0:
-                srcMAC = self.deviceA.hosts[ 0 ].mac
-            if len( self.deviceB.hosts ) > 0:
-                dstMAC = self.deviceB.hosts[ 0 ].mac
-            id = controller.CLI.addPointIntent( self.deviceA.dpid, self.deviceB.dpid,
-                                                1, 1, '', srcMAC, dstMAC )
-        if id == None:
-            main.log.warn( self.typeString + " - add point intent failed" )
-            return EventStates().FAIL
-        with main.variableLock:
-            newPointIntent = PointIntent( id, self.deviceA, self.deviceB )
-            main.intents.append( newPointIntent )
-            # Update host connectivity status
-            for hostA in self.deviceA.hosts:
-                for hostB in self.deviceB.hosts:
-                    hostA.correspondents.append( hostB )
-        return EventStates().PASS
+        try:
+            assert self.deviceA != None and self.deviceB != None
+            controller = main.controllers[ self.CLIIndex - 1 ]
+            # TODO: support multiple hosts under one device
+            # Check whether there already exists some intent for the device pair
+            # For now we should avoid installing overlapping intents
+            for intent in main.intents:
+                if not intent.type == 'INTENT_POINT':
+                    continue
+                if intent.deviceA == self.deviceA and intent.deviceB == self.deviceB:
+                    main.log.warn( self.typeString + " - find an exiting intent for the device pair, abort installation" )
+                    return EventStates().ABORT
+            main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.deviceA.name, self.deviceB.name, self.CLIIndex ) )
+            controller = main.controllers[ self.CLIIndex - 1 ]
+            with controller.CLILock:
+                srcMAC = ""
+                dstMAC = ""
+                if len( self.deviceA.hosts ) > 0:
+                    srcMAC = self.deviceA.hosts[ 0 ].mac
+                if len( self.deviceB.hosts ) > 0:
+                    dstMAC = self.deviceB.hosts[ 0 ].mac
+                id = controller.CLI.addPointIntent( self.deviceA.dpid, self.deviceB.dpid, 1, 1, '', srcMAC, dstMAC )
+            if id == None:
+                main.log.warn( self.typeString + " - add point intent failed" )
+                return EventStates().FAIL
+            with main.variableLock:
+                newPointIntent = PointIntent( id, self.deviceA, self.deviceB )
+                if self.deviceA.isDown() or self.deviceB.isDown() or self.deviceA.isRemoved() or self.deviceB.isRemoved():
+                    newPointIntent.setFailed()
+                else:
+                    newPointIntent.setInstalled()
+                main.intents.append( newPointIntent )
+            return EventStates().PASS
+        except Exception:
+            main.log.warn( "Caught exception, aborting event" )
+            return EventStates().ABORT
 
 class DelPointIntent( PointIntentEvent ):
     """
@@ -224,27 +327,29 @@
         self.typeIndex= int( main.params[ 'EVENT' ][ self.__class__.__name__ ][ 'typeIndex' ] )
 
     def startPointIntentEvent( self ):
-        assert self.deviceA != None and self.deviceB != None
-        targetIntent = None
-        for intent in main.intents:
-            if not intent.type == 'INTENT_POINT':
-                continue
-            if intent.deviceA == self.deviceA and intent.deviceB == self.deviceB:
-                targetIntent = intent
-                break
-        if targetIntent == None:
-            main.log.warn( self.typeString + " - intent does not exist" )
-            return EventStates().FAIL
-        controller = main.controllers[ self.CLIIndex - 1 ]
-        with controller.CLILock:
-            result = controller.CLI.removeIntent( targetIntent.id, purge=True )
-        if result == None or result == main.FALSE:
-            main.log.warn( self.typeString + " - delete host intent failed" )
-            return EventStates().FAIL
-        with main.variableLock:
-            main.intents.remove( targetIntent )
-            # Update host connectivity status
-            for hostA in self.deviceA.hosts:
-                for hostB in self.deviceB.hosts:
-                    hostA.correspondents.remove( hostB )
-        return EventStates().PASS
+        try:
+            assert self.deviceA != None and self.deviceB != None
+            targetIntent = None
+            for intent in main.intents:
+                if not intent.type == 'INTENT_POINT':
+                    continue
+                if intent.deviceA == self.deviceA and intent.deviceB == self.deviceB:
+                    targetIntent = intent
+                    break
+            if targetIntent == None:
+                main.log.warn( self.typeString + " - intent does not exist" )
+                return EventStates().FAIL
+            main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.deviceA.name, self.deviceB.name, self.CLIIndex ) )
+            controller = main.controllers[ self.CLIIndex - 1 ]
+            with controller.CLILock:
+                result = controller.CLI.removeIntent( targetIntent.id, purge=True )
+            if result == None or result == main.FALSE:
+                main.log.warn( self.typeString + " - delete point intent failed" )
+                return EventStates().FAIL
+            with main.variableLock:
+                targetIntent.setWithdrawn()
+                main.intents.remove( targetIntent )
+            return EventStates().PASS
+        except Exception:
+            main.log.warn( "Caught exception, aborting event" )
+            return EventStates().ABORT
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index fcbf23d..fa42e12 100755
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -13,7 +13,7 @@
 
     def startEvent( self, args ):
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            main.log.info( "Event recorded: {} {}".format( self.typeIndex, self.typeString ) )
             result = self.startCheckEvent()
             return result
 
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
index 8ec62a1..ccab8a1 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
@@ -19,7 +19,7 @@
         args are the names of the two link ends, e.g. ['s1', 's2']
         """
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             if len( args ) < 2:
                 main.log.warn( "%s - Not enough arguments: %s" % ( self.typeString, args ) )
                 return EventStates().ABORT
@@ -84,6 +84,7 @@
             elif self.linkA.isRemoved() or self.linkB.isRemoved():
                 main.log.warn( "Link Down - link has been removed" )
                 return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {} {}".format( self.typeIndex, self.typeString, self.linkA.deviceA.name, self.linkA.deviceB.name ) )
         with main.mininetLock:
             '''
             result = main.Mininet1.link( END1=self.linkA.deviceA.name,
@@ -118,6 +119,7 @@
             if self.linkA.isRemoved() or self.linkB.isRemoved():
                 main.log.warn( "Link Up - link has been removed" )
                 return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {} {}".format( self.typeIndex, self.typeString, self.linkA.deviceA.name, self.linkA.deviceB.name ) )
         with main.mininetLock:
             '''
             result = main.Mininet1.link( END1=self.linkA.deviceA.name,
@@ -147,7 +149,7 @@
         args are the names of the device, e.g. 's1'
         """
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             if len( args ) < 1:
                 main.log.warn( "%s - Not enough arguments: %s" % ( self.typeString, args ) )
                 return EventStates().ABORT
@@ -199,6 +201,7 @@
             if self.device.isRemoved():
                 main.log.warn( "Device Down - device has been removed" )
                 return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {}".format( self.typeIndex, self.typeString, self.device.name ) )
         with main.mininetLock:
             result = main.Mininet1.delSwitch( self.device.name )
         if not result:
@@ -232,6 +235,7 @@
                 main.log.warn( "Device Up - device already up" )
                 return EventStates().ABORT
         # Re-add the device
+        main.log.info( "Event recorded: {} {} {}".format( self.typeIndex, self.typeString, self.device.name ) )
         with main.mininetLock:
             result = main.Mininet1.addSwitch( self.device.name, dpid=self.device.dpid[3:] )
         if not result:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/ONOSEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/ONOSEvent.py
index f4e2a89..28960d2 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/ONOSEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/ONOSEvent.py
@@ -11,7 +11,7 @@
 
     def startEvent( self, args ):
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             result = EventStates().PASS
             if self.typeIndex == EventType().ONOS_ONOS_DOWN or self.typeIndex == EventType().ONOS_ONOS_UP:
                 if len( args ) < 1:
@@ -42,6 +42,7 @@
             if not main.controllers[ self.ONOSIndex - 1 ].isUp():
                 main.log.warn( "ONOS Down - ONOS already down" )
                 return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {}".format( self.typeIndex, self.typeString, self.ONOSIndex ) )
         with main.ONOSbenchLock:
             result = main.ONOSbench.onosStop( main.controllers[ self.ONOSIndex - 1 ].ip )
         if not result:
@@ -63,6 +64,7 @@
             if main.controllers[ self.ONOSIndex - 1 ].isUp():
                 main.log.warn( "ONOS Up - ONOS already up" )
                 return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {}".format( self.typeIndex, self.typeString, self.ONOSIndex ) )
         with main.ONOSbenchLock:
             startResult = main.ONOSbench.onosStart( main.controllers[ self.ONOSIndex - 1 ].ip )
         if not startResult:
@@ -92,7 +94,7 @@
 
     def startEvent( self, args ):
         with self.eventLock:
-            main.log.info( "%s - starting event" % ( self.typeString ) )
+            #main.log.info( "%s - starting event" % ( self.typeString ) )
             result = self.startCfgEvent( args )
             return result
 
@@ -121,6 +123,7 @@
         if index == -1:
             main.log.warn( "%s - No available controllers" %s ( self.typeString ) )
             return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.component, self.propName, self.value ) )
         controller = main.controllers[ index - 1 ]
         with controller.CLILock:
             result = controller.CLI.setCfg( component=self.component,
@@ -158,6 +161,7 @@
         if index == -1:
             main.log.warn( "%s - No available controllers" %s ( self.typeString ) )
             return EventStates().ABORT
+        main.log.info( "Event recorded: {} {} {} {} {}".format( self.typeIndex, self.typeString, self.component, self.propName, self.value ) )
         controller = main.controllers[ index - 1 ]
         with controller.CLILock:
             result = controller.CLI.setCfg( component=self.component,
@@ -184,6 +188,7 @@
             if index == -1:
                 main.log.warn( "%s - No available controllers" %s ( self.typeString ) )
                 return EventStates().ABORT
+            main.log.info( "Event recorded: {} {}".format( self.typeIndex, self.typeString ) )
             controller = main.controllers[ index - 1 ]
             with controller.CLILock:
                 result = controller.CLI.balanceMasters()
diff --git a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.params b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.params
index 34dba48..89202a5 100755
--- a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.params
+++ b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.params
@@ -5,14 +5,15 @@
 #CASE1: Compile ONOS and push it to the test machines
 #CASE2: Discovery the topology using BGPLS
 #CASE3: Addition of new Node to existing topology
-#CASE4: Deletion of Node
-#Case5: Uninstalling the app
+#CASE4: Verification of Links thats is discovered"
+#CASE5: Deletion of Links
+#Case6: Uninstalling the app
 
 
-    <testcases>1,2,3,4,5</testcases>
+    <testcases>1,2,3,4,5,6</testcases>
 
     <DEPENDENCY>
-        <path>/tests/FUNCbgpls/Dependencies/</path>
+        <path>/tests/FUNC/FUNCbgpls/Dependencies/</path>
     </DEPENDENCY>
 
     <ENV>
diff --git a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
index a56c5c4..db60aad 100755
--- a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
+++ b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
@@ -8,8 +8,9 @@
 CASE1: Compile ONOS and push it to the test machines
 CASE2: Discovery the topology using BGPLS
 CASE3: Addition of new Node to existing topology
-CASE4: Deletion of Node
-Case5: Uninstalling the app
+CASE4: Verification of Links thats is discovered"
+CASE5: Deletion of Links
+Case6: Uninstalling the app
 
 
 """
@@ -275,7 +276,7 @@
         bgplsConfig.Comments()
 
         main.Scapy1.handle.sendline( "\x03" )
-        time.sleep(90) #This Sleep time gives time for the socket to close.
+        time.sleep( 90 ) #This Sleep time gives time for the socket to close.
 
 
 
@@ -365,24 +366,23 @@
             stepResult = main.FALSE
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
-                                 onpass="Node " + str( Ne_id[1][3] ) + " update  sucess",
-                                 onfail="Node " + str( Ne_id[1][3]) + " update failed" )
+                                 onpass="Node " + str( Ne_id[ 1 ][ 3 ] ) + " update  sucess",
+                                 onfail="Node " + str( Ne_id[ 1 ][ 3 ] ) + " update failed" )
         bgplsConfig.Comments()
         main.log.info( "Kill Scapy process" )
         bgplsConfig.Comments()
         main.Scapy1.handle.sendline( "\x03" )
-
+        time.sleep( 90 ) #This Sleep time gives time for the socket to close.
 
 
     def CASE4( self, main ):
         """
-        Deletion of  Node
+        Verification of Links in existing topology
         """
-        import os , sys
-        import re
+        import json
         import time
-        main.case( "TestCase 4: Deletion of Node from existing Topology" )
-
+        import os
+        main.case( "Testcase 4: Verification of Links thats is discovered" )
         try:
             from tests.FUNC.FUNCbgpls.dependencies.Nbdata import BgpLs
         except ImportError:
@@ -392,30 +392,14 @@
             main.exit()
 
         bgplsConfig = BgpLs()
-        Ne_id = bgplsConfig.Constants()
         app = bgplsConfig.apps()
         main.CLIs = []
         main.nodes = []
         main.numCtrls= 1
-
-        bgplsConfig.Comments()
-        main.log.info( "Blocked due to this defect : ONOS-3920 " )
-        bgplsConfig.Comments()
-
-        '''
         ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
         scapy_ip = os.getenv(main.params ['SCAPY'] ['HOSTNAMES'] )
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        cellAppString= main.params[ 'ENV' ][ 'cellApps' ]
-        httpport = main.params['HTTP']['port']
-        path = main.params['HTTP']['path']
-        bgplsConfig = BgpLs()
         bgplsConfig.ipValue(ipList,scapy_ip)
 
-        main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName,
-                                       scapy_ip,
-                                       cellAppString, ipList , onosUser="karaf" )
-
         for i in range( 1, main.numCtrls + 1 ):
             try:
                 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
@@ -424,93 +408,120 @@
             except AttributeError:
                 break
 
-        main.step( "Apply cell to environment" )
         bgplsConfig.Comments()
-        cellResult = main.ONOSbench.setCell( cellName )
-
-        bgplsConfig.Comments()
-        main.log.info( "Sending BGPLS information " )
+        main.log.info( "Sending BGPLS Link information Packet " )
         bgplsConfig.Comments()
 
-
-        main.Scapy1.handle.sendline( "sudo python  OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py" )
-        #main.Scapy1.handle.expect( "sdn:" )
-        #main.Scapy1.handle.sendline( "rocks" )
-
-
+        main.Scapy1.handle.sendline( "sudo python  OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py" )
         bgplsConfig.Comments()
         main.log.info( "Enable BGPlS plugin in ONOS" )
         bgplsConfig.Comments()
 
+        main.step( "UnInstall onos-app-bgp" )
+        installResults = main.ONOScli1.deactivateApp( app[ 0 ] )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Uninstall  onos-app-bgp successful",
+                                 onfail="Uninstall  onos-app-bgp failed" )
 
-        cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address)
-
-        main.step( "Getting connected to ONOS" )
-        utilities.assert_equals( expect=main.TRUE, actual=cliResults,
-                                 onpass="ONOS cli startup successful",
-                                 onfail="ONOS cli startup failed" )
-        installResults = main.ONOScli1.activateApp( app[0])
-
+        installResults = main.ONOScli1.activateApp( app[ 0 ])
         main.step( "Install onos-app-bgp" )
         utilities.assert_equals( expect=main.TRUE, actual=installResults,
                                  onpass="Install onos-app-bgp successful",
                                  onfail="Install onos-app-bgp failed" )
-
-        main.step( "Install onos-app-bgpflow" )
-        installResults = main.ONOScli1.activateApp( app[1] )
-        utilities.assert_equals( expect=main.TRUE, actual=installResults,
-                                 onpass="Install onos-app-bgpflow successful",
-                                 onfail="Install onos-app-bgpflow failed" )
-
-
-        bgpls_post = bgplsConfig.DictoJson()
-
         bgplsConfig.Comments()
-        main.log.info( "BGPLS RestConf input" )
+        main.log.info( "Checking the Link Discovery Status" )
         bgplsConfig.Comments()
+        time.sleep( 120 )   # Time taken to discovery the links
+        response = main.ONOScli1.links()
+        linksResp = json.loads( response )
+        check_link = bgplsConfig.checkLinks( linksResp )
 
-        print (bgpls_post)
-        main.ONOSrest.user_name = "karaf"
-        main.ONOSrest.pwd = "karaf"
-        Poststatus, result = main.ONOSrest.send( ipList,httpport,'', path + 'v1/network/configuration/',
-                                                 'POST', None, bgpls_post, debug=True )
-
-        main.step( "Configure BGP through RESTCONF" )
-        utilities.assert_equals(
-                expect='200',
-                actual=Poststatus,
-                onpass="Post Port Success",
-                onfail="Post Port Failed " + str( Poststatus ) + "," + str( result ) )
-
-
-        bgplsConfig.Comments()
-        main.log.info( "Check Network devices is deleted from  ONOS " )
-        bgplsConfig.Comments()
-        time.sleep(15)
-
-        response = main.ONOScli1.devices()
-
-        main.step( "Check whehther Node is deleted successfully" )
-
-        if response.find(Ne_id[3]) != -1:
-            stepResult = main.TRUE
-        else:
-            stepResult = main.FALSE
-        utilities.assert_equals( expect=main.FALSE,
-                                 actual=stepResult,
-                                 onpass="Node " + str( Ne_id[3] ) + " Deletion sucess",
-                                 onfail="Node " + str( Ne_id[3] ) + " Deletion  failed" )
-
+        if check_link == True:
+            reply_Check_Link = main.TRUE
+        utilities.assert_equals( expect= main.TRUE,
+                                     actual=reply_Check_Link ,
+                                     onpass="Link  Discovery Success.",
+                                     onfail="Link  Discovery Failed." )
         bgplsConfig.Comments()
         main.log.info( "Kill Scapy process" )
         bgplsConfig.Comments()
-
         main.Scapy1.handle.sendline( "\x03" )
-        '''
-
+        time.sleep( 90 )
 
     def CASE5( self, main ):
         """
+        Deletion of  links
+        """
+        import json
+        import time
+        import os
+        main.case( "Testcase 5: Deletion of Link in existing topology" )
+        try:
+            from tests.FUNC.FUNCbgpls.dependencies.Nbdata import BgpLs
+        except ImportError:
+            main.log.exception( "Something wrong with import file or code error." )
+            main.log.info( "Import Error, please check!" )
+            main.cleanup()
+            main.exit()
+
+        bgplsConfig = BgpLs()
+        app = bgplsConfig.apps()
+        main.CLIs = []
+        main.nodes = []
+        main.numCtrls= 1
+        ipList = os.getenv( main.params[ 'CTRL' ][ 'ip1' ] )
+        scapy_ip = os.getenv(main.params [ 'SCAPY' ] [ 'HOSTNAMES' ] )
+        bgplsConfig.ipValue(ipList,scapy_ip)
+
+        for i in range( 1, main.numCtrls + 1 ):
+            try:
+                main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
+                main.nodes.append( getattr( main, 'ONOS' + str( i ) ) )
+                ipList.append( main.nodes[ -1 ].ip_address )
+            except AttributeError:
+                break
+
+        bgplsConfig.Comments()
+        main.log.info( "Sending BGPLS Delete Link Packet " )
+        bgplsConfig.Comments()
+
+        main.Scapy1.handle.sendline( "sudo python  OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py" )
+        bgplsConfig.Comments()
+        main.log.info( "Enable BGPlS plugin in ONOS" )
+        bgplsConfig.Comments()
+
+        main.step( "UnInstall onos-app-bgp" )
+        installResults = main.ONOScli1.deactivateApp( app[ 0 ] )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Uninstall  onos-app-bgp successful",
+                                 onfail="Uninstall  onos-app-bgp failed" )
+
+        installResults = main.ONOScli1.activateApp( app[ 0 ])
+        main.step( "Install onos-app-bgp" )
+        utilities.assert_equals( expect=main.TRUE, actual=installResults,
+                                 onpass="Install onos-app-bgp successful",
+                                 onfail="Install onos-app-bgp failed" )
+        bgplsConfig.Comments()
+        main.log.info( "Checking whether the links is deleted" )
+        bgplsConfig.Comments()
+        time.sleep( 120 )  # Time taken to discovery the links
+        response = main.ONOScli1.links()
+        linksResp = json.loads( response )
+        check_link = bgplsConfig.checkLinks( linksResp )
+        if check_link == False:
+            reply_Check_Link = main.TRUE
+        utilities.assert_equals( expect= main.TRUE,
+                                     actual=reply_Check_Link ,
+                                     onpass="Link  is Deleted Successfully.",
+                                     onfail="Link  is Deletion Failed." )
+        bgplsConfig.Comments()
+        main.log.info( "Kill Scapy process" )
+        bgplsConfig.Comments()
+        main.Scapy1.handle.sendline( "\x03" )
+        time.sleep( 90 )
+
+    def CASE6( self, main ):
+        """
         Uninstalling the app
         """
         import os,sys
@@ -542,7 +553,7 @@
         bgplsConfig.ipValue(ipList,scapy_ip)
         main.ONOSbench.createCellFile( main.ONOSbench.ip_address, cellName,
                                        scapy_ip,
-                                       cellAppString, ipList , onosUser="karaf" )
+                                       cellAppString, ipList )
 
         for i in range( 1, main.numCtrls + 1 ):
             try:
@@ -574,5 +585,9 @@
                                  onpass="Uninstall  onos-app-bgp successful",
                                  onfail="Uninstall  onos-app-bgp failed" )
 
-
-
+        main.log.info( "Check for Errors or Exception End of the Script" )
+        errorLog = main.ONOSbench.logReport( main.nodes[0].ip_address, ["ERROR",\
+                                            "EXCEPT"] )
+        utilities.assert_equals( expect= 0, actual=errorLog,
+                                 onpass="No Exception or Error occured",
+                                 onfail="Exception or Error occured" )
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCbgpls/README b/TestON/tests/FUNC/FUNCbgpls/README
index 2ecb554..8974506 100755
--- a/TestON/tests/FUNC/FUNCbgpls/README
+++ b/TestON/tests/FUNC/FUNCbgpls/README
@@ -28,7 +28,7 @@
 1] We use Scapy tool, to send the BGPLS packet to ONOS.
 2] The packets are already pre-captured.
 3] ONOS reads those packet and displays the topology.
-4] We query the devices information in ONOS to check the devices/links are learn
+4] We query the devices information in ONOS to check the devices/links are learned
 
 
 Steps :
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/Topo_pkts.pcap b/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/Topo_pkts.pcap
deleted file mode 100755
index 2021f22..0000000
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/Topo_pkts.pcap
+++ /dev/null
Binary files differ
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap b/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap
new file mode 100644
index 0000000..8e3db7d
--- /dev/null
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap
Binary files differ
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
index 8a83748..5661cb8 100755
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Nbdata.py
@@ -78,3 +78,47 @@
         self.app_bgpflow = 'org.onosproject.bgpflow'
         self.list1 = [self.app_bgp,self.app_bgpflow]
         return self.list1
+
+    def checkLinks(self,linksResp):
+        #Declaring the links values
+        links = {'link1_src' : "1650.5555.0055", 'link1_dst' : "1660.6666.0066",
+             'link2_src' : "1630.3333.0033", 'link2_dst' : "1620.2222.0022",
+             'link3_src' : "1660.6666.0066", 'link3_dst' : "1650.5555.0055",
+             'link4_src' : "1630.3333.0033", 'link4_dst' : "1650.5555.0055",
+             'link5_src' : "1640.4444.0044", 'link5_dst' : "1610.1111.0011",
+             'link6_src' : "1650.5555.0055", 'link4_dst' : "1630.3333.0033",
+             'link7_src' : "1620.2222.0022", 'link4_dst' : "1630.3333.0033",
+             'link8_src' : "1620.2222.0022", 'link4_dst' : "1610.1111.0011",
+             'link9_src' : "1630.3333.0033", 'link4_dst' : "1640.4444.0044",
+             'link10_src' : "1650.5555.0055", 'link4_dst' : "1640.4444.0044",
+             'link11_src' : "1610.1111.0011", 'link4_dst' : "1640.4444.0044",
+             'link12_src' : "1640.4444.0044", 'link4_dst' : "1620.2222.0022",
+             'link13_src' : "1660.6666.0066", 'link4_dst' : "1630.3333.0033",
+             'link14_src' : "1640.4444.0044", 'link4_dst' : "1660.6666.0066",
+             'link15_src' : "1640.4444.0044", 'link4_dst' : "1630.3333.0033",
+             'link16_src' : "1610.1111.0011", 'link4_dst' : "1630.3333.0033",
+             'link17_src' : "1630.3333.0033", 'link4_dst' : "1610.1111.0011",
+             'link18_src' : "1610.1111.0011", 'link4_dst' : "1620.2222.0022",
+             'link19_src' : "1620.2222.0022", 'link4_dst' : "1640.4444.0044",
+             'link20_src' : "1630.3333.0033", 'link4_dst' : "1660.6666.0066",
+             'link21_src' : "1640.4444.0044", 'link4_dst' : "1650.5555.0055",
+             'link22_src' : "1660.6666.0066", 'link4_dst' : "1640.4444.0044"
+        }
+
+        #Comparing the Links
+        for x in xrange(22):
+            link_src_info = linksResp[x]['src']['device']
+            link_dst_info = linksResp[x]['dst']['device']
+            link_src_split = link_src_info.split("=")
+            link_src = link_src_split[4]
+            link_dst_split = link_dst_info.split("=")
+            link_dst = link_dst_split[4]
+            y = x+1
+            link_src_ref = links['link'+str(y)+'_src']
+            link_dst_ref = links['link'+str(y)+'_dst']
+            if (link_src == link_src_ref) and (link_dst == (link_dst_ref) and \
+                linksResp[x]['type'] == 'DIRECT' and linksResp[x]['state'] == \
+                'ACTIVE'):
+                return True
+            else:
+                return False
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
index abd1cfc..259f846 100755
--- a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Deletion_Node.py
@@ -18,36 +18,35 @@
 host = peerIp # Get local machine name
 port = 179                # Reserve a port for your service.
 s.bind((host, port))        # Bind to the port
-pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls_all.pcap")
-pkts[69][BGPOpen].bgp_id = peerIp
+pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap")
+time.sleep(15)
+pkts[759][BGPOpen].bgp_id = peerIp
 
 s.listen(5)                   # Now wait for client connection.
 
 print("starting Connecting to ONOS peer")
 c, addr = s.accept()     # Establish connection with client.
 print 'Got connection from ONOS :', addr
-c.send(str(pkts[69][BGPHeader])) # OPEN MESSAGE
+c.send(str(pkts[759][BGPHeader])) # OPEN MESSAGE
 c.recv(4096)
-c.send(str(pkts[71][BGPHeader]))# KEEPALIVE MESSAGE
+c.send(str(pkts[765][BGPHeader]))# KEEPALIVE MESSAGE
 c.recv(4096)
-c.send(str(pkts[72][BGPHeader]))   # UPDATE MESSAGES
-c.send(str(pkts[74][BGPHeader]))
-c.send(str(pkts[71][BGPHeader]))
+c.send(str(pkts[768][BGPHeader]))   # UPDATE MESSAGES
+c.send(str(pkts[771][BGPHeader]))
+c.send(str(pkts[773][BGPHeader]))
+c.send(str(pkts[775][BGPHeader]))
+c.send(str(pkts[778][BGPHeader]))
+c.send(str(pkts[765][BGPHeader]))
 
-time.sleep(10)               # Waiting for 120 seconds for update message.
-
-c.send(str(pkts[298][BGPHeader]))
-c.send(str(pkts[860][BGPHeader]))   # UPDATE MESSAGES with new node
-c.send(str(pkts[865][BGPHeader]))
-print ("New Node update msg sent")
-
-time.sleep(5)
-c.send(str(pkts[890][BGPHeader]))
+time.sleep(15)
+c.send(str(pkts[1168][BGPHeader]))
+c.send(str(pkts[1250][BGPHeader]))
+c.send(str(pkts[1354][BGPHeader]))
 print ("Node Delete msg sent")
 
 
 while True:
     c.recv(4096)
-    c.send(str(pkts[71][BGPHeader]))
+    c.send(str(pkts[765][BGPHeader]))
 
   # c.close()                # Close the connection
diff --git a/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py
new file mode 100755
index 0000000..03a5653
--- /dev/null
+++ b/TestON/tests/FUNC/FUNCbgpls/dependencies/Scapyfiles/Link_Update_Node.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python           # This is server.py file
+from scapy.all import *
+import socket               # Import socket module
+import time                 # Import Time module
+import sys
+import os
+
+path = os.getcwd()
+sys.path.append('OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies')   #Setting the path for BgpLS
+from Nbdata import BgpLs
+
+obj = BgpLs()
+returnlist = obj.Constants()
+peerIp = returnlist[0][0]
+
+load_contrib('bgp')
+s = socket.socket()         # Create a socket object
+host = peerIp # Get local machine name
+port = 179                # Reserve a port for your service.
+s.bind((host, port))        # Bind to the port
+pkts = rdpcap(path + "/OnosSystemTest/TestON/tests/FUNC/FUNCbgpls/dependencies/Bgpls_packets/bgpls.pcap")
+time.sleep(15)
+pkts[759][BGPOpen].bgp_id = peerIp
+
+s.listen(5)                   # Now wait for client connection.
+
+print("starting Connecting to ONOS peer")
+c, addr = s.accept()     # Establish connection with client.
+print 'Got connection from ONOS :', addr
+c.send(str(pkts[759][BGPHeader])) # OPEN MESSAGE
+c.recv(4096)
+c.send(str(pkts[765][BGPHeader]))# KEEPALIVE MESSAGE
+c.recv(4096)
+c.send(str(pkts[768][BGPHeader]))   # UPDATE MESSAGES
+c.send(str(pkts[771][BGPHeader]))
+c.send(str(pkts[773][BGPHeader]))
+c.send(str(pkts[775][BGPHeader]))
+c.send(str(pkts[778][BGPHeader]))
+c.send(str(pkts[765][BGPHeader]))
+
+while True:
+    c.recv(4096)
+    c.send(str(pkts[765][BGPHeader]))
+
+  # c.close()                # Close the connection
diff --git a/TestON/tests/FUNC/FUNCintent/FUNCintent.py b/TestON/tests/FUNC/FUNCintent/FUNCintent.py
index ba0f2a9..167a847 100644
--- a/TestON/tests/FUNC/FUNCintent/FUNCintent.py
+++ b/TestON/tests/FUNC/FUNCintent/FUNCintent.py
@@ -670,9 +670,8 @@
         stepResult = main.TRUE
         scpResult = main.TRUE
         copyResult = main.TRUE
-        i = 0
-        for cli in main.CLIs:
-            main.node = cli
+        for i in range( main.numCtrls ):
+            main.node = main.CLIs[ i ]
             ip = main.ONOSip[ i ]
             main.node.ip_address = ip
             scpResult = scpResult and main.ONOSbench.scp( main.node ,
@@ -685,7 +684,6 @@
                 stepResult =  main.TRUE and stepResult
             else:
                 stepResult = main.FALSE and stepResult
-            i += 1
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully copied remote ONOS logs",
diff --git a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py
index 51ad5b1..3824ea3 100644
--- a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py
+++ b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.py
@@ -785,9 +785,8 @@
         stepResult = main.TRUE
         scpResult = main.TRUE
         copyResult = main.TRUE
-        i = 0
-        for cli in main.CLIs2:
-            main.node = cli
+        for i in range( main.numCtrls ):
+            main.node = main.CLIs2[ i ]
             ip = main.ONOSip[ i ]
             main.node.ip_address = ip
             scpResult = scpResult and main.ONOSbench.scp( main.node ,
@@ -800,7 +799,6 @@
                 stepResult =  main.TRUE and stepResult
             else:
                 stepResult = main.FALSE and stepResult
-            i += 1
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully copied remote ONOS logs",
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
index 373f007..0976c40 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.params
@@ -14,8 +14,9 @@
     # 24 - Remove NetCfgs
     # 25 - Move network-cfg.json to onos directory for prebuild configurations
     # 26 - Check that prebuild configurations are correct
+    # 27 - Posting network configurations to the top level web resource
 
-    <testcases>1,25,2,20,11,26,21,22,23,24</testcases>
+    <testcases>1,25,2,20,11,27,26,21,22,23,24</testcases>
 
     <DEPENDENCY>
         <path>/tests/FUNC/FUNCnetCfg/dependencies/</path>
@@ -40,5 +41,6 @@
     <MININET>
         <switch>6</switch>
     </MININET>
-
+    <RETRY>5</RETRY>
+    <RetrySleep>2</RetrySleep>
 </PARAMS>
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
index 0f8812a..e311bf9 100644
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.py
@@ -48,7 +48,8 @@
             main.hostsData = {}
             main.nodes = []
             main.ONOSip = []
-
+            main.retrytimes = main.params[ 'RETRY' ]
+            main.retrysleep = main.params[ 'RetrySleep' ]
             main.ONOSip = main.ONOSbench.getOnosIps()
 
             # Assigning ONOS cli handles to a list
@@ -431,6 +432,7 @@
                 main.log.error( "ONOS NetCfg doesn't match what was sent" )
                 main.log.debug( "ONOS config: {}".format( onosCfg ) )
                 main.log.debug( "Sent config: {}".format( sentCfg ) )
+                utilities.retry( f=main.ONOSrest1.getNetCfg, retValue=False, attempts=main.retrytimes, sleep=main.retrysleep )
         utilities.assert_equals( expect=True,
                                  actual=s1Result,
                                  onpass="Net Cfg added for device s1",
@@ -460,6 +462,7 @@
                 main.log.error( "ONOS NetCfg doesn't match what was sent" )
                 main.log.debug( "ONOS config: {}".format( onosCfg ) )
                 main.log.debug( "Sent config: {}".format( sentCfg ) )
+                utilities.retry( f=main.ONOSrest1.getNetCfg, retValue=False, attempts=main.retrytimes, sleep=main.retrysleep )
         utilities.assert_equals( expect=True,
                                  actual=s3Result,
                                  onpass="Net Cfg added for device s3",
@@ -499,7 +502,6 @@
                                  onpass="Only allowed devices are in ONOS",
                                  onfail="ONOS devices doesn't match the list" +
                                         " of allowed devices" )
-
         main.step( "Check device annotations" )
         keys = [ 'name', 'owner', 'rackAddress' ]
         try:
@@ -560,6 +562,7 @@
                 main.log.error( "ONOS NetCfg doesn't match what was sent" )
                 main.log.debug( "ONOS config: {}".format( onosCfg ) )
                 main.log.debug( "Sent config: {}".format( sentCfg ) )
+                utilities.retry( f=main.ONOSrest2.getNetCfg, retValue=False, attempts=main.retrytimes, sleep=main.retrysleep )
         utilities.assert_equals( expect=True,
                                  actual=s2Result,
                                  onpass="Net Cfg added for device s2",
@@ -571,14 +574,14 @@
                    "owner": "John",
                    "allowed": False }
         main.s4Json = s4Json
-        setS4Disallow = main.ONOSrest4.setNetCfg( s4Json,
+        setS4Disallow = main.ONOSrest3.setNetCfg( s4Json,
                                                   subjectClass="devices",
                                                   subjectKey="of:0000000000000004",
                                                   configKey="basic" )
         s4Result = False
         if setS4Disallow:
             # Check what we set is what is in ONOS
-            getS4 = main.ONOSrest4.getNetCfg( subjectClass="devices",
+            getS4 = main.ONOSrest3.getNetCfg( subjectClass="devices",
                                               subjectKey="of:0000000000000004",
                                               configKey="basic" )
             onosCfg = pprint( getS4 )
@@ -589,10 +592,12 @@
                 main.log.error( "ONOS NetCfg doesn't match what was sent" )
                 main.log.debug( "ONOS config: {}".format( onosCfg ) )
                 main.log.debug( "Sent config: {}".format( sentCfg ) )
+                main.step( "Retrying main.ONOSrest3.getNetCfg" )
+                utilities.retry( f=main.ONOSrest3.getNetCfg, retValue=False, attempts=main.retrytimes, sleep=main.retrysleep )
         utilities.assert_equals( expect=True,
                                  actual=s4Result,
                                  onpass="Net Cfg added for device s4",
-                                 onfail="Net Cfg for device s3 not correctly set" )
+                                 onfail="Net Cfg for device s4 not correctly set" )
 
         main.netCfg.compareCfg( main, main.gossipTime )
 
@@ -719,7 +724,7 @@
             del s4Json['allowed']
         except KeyError:
             main.log.exception( "Key not found" )
-        setS4 = main.ONOSrest4.setNetCfg( s4Json,
+        setS4 = main.ONOSrest3.setNetCfg( s4Json,
                                           subjectClass="devices",
                                           subjectKey="of:0000000000000004",
                                           configKey="basic" )
@@ -794,10 +799,10 @@
         import json
         main.case( "Check to see if the pre-startup configurations were set, then remove their allowed status" )
         main.step( "Checking configurations for Switches 5 and 6" )
-        main.step( "ONOS should only show devices S1, S2, S4, S5, and S6" )
+        main.step( "ONOS should only show devices S1, S2, S4, and S5" ) #and S6
         devices = main.ONOSrest1.devices()
         main.log.debug( main.ONOSrest1.pprint( devices ) )
-        allowedDevices = [ "of:{}".format( str( i ).zfill( 16 ) ) for i in [ 1, 2, 4, 5, 6 ] ]
+        allowedDevices = [ "of:{}".format( str( i ).zfill( 16 ) ) for i in [ 1, 2, 4, 5 ] ] #6
         main.log.debug( allowedDevices )
         onosDevices = []
         try:
@@ -826,4 +831,61 @@
         setS1 = main.ONOSrest1.setNetCfg( s6Json,
                                           subjectClass="devices",
                                           subjectKey="of:0000000000000006",
-                                          configKey="basic" )
\ No newline at end of file
+                                          configKey="basic" )
+
+    def CASE27( self, main ):
+        """
+        1) A = get /network/configuration
+        2) Post A
+        3) Compare A with ONOS
+        4) Modify A so S6 is disallowed
+        5) Check
+
+        """
+        import json
+        pprint = main.nodes[0].pprint
+        main.case( "Posting network configurations to the top level web resource" )
+        main.step( "Get json object from Net Cfg" )
+        getinfo = main.ONOSrest1.getNetCfg( )
+        main.log.debug( getinfo )
+        main.step( "Posting json object to Net Cfg" )
+        postinfo = main.ONOSrest1.setNetCfg( json.loads( getinfo ) )
+        main.step( "Compare device with ONOS" )
+        main.netCfg.compareCfg( main )
+        main.step ( "ONOS should only show devices S1, S2, S4, S5 and S6" )
+        devices = main.ONOSrest1.devices( )
+        main.log.debug( main.ONOSrest1.pprint( devices ) )
+        allowedDevices = [ "of:{}".format( str( i ).zfill( 16 ) ) for i in [ 1, 2, 4, 5, 6 ] ]
+        onosDevices = []
+        try:
+            for sw in json.loads( devices ):
+                onosDevices.append( str( sw.get( 'id' ) ) )
+            onosDevices.sort( )
+            failMsg = "ONOS devices doesn't match the list of allowed devices. \n"
+            failMsg += "Expected devices: {}\nActual devices: {}".format( allowedDevices, onosDevices )
+        except( TypeError, ValueError ):
+            main.log.error( "Problem loading devices" )
+        utilities.assert_equals( expect=allowedDevices, actual=onosDevices,
+                                 onpass="Only allowed devices are in ONOS", onfail=failMsg )
+
+        main.step( "Modify json object so S6 is disallowed" )
+        main.s6Json = { "allowed": False }
+        s6Json = main.s6Json
+        setS6Disallow = main.ONOSrest1.setNetCfg( s6Json, subjectClass="devices",
+                                                  subjectKey="of:0000000000000006", configKey="basic" )
+        s6Result = False
+        if setS6Disallow:
+            getS6 = main.ONOSrest1.getNetCfg( subjectClass="devices",
+                                              subjectKey="of:0000000000000006", configKey="basic" )
+            onosCfg = pprint( getS6 )
+            sentCfg = pprint( s6Json )
+            if onosCfg == sentCfg:
+                s6Result = True
+            else:
+                main.log.error( "ONOS NetCfg doesn't match what was sent" )
+                main.log.debug( "ONOS config: {}".format( onosCfg ) )
+                main.log.debug( "Sent config: {}".format( sentCfg ) )
+                utilities.retry( f=main.ONOSrest1.getNetCfg, retValue=False, attempts=main.retrytimes, sleep=main.retrysleep )
+        utilities.assert_equals( expect=True, actual=s6Result,
+                                 onpass="Net Cfg added for devices s6",
+                                 onfail="Net Cfg for device s6 not correctly set" )
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
index e1e06eb..4204c78 100755
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
@@ -44,50 +44,6 @@
             </COMPONENTS>
         </ONOSrest3>
 
-        <ONOSrest4>
-            <host>OC4</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest4>
-
-        <ONOSrest5>
-            <host>OC5</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest5>
-
-        <ONOSrest6>
-            <host>OC6</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest6>
-
-        <ONOSrest7>
-            <host>OC7</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest7>
-
         <Mininet1>
             <host>OCN</host>
             <user>sdn</user>
diff --git a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
index 94fd0ef..9135daf 100644
--- a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
+++ b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.py
@@ -269,9 +269,8 @@
         stepResult = main.TRUE
         scpResult = main.TRUE
         copyResult = main.TRUE
-        i = 0
-        for cli in main.CLIs2:
-            main.node = cli
+        for i in range( main.numCtrls ):
+            main.node = main.CLIs2[ i ]
             ip = main.ONOSip[ i ]
             main.node.ip_address = ip
             scpResult = scpResult and main.ONOSbench.scp( main.node ,
@@ -284,9 +283,6 @@
                 stepResult =  main.TRUE and stepResult
             else:
                 stepResult = main.FALSE and stepResult
-            i += 1
-            if main.numCtrls == 1:
-                break
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully copied remote ONOS logs",
diff --git a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.params b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.params
index 50bb652..ee70b7b 100644
--- a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.params
+++ b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.params
@@ -4,6 +4,7 @@
     # 2 - Install ONOS
     # 10 - Start Mininet opticalTest Topology
     # 14 - Stop Mininet
+    # 16 - Balance Mastership of switches
     # 17 - Activate Flow Objectives
     # 19 - Copy karaf logs from ONOS nodes to TestON log directory
     # 21 - Run pingall to discover all hosts
@@ -12,7 +13,7 @@
     # 31 - Add and test bidirectional point intents
     # 32 - Add and test bidirectional host intents
 
-    <testcases>1,[2,10,21,22,23,31,32,14,19,2,10,21,22,23,31,32,14,19]*1,[2,10,17,21,22,23,31,32,14,19,2,10,17,21,22,23,31,32,14,19]*1</testcases>
+    <testcases>1,[2,10,21,22,23,31,32,14,19,2,10,16,21,22,23,31,32,14,19]*1,[2,10,17,21,22,23,31,32,14,19,2,10,16,17,21,22,23,31,32,14,19]*1</testcases>
 
     <SCALE>
         <size>1,3,1,3</size>
@@ -20,13 +21,11 @@
 
     <DEPENDENCY>
         <path>/tests/FUNC/FUNCoptical/dependencies/</path>
-        <wrapper1>startUp</wrapper1>
-        <wrapper2>FuncIntentFunction</wrapper2>
-        <wrapper3>topo</wrapper3>
+        <wrapper1>topo</wrapper1>
     </DEPENDENCY>
 
     <ENV>
-        <cellApps>drivers,openflow,proxyarp,mobility,optical,fwd</cellApps>
+        <cellApps>drivers,openflow,proxyarp,mobility,optical,fwd,drivers.optical</cellApps>
     </ENV>
     <GIT>
         <pull>False</pull>
@@ -35,24 +34,17 @@
 
     <SLEEP>
         <startup>15</startup>
-        <reroute>5</reroute>
-        <removeintent>10</removeintent>
         <checkintent>5</checkintent>
-        <fwd>10</fwd>
         <topoAttempts>3</topoAttempts>
     </SLEEP>
 
+    # make sure that these numbers reflect the number of switches, links, and
+    # hosts in the optical topology specified below
     <MININET>
-        <switch>7</switch>
-        <links>20</links>
+        <switch>5</switch>
+        <links>10</links>
+        <hosts>2</hosts>
+        <toponame>ectopo</toponame>
     </MININET>
 
-    # Intent tests params
-    <SDNIP>
-        <tcpProto>6</tcpProto>
-        <icmpProto>1</icmpProto>
-        <srcPort>5001</srcPort>
-        <dstPort>5001</dstPort>
-    </SDNIP>
-
 </PARAMS>
diff --git a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py
index 65c731b..2c4b0ca 100644
--- a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py
+++ b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.py
@@ -40,17 +40,14 @@
             else:
                 main.maxNodes = 0
             wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
-            wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
-            wrapperFile3 = main.params[ 'DEPENDENCY' ][ 'wrapper3' ]
             main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
             main.checkIntentSleep = int( main.params[ 'SLEEP' ][ 'checkintent' ] )
-            main.removeIntentSleep = int( main.params[ 'SLEEP' ][ 'removeintent' ] )
-            main.rerouteSleep = int( main.params[ 'SLEEP' ][ 'reroute' ] )
-            main.fwdSleep = int( main.params[ 'SLEEP' ][ 'fwd' ] )
             main.checkTopoAttempts = int( main.params[ 'SLEEP' ][ 'topoAttempts' ] )
             gitPull = main.params[ 'GIT' ][ 'pull' ]
-            main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
-            main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
+            main.switches = int( main.params[ 'MININET' ][ 'switch' ] )
+            main.links = int( main.params[ 'MININET' ][ 'links' ] )
+            main.hosts = int( main.params[ 'MININET' ][ 'hosts' ] )
+            main.opticalTopo = main.params[ 'MININET' ][ 'toponame' ]
             main.cellData = {} # For creating cell file
             main.hostsData = {}
             main.CLIs = []
@@ -66,21 +63,10 @@
                 main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
 
             # -- INIT SECTION, ONLY RUNS ONCE -- #
-            main.startUp = imp.load_source( wrapperFile1,
-                                            main.dependencyPath +
-                                            wrapperFile1 +
-                                            ".py" )
-
-            main.intentFunction = imp.load_source( wrapperFile2,
-                                            main.dependencyPath +
-                                            wrapperFile2 +
-                                            ".py" )
-
-            main.topo = imp.load_source( wrapperFile3,
+            main.topo = imp.load_source( wrapperFile1,
                                          main.dependencyPath +
-                                         wrapperFile3 +
+                                         wrapperFile1 +
                                          ".py" )
-
             if main.CLIs:
                 stepResult = main.TRUE
             else:
@@ -237,20 +223,22 @@
         # Remove the first element in main.scale list
         main.scale.remove( main.scale[ 0 ] )
 
-        main.intentFunction.report( main )
-
-
     def CASE10( self, main ):
         """
             Start Mininet opticalTest Topology
         """
         main.case( "Mininet with Linc-OE startup")
         main.caseExplanation = "Start opticalTest.py topology included with ONOS"
+        if main.opticalTopo:
+            main.step( "Copying optical topology to $ONOS_ROOT/tools/test/topos/" )
+            main.ONOSbench.scp( main.ONOSbench,
+                                "{0}{1}.py".format( main.dependencyPath, main.opticalTopo ),
+                                "~/onos/tools/test/topos/{0}.py".format( main.opticalTopo ) )
         main.step( "Starting mininet and LINC-OE" )
         topoResult = main.TRUE
         time.sleep( 10 )
         controllerIPs = ' '.join( main.activeONOSip )
-        opticalMnScript = main.LincOE.runOpticalMnScript(ctrllerIP = controllerIPs)
+        opticalMnScript = main.LincOE.runOpticalMnScript(ctrllerIP = controllerIPs, topology=main.opticalTopo )
         topoResult = opticalMnScript
         utilities.assert_equals(
             expect=main.TRUE,
@@ -258,6 +246,11 @@
             onpass="Started the topology successfully ",
             onfail="Failed to start the topology")
 
+        main.step( "Push Topology.json to ONOS through onos-netcfg" )
+        pushResult = main.TRUE
+        time.sleep( 20 )
+        main.ONOSbench.onosNetCfg( controllerIps=controllerIPs, path=main.dependencyPath, fileName="Topology" )
+
         # Exit if topology did not load properly
         if not topoResult:
             main.cleanup()
@@ -286,6 +279,23 @@
             main.cleanup()
             main.exit()
 
+    def CASE16( self, main ):
+        """
+            Balance Masters
+        """
+        main.case( "Balance mastership of switches" )
+        main.step( "Balancing mastership of switches" )
+
+        balanceResult = main.FALSE
+        balanceResult = utilities.retry( f=main.CLIs[ 0 ].balanceMasters, retValue=main.FALSE, args=[] )
+
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=balanceResult,
+                                 onpass="Successfully balanced mastership of switches",
+                                 onfail="Failed to balance mastership of switches" )
+        if not balanceResult:
+            main.initialized = main.FALSE
+
     def CASE17( self, main ):
         """
             Use Flow Objectives
@@ -317,9 +327,8 @@
         stepResult = main.TRUE
         scpResult = main.TRUE
         copyResult = main.TRUE
-        i = 0
-        for cli in main.CLIs:
-            main.node = cli
+        for i in range( main.numCtrls ):
+            main.node = main.CLIs[ i ]
             ip = main.ONOSip[ i ]
             main.node.ip_address = ip
             scpResult = scpResult and main.ONOSbench.scp( main.node ,
@@ -332,7 +341,6 @@
                 stepResult =  main.TRUE and stepResult
             else:
                 stepResult = main.FALSE and stepResult
-            i += 1
         utilities.assert_equals( expect=main.TRUE,
                                  actual=stepResult,
                                  onpass="Successfully copied remote ONOS logs",
@@ -361,7 +369,9 @@
 
         main.step( "Send arping between all hosts" )
 
-        hosts = [ "h1","h2","h3","h4","h5","h6" ]
+        hosts = []
+        for i in range( main.hosts ):
+            hosts.append( 'h{}'.format( i + 1 ) )
 
         arpingHostResults = main.TRUE
         for host in hosts:
@@ -395,9 +405,9 @@
         hostFails = []  # Nodes where hosts are incorrect
         attempts = main.checkTopoAttempts  # Remaining Attempts
 
-        mnSwitches = 16
-        mnLinks = 46
-        mnHosts = 6
+        mnSwitches = main.switches
+        mnLinks = main.links
+        mnHosts = main.hosts
 
         main.step( "Comparing Mininet topology to ONOS topology" )
 
@@ -528,12 +538,12 @@
         checkFlowResult = main.TRUE
         main.pIntentsId = []
         pIntent1 = main.CLIs[ 0 ].addPointIntent(
-            "of:0000ffffffff0001/1",
-            "of:0000ffffffff0005/1" )
+            "of:0000000000000001/1",
+            "of:0000000000000002/1" )
         time.sleep( 10 )
         pIntent2 = main.CLIs[ 0 ].addPointIntent(
-            "of:0000ffffffff0005/1",
-            "of:0000ffffffff0001/1" )
+            "of:0000000000000002/1",
+            "of:0000000000000001/1" )
         main.pIntentsId.append( pIntent1 )
         main.pIntentsId.append( pIntent2 )
         time.sleep( 10 )
@@ -559,17 +569,50 @@
             onpass="Successfully added point intents",
             onfail="Failed to add point intents")
 
-        if not addIntentsResult:
-            main.log.error( "Intents were not properly installed. Exiting case." )
-            main.skipCase()
+        pingResult = main.FALSE
 
-        main.step( "Ping h1 and h5" )
-        pingResult = main.LincOE.pingHostOptical( src="h1", target="h5" )
+        if not addIntentsResult:
+            main.log.error( "Intents were not properly installed. Skipping ping." )
+
+        else:
+            main.step( "Ping h1 and h2" )
+            pingResult = main.LincOE.pingHostOptical( src="h1", target="h2" )
         utilities.assert_equals(
             expect=main.TRUE,
             actual=pingResult,
-            onpass="Successfully pinged h1 and h5",
-            onfail="Failed to ping between h1 and h5")
+            onpass="Successfully pinged h1 and h2",
+            onfail="Failed to ping between h1 and h2")
+
+        main.step( "Remove Point to Point intents" )
+        removeResult = main.FALSE
+        # Check remaining intents
+        try:
+            intentsJson = json.loads( main.CLIs[ 0 ].intents() )
+            main.log.debug( intentsJson )
+            main.CLIs[ 0 ].removeIntent( intentId=pIntent1, purge=True )
+            main.CLIs[ 0 ].removeIntent( intentId=pIntent2, purge=True )
+            for intents in intentsJson:
+                main.CLIs[ 0 ].removeIntent( intentId=intents.get( 'id' ),
+                                             app='org.onosproject.cli',
+                                             purge=True )
+                time.sleep( 15 )
+
+            for i in range( main.numCtrls ):
+                if len( json.loads( main.CLIs[ i ].intents() ) ):
+                    print json.loads( main.CLIs[ i ].intents() )
+                    removeResult = main.FALSE
+                else:
+                    removeResult = main.TRUE
+        except ( TypeError, ValueError ):
+            main.log.error( "Cannot see intents on Node " + str( main.CLIs[ 0 ] ) +\
+                            ".  Removing all intents.")
+            main.CLIs[ 0 ].removeAllIntents( purge=True )
+            main.CLIs[ 0 ].removeAllIntents( purge=True, app='org.onosproject.cli')
+
+        utilities.assert_equals( expect=main.TRUE,
+                                 actual=removeResult,
+                                 onpass="Successfully removed host intents",
+                                 onfail="Failed to remove host intents" )
 
     def CASE32( self ):
         """
@@ -581,17 +624,22 @@
         main.case( "Test add host intents between optical layer host" )
         main.caseExplanation = "Test host intents between 2 optical layer host"
 
+        main.step( "Creating list of hosts" )
+        hostnum = 0
+        try:
+            hostData = json.loads( hosts[ controller ] )
+        except( TypeError, ValueError ):
+            main.log.error("Could not load json:" + str( hosts[ controller ] ) )
+
         main.step( "Adding host intents to h1 and h2" )
-        hostMACs = []
         hostId = []
         # Listing host MAC addresses
-        for i in range( 1 , 7 ):
-            hostMACs.append( "00:00:00:00:00:" +
-                                str( hex( i )[ 2: ] ).zfill( 2 ).upper() )
-        for macs in hostMACs:
-            hostId.append( macs + "/-1" )
+        for host in hostData:
+            hostId.append( host.get("id") )
         host1 = hostId[ 0 ]
         host2 = hostId[ 1 ]
+        main.log.debug( host1 )
+        main.log.debug( host2 )
 
         intentsId = []
         intent1 = main.CLIs[ 0 ].addHostIntent( hostIdOne = host1,
@@ -599,14 +647,9 @@
         intentsId.append( intent1 )
         # Checking intents state before pinging
         main.log.info( "Checking intents state" )
-        intentResult = main.CLIs[ 0 ].checkIntentState( intentsId = intentsId )
-        # Check intent state again if intents are not in installed state
-
-
-        # If intent state is wrong, wait 3 sec and try again
-        if not intentResult:
-            time.sleep( 3 )
-            intentResult = main.CLIs[ 0 ].checkIntentState( intentsId = intentsId )
+        intentResult = utilities.retry( f=main.CLIs[ 0 ].checkIntentState,
+                                        retValue=main.FALSE, args=intentsId,
+                                        sleep=main.checkIntentSleep, attempts=10 )
 
         # If intent state is still wrong, display intent states
         if not intentResult:
@@ -645,11 +688,14 @@
                 main.CLIs[ 0 ].removeIntent( intentId=intents.get( 'id' ),
                                              app='org.onosproject.optical',
                                              purge=True )
+            time.sleep( 15 )
 
             for i in range( main.numCtrls ):
                 if len( json.loads( main.CLIs[ i ].intents() ) ):
                     print json.loads( main.CLIs[ i ].intents() )
                     removeResult = main.FALSE
+                else:
+                    removeResult = main.TRUE
         except ( TypeError, ValueError ):
             main.log.error( "Cannot see intents on Node " + str( main.CLIs[ 0 ] ) +\
                             ".  Removing all intents.")
@@ -659,4 +705,4 @@
         utilities.assert_equals( expect=main.TRUE,
                                  actual=removeResult,
                                  onpass="Successfully removed host intents",
-                                 onfail="Failed to remove host intents" )
+                                 onfail="Failed to remove host intents" )
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCoptical/TopoConfig.json b/TestON/tests/FUNC/FUNCoptical/TopoConfig.json
deleted file mode 100644
index 9545eae..0000000
--- a/TestON/tests/FUNC/FUNCoptical/TopoConfig.json
+++ /dev/null
@@ -1,2832 +0,0 @@
-{
-    "linkConfig": [
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 100,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:15",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 100,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:13",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:15",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1e",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 100,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:10",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:42",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:08",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0c",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1a",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:04",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:4b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:19",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:4b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0e",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 104,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:09",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:13",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2e",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:30",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:46",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:26",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:27",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:19",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:27",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:14",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:22",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3e",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0c",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:17",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1a",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:34",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 101,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:46",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:0f",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:30",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:10",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:31",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:11",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:0f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:11",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:11",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:12",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:19",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:12",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:20",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:12",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2a",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:0a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:12",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:13",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2c",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:13",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:38",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:14",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:46",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:15",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:15",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:44",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:16",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:16",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 108,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:16",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2a",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 108,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:17",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:17",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:33",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:17",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:34",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 108,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:18",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1c",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:18",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:31",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2c",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:40",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:47",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1c",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:29",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3a",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3b",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:09",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:1d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:38",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 104,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1f",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:26",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 108,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:1f",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:40",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:20",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:23",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:21",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:43",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:21",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:4a",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:22",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:23",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:26",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:24",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2c",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:08",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:24",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:25",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:34",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:25",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:49",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:27",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:45",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:28",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2e",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:07",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:29",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:28",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:29",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:37",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:29",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:49",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2a",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:47",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:36",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:38",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2b",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3c",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:4a",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:06",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:37",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2f",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3b",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:2f",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:44",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:05",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:2f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:30",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:37",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:32",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:36",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 108,
-                "numWaves": 80,
-                "port1": 102,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:32",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:38",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 103,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:32",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:41",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:33",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:35",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:42",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:04",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:35",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:37",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:42",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:03",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:39",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 105,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:3c",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:3d",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3a",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:02",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3d",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:3e",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:40",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 107,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:41",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:3f",
-            "allowed": true
-        },
-        {
-            "type": "wdmLink",
-            "params": {
-                "port2": 106,
-                "numWaves": 80,
-                "port1": 101,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:45",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:43",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 10,
-                "bandwidth": 100000,
-                "port1": 2,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 11,
-                "bandwidth": 100000,
-                "port1": 3,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 12,
-                "bandwidth": 100000,
-                "port1": 4,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 13,
-                "bandwidth": 100000,
-                "port1": 5,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        },
-        {
-            "type": "pktOptLink",
-            "params": {
-                "port2": 14,
-                "bandwidth": 100000,
-                "port1": 6,
-                "nodeName2": "none",
-                "nodeName1": "none"
-            },
-            "nodeDpid1": "00:00:ff:ff:ff:00:00:01",
-            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:48",
-            "allowed": true
-        }
-    ],
-    "switchConfig": [
-        {
-            "name": "none",
-            "longitude": -99.741564,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 32.508086,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:01"
-        },
-        {
-            "name": "none",
-            "longitude": -106.649719,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 35.084446,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:02"
-        },
-        {
-            "name": "none",
-            "longitude": -73.758333,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 42.652222,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:03"
-        },
-        {
-            "name": "none",
-            "longitude": -97.743057,
-            "params": {
-                "numregens": 5
-            },
-            "allowed": true,
-            "latitude": 33.755833,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:04"
-        },
-        {
-            "name": "none",
-            "longitude": -96.7,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 29.57,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:4b"
-        },
-        {
-            "name": "none",
-            "longitude": -78.877778,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 42.882778,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:05"
-        },
-        {
-            "name": "none",
-            "longitude": -108.509167,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 45.781667,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:06"
-        },
-        {
-            "name": "none",
-            "longitude": -76.614127,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.293781,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:07"
-        },
-        {
-            "name": "none",
-            "longitude": -86.812225,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 33.517223,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:08"
-        },
-        {
-            "name": "none",
-            "longitude": -100.796917,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 46.836379,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:09"
-        },
-        {
-            "name": "none",
-            "longitude": -91.184167,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 30.449722,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0a"
-        },
-        {
-            "name": "none",
-            "longitude": -87.640432,
-            "params": {
-                "numregens": 4
-            },
-            "allowed": true,
-            "latitude": 41.881484,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0b"
-        },
-        {
-            "name": "none",
-            "longitude": -80.837502,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 35.224924,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0c"
-        },
-        {
-            "name": "none",
-            "longitude": -79.938056,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 32.785278,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0d"
-        },
-        {
-            "name": "none",
-            "longitude": -81.686943,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 41.498333,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0e"
-        },
-        {
-            "name": "none",
-            "longitude": -82.996666,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.965279,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:0f"
-        },
-        {
-            "name": "none",
-            "longitude": -71.084918,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 42.36745,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:10"
-        },
-        {
-            "name": "none",
-            "longitude": -84.516944,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.102778,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:11"
-        },
-        {
-            "name": "none",
-            "longitude": -96.780431,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 32.797524,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:12"
-        },
-        {
-            "name": "none",
-            "longitude": -104.996391,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.744999,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:13"
-        },
-        {
-            "name": "none",
-            "longitude": -83.054169,
-            "params": {
-                "numregens": 5
-            },
-            "allowed": true,
-            "latitude": 42.332779,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:14"
-        },
-        {
-            "name": "none",
-            "longitude": -106.483611,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 31.756389,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:15"
-        },
-        {
-            "name": "none",
-            "longitude": -119.79423,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.73923,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:16"
-        },
-        {
-            "name": "none",
-            "longitude": -79.793889,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.072222,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:17"
-        },
-        {
-            "name": "none",
-            "longitude": -72.676389,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 41.765833,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:18"
-        },
-        {
-            "name": "none",
-            "longitude": -95.36528,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 29.748333,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:19"
-        },
-        {
-            "name": "none",
-            "longitude": -81.43,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 30.33071,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1a"
-        },
-        {
-            "name": "none",
-            "longitude": -94.578716,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.096649,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1b"
-        },
-        {
-            "name": "none",
-            "longitude": -73.6699993,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 40.5899999,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1c"
-        },
-        {
-            "name": "none",
-            "longitude": -118.252958,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 34.051227,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1d"
-        },
-        {
-            "name": "none",
-            "longitude": -115.138889,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.168056,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1e"
-        },
-        {
-            "name": "none",
-            "longitude": -85.760833,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 38.249167,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:1f"
-        },
-        {
-            "name": "none",
-            "longitude": -92.271942,
-            "params": {
-                "numregens": 2
-            },
-            "allowed": true,
-            "latitude": 34.740833,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:20"
-        },
-        {
-            "name": "none",
-            "longitude": -80.195,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 25.779167,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:21"
-        },
-        {
-            "name": "none",
-            "longitude": -87.922501,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 43.037224,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:22"
-        },
-        {
-            "name": "none",
-            "longitude": -90.048058,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 35.145158,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:23"
-        },
-        {
-            "name": "none",
-            "longitude": -93.26718,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 44.977365,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:24"
-        },
-        {
-            "name": "none",
-            "longitude": -76.29,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.853333,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:25"
-        },
-        {
-            "name": "none",
-            "longitude": -86.775558,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.163955,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:26"
-        },
-        {
-            "name": "none",
-            "longitude": -90.07222,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 29.949806,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:27"
-        },
-        {
-            "name": "none",
-            "longitude": -74.177978,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 40.734408,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:28"
-        },
-        {
-            "name": "none",
-            "longitude": -73.989713,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 40.767497,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:29"
-        },
-        {
-            "name": "none",
-            "longitude": -97.515274,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 35.470833,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2a"
-        },
-        {
-            "name": "none",
-            "longitude": -122.268889,
-            "params": {
-                "numregens": 2
-            },
-            "allowed": true,
-            "latitude": 37.805556,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2b"
-        },
-        {
-            "name": "none",
-            "longitude": -95.940277,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 41.259167,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2c"
-        },
-        {
-            "name": "none",
-            "longitude": -81.377502,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 28.543279,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2d"
-        },
-        {
-            "name": "none",
-            "longitude": -75.184139,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.946446,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2e"
-        },
-        {
-            "name": "none",
-            "longitude": -112.07709,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 33.450361,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:2f"
-        },
-        {
-            "name": "none",
-            "longitude": -79.995552,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 40.441387,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:30"
-        },
-        {
-            "name": "none",
-            "longitude": -71.415278,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 41.818889,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:31"
-        },
-        {
-            "name": "none",
-            "longitude": -122.678055,
-            "params": {
-                "numregens": 2
-            },
-            "allowed": true,
-            "latitude": 45.522499,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:32"
-        },
-        {
-            "name": "none",
-            "longitude": -77.436096,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 37.540752,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:33"
-        },
-        {
-            "name": "none",
-            "longitude": -78.640831,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 35.779656,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:34"
-        },
-        {
-            "name": "none",
-            "longitude": -77.616389,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 43.157222,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:35"
-        },
-        {
-            "name": "none",
-            "longitude": -121.487221,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 38.578609,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:36"
-        },
-        {
-            "name": "none",
-            "longitude": -75.649167,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 41.415278,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:37"
-        },
-        {
-            "name": "none",
-            "longitude": -111.888336,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 40.767776,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:38"
-        },
-        {
-            "name": "none",
-            "longitude": -98.488892,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 29.429445,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:39"
-        },
-        {
-            "name": "none",
-            "longitude": -119.7,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 34.418889,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3a"
-        },
-        {
-            "name": "none",
-            "longitude": -117.158611,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 32.746944,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3b"
-        },
-        {
-            "name": "none",
-            "longitude": -122.397263,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 37.785143,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3c"
-        },
-        {
-            "name": "none",
-            "longitude": -121.892778,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 37.333333,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3d"
-        },
-        {
-            "name": "none",
-            "longitude": -89.649444,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.795278,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3e"
-        },
-        {
-            "name": "none",
-            "longitude": -117.419167,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 47.654724,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:3f"
-        },
-        {
-            "name": "none",
-            "longitude": -90.215279,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 38.633335,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:40"
-        },
-        {
-            "name": "none",
-            "longitude": -122.333336,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 47.606945,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:41"
-        },
-        {
-            "name": "none",
-            "longitude": -76.1475,
-            "params": {
-                "numregens": 3
-            },
-            "allowed": true,
-            "latitude": 43.049444,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:42"
-        },
-        {
-            "name": "none",
-            "longitude": -82.522778,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 28.0225,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:43"
-        },
-        {
-            "name": "none",
-            "longitude": -110.968333,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 32.224444,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:44"
-        },
-        {
-            "name": "none",
-            "longitude": -84.290833,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 30.456389,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:45"
-        },
-        {
-            "name": "none",
-            "longitude": -83.538056,
-            "params": {
-                "numregens": 2
-            },
-            "allowed": true,
-            "latitude": 41.65,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:46"
-        },
-        {
-            "name": "none",
-            "longitude": -95.985832,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 36.151669,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:47"
-        },
-        {
-            "name": "none",
-            "longitude": -77.01028,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 38.88306,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:48"
-        },
-        {
-            "name": "none",
-            "longitude": -75.553889,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 39.739167,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:49"
-        },
-        {
-            "name": "none",
-            "longitude": -80.05278,
-            "params": {
-                "numregens": 0
-            },
-            "allowed": true,
-            "latitude": 26.709391,
-            "type": "Roadm",
-            "nodeDpid": "00:00:ff:ff:ff:ff:ff:4a"
-        }
-    ]
-}
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCoptical/Topology.json b/TestON/tests/FUNC/FUNCoptical/Topology.json
deleted file mode 100644
index 21c21e7..0000000
--- a/TestON/tests/FUNC/FUNCoptical/Topology.json
+++ /dev/null
@@ -1,4362 +0,0 @@
-{
-    "devices": {
-        "of:0000ffffffffff4a": {
-            "basic": {
-                "name": "WPBHFLAN",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff4a",
-                "longitude": -80.05278,
-                "mfr": "Linc",
-                "latitude": 26.709391,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff4b": {
-            "basic": {
-                "name": "AUSTTXGR",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff4b",
-                "longitude": -96.7,
-                "mfr": "Linc",
-                "latitude": 29.57,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff44": {
-            "basic": {
-                "name": "TCSNAZMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff44",
-                "longitude": -110.968333,
-                "mfr": "Linc",
-                "latitude": 32.224444,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff45": {
-            "basic": {
-                "name": "TLHSFLAT",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff45",
-                "longitude": -84.290833,
-                "mfr": "Linc",
-                "latitude": 30.456389,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff46": {
-            "basic": {
-                "name": "TOLDOH21",
-                "optical.regens": 2,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff46",
-                "longitude": -83.538056,
-                "mfr": "Linc",
-                "latitude": 41.65,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff47": {
-            "basic": {
-                "name": "TULSOKTB",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff47",
-                "longitude": -95.985832,
-                "mfr": "Linc",
-                "latitude": 36.151669,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff40": {
-            "basic": {
-                "name": "STLSMO09",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff40",
-                "longitude": -90.215279,
-                "mfr": "Linc",
-                "latitude": 38.633335,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff41": {
-            "basic": {
-                "name": "STTLWA06",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff41",
-                "longitude": -122.333336,
-                "mfr": "Linc",
-                "latitude": 47.606945,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff42": {
-            "basic": {
-                "name": "SYRCNYSU",
-                "optical.regens": 3,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff42",
-                "longitude": -76.1475,
-                "mfr": "Linc",
-                "latitude": 43.049444,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff43": {
-            "basic": {
-                "name": "TAMQFLFN",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff43",
-                "longitude": -82.522778,
-                "mfr": "Linc",
-                "latitude": 28.0225,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff48": {
-            "basic": {
-                "name": "WASHDCSW",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff48",
-                "longitude": -77.01028,
-                "mfr": "Linc",
-                "latitude": 38.88306,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff49": {
-            "basic": {
-                "name": "WLMGDE01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff49",
-                "longitude": -75.553889,
-                "mfr": "Linc",
-                "latitude": 39.739167,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff00000a": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "DLLSTXTL-R",
-                "latitude": 32.7,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "eaf75c83054e",
-                "longitude": -96.7
-            }
-        },
-        "of:0000ffffff00000b": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "ATLNGATL-R",
-                "latitude": 33.7,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "ee5628887b4f",
-                "longitude": -97.7
-            }
-        },
-        "of:0000ffffffffff1d": {
-            "basic": {
-                "name": "LSANCA03",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1d",
-                "longitude": -118.252958,
-                "mfr": "Linc",
-                "latitude": 34.051227,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff03": {
-            "basic": {
-                "name": "ALBYNYSS",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff03",
-                "longitude": -73.758333,
-                "mfr": "Linc",
-                "latitude": 42.652222,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0a": {
-            "basic": {
-                "name": "BTRGLAMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0a",
-                "longitude": -91.184167,
-                "mfr": "Linc",
-                "latitude": 30.449722,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0b": {
-            "basic": {
-                "name": "CHCGILCL",
-                "optical.regens": 4,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0b",
-                "longitude": -87.640432,
-                "mfr": "Linc",
-                "latitude": 41.881484,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0c": {
-            "basic": {
-                "name": "CHRLNCCA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0c",
-                "longitude": -80.837502,
-                "mfr": "Linc",
-                "latitude": 35.224924,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0d": {
-            "basic": {
-                "name": "CHTNSCDT",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0d",
-                "longitude": -79.938056,
-                "mfr": "Linc",
-                "latitude": 32.785278,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0e": {
-            "basic": {
-                "name": "CLEVOH02",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0e",
-                "longitude": -81.686943,
-                "mfr": "Linc",
-                "latitude": 41.498333,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff0f": {
-            "basic": {
-                "name": "CLMBOH11",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff0f",
-                "longitude": -82.996666,
-                "mfr": "Linc",
-                "latitude": 39.965279,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000008": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "MPLSMNDT-R",
-                "latitude": 44.9,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "96d57fb4eb43",
-                "longitude": -93.2
-            }
-        },
-        "of:0000ffffff000009": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "LSANCA03-R",
-                "latitude": 34.1,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "6ee9b704c04d",
-                "longitude": -118.3
-            }
-        },
-        "of:0000ffffffffff19": {
-            "basic": {
-                "name": "HSTNTX01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff19",
-                "longitude": -95.36528,
-                "mfr": "Linc",
-                "latitude": 29.748333,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff18": {
-            "basic": {
-                "name": "HRFRCT03",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff18",
-                "longitude": -72.676389,
-                "mfr": "Linc",
-                "latitude": 41.765833,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff13": {
-            "basic": {
-                "name": "DNVRCOMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff13",
-                "longitude": -104.996391,
-                "mfr": "Linc",
-                "latitude": 39.744999,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000001": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "WASHDCSW-R",
-                "latitude": 38.8,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "2221b5cb5c45",
-                "longitude": -77.0
-            }
-        },
-        "of:0000ffffff000002": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "SNJSCA02-R",
-                "latitude": 37.3,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "f28c95ff6145",
-                "longitude": -121.8
-            }
-        },
-        "of:0000ffffffffff10": {
-            "basic": {
-                "name": "CMBRMA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff10",
-                "longitude": -71.084918,
-                "mfr": "Linc",
-                "latitude": 42.36745,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff17": {
-            "basic": {
-                "name": "GNBONCEU",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff17",
-                "longitude": -79.793889,
-                "mfr": "Linc",
-                "latitude": 36.072222,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000005": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "PHNXAZMA-R",
-                "latitude": 33.4,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "566c93367041",
-                "longitude": -112.0
-            }
-        },
-        "of:0000ffffffffff15": {
-            "basic": {
-                "name": "ELPSTXMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff15",
-                "longitude": -106.483611,
-                "mfr": "Linc",
-                "latitude": 31.756389,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff14": {
-            "basic": {
-                "name": "DTRTMIBA",
-                "optical.regens": 5,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff14",
-                "longitude": -83.054169,
-                "mfr": "Linc",
-                "latitude": 42.332779,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff12": {
-            "basic": {
-                "name": "DLLSTXTL",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff12",
-                "longitude": -96.780431,
-                "mfr": "Linc",
-                "latitude": 32.797524,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff11": {
-            "basic": {
-                "name": "CNCNOHWS",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff11",
-                "longitude": -84.516944,
-                "mfr": "Linc",
-                "latitude": 39.102778,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000003": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "SNANTXCA-R",
-                "latitude": 29.4,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "c6463e3da348",
-                "longitude": -98.4
-            }
-        },
-        "of:0000ffffffffff1c": {
-            "basic": {
-                "name": "LGISLAND",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1c",
-                "longitude": -73.6699993,
-                "mfr": "Linc",
-                "latitude": 40.5899999,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000004": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "ROCHNYXA-R",
-                "latitude": 43.1,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "a2c8e539f440",
-                "longitude": -77.6
-            }
-        },
-        "of:0000ffffffffff1a": {
-            "basic": {
-                "name": "JCVLFLCL",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1a",
-                "longitude": -81.43,
-                "mfr": "Linc",
-                "latitude": 30.33071,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff1f": {
-            "basic": {
-                "name": "LSVLKYCS",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1f",
-                "longitude": -85.760833,
-                "mfr": "Linc",
-                "latitude": 38.249167,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff1e": {
-            "basic": {
-                "name": "LSVGNV02",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1e",
-                "longitude": -115.138889,
-                "mfr": "Linc",
-                "latitude": 36.168056,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff16": {
-            "basic": {
-                "name": "FRSNCA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff16",
-                "longitude": -119.79423,
-                "mfr": "Linc",
-                "latitude": 36.73923,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff08": {
-            "basic": {
-                "name": "BRHMALMT",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff08",
-                "longitude": -86.812225,
-                "mfr": "Linc",
-                "latitude": 33.517223,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff09": {
-            "basic": {
-                "name": "BSMRNDJC",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff09",
-                "longitude": -100.796917,
-                "mfr": "Linc",
-                "latitude": 46.836379,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000006": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "ORLDFLMA-R",
-                "latitude": 28.5,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "bac54f68574f",
-                "longitude": -81.3
-            }
-        },
-        "of:0000ffffffffff01": {
-            "basic": {
-                "name": "ABLNTXRO",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff01",
-                "longitude": -99.741564,
-                "mfr": "Linc",
-                "latitude": 32.508086,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff02": {
-            "basic": {
-                "name": "ALBQNMMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff02",
-                "longitude": -106.649719,
-                "mfr": "Linc",
-                "latitude": 35.084446,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffff000007": {
-            "basic": {
-                "mfr": "Linc",
-                "name": "NWRKNJ02-R",
-                "latitude": 40.7,
-                "driver": "PK",
-                "type": "SWITCH",
-                "mac": "1237bde27347",
-                "longitude": -74.1
-            }
-        },
-        "of:0000ffffffffff04": {
-            "basic": {
-                "name": "ATLNGATL",
-                "optical.regens": 5,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff04",
-                "longitude": -97.743057,
-                "mfr": "Linc",
-                "latitude": 33.755833,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff05": {
-            "basic": {
-                "name": "BFLONYFR",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff05",
-                "longitude": -78.877778,
-                "mfr": "Linc",
-                "latitude": 42.882778,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff06": {
-            "basic": {
-                "name": "BLNGMTMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff06",
-                "longitude": -108.509167,
-                "mfr": "Linc",
-                "latitude": 45.781667,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff07": {
-            "basic": {
-                "name": "BLTMMDCH",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff07",
-                "longitude": -76.614127,
-                "mfr": "Linc",
-                "latitude": 39.293781,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2b": {
-            "basic": {
-                "name": "OKLDCA03",
-                "optical.regens": 2,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2b",
-                "longitude": -122.268889,
-                "mfr": "Linc",
-                "latitude": 37.805556,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2c": {
-            "basic": {
-                "name": "OMAHNENW",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2c",
-                "longitude": -95.940277,
-                "mfr": "Linc",
-                "latitude": 41.259167,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2a": {
-            "basic": {
-                "name": "OKCYOKCE",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2a",
-                "longitude": -97.515274,
-                "mfr": "Linc",
-                "latitude": 35.470833,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2f": {
-            "basic": {
-                "name": "PHNXAZMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2f",
-                "longitude": -112.07709,
-                "mfr": "Linc",
-                "latitude": 33.450361,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2d": {
-            "basic": {
-                "name": "ORLDFLMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2d",
-                "longitude": -81.377502,
-                "mfr": "Linc",
-                "latitude": 28.543279,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff2e": {
-            "basic": {
-                "name": "PHLAPASL",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff2e",
-                "longitude": -75.184139,
-                "mfr": "Linc",
-                "latitude": 39.946446,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff39": {
-            "basic": {
-                "name": "SNANTXCA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff39",
-                "longitude": -98.488892,
-                "mfr": "Linc",
-                "latitude": 29.429445,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff38": {
-            "basic": {
-                "name": "SLKCUTMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff38",
-                "longitude": -111.888336,
-                "mfr": "Linc",
-                "latitude": 40.767776,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff35": {
-            "basic": {
-                "name": "ROCHNYXA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff35",
-                "longitude": -77.616389,
-                "mfr": "Linc",
-                "latitude": 43.157222,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff34": {
-            "basic": {
-                "name": "RLGHNCMO",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff34",
-                "longitude": -78.640831,
-                "mfr": "Linc",
-                "latitude": 35.779656,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff37": {
-            "basic": {
-                "name": "SCTNPA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff37",
-                "longitude": -75.649167,
-                "mfr": "Linc",
-                "latitude": 41.415278,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff36": {
-            "basic": {
-                "name": "SCRMCA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff36",
-                "longitude": -121.487221,
-                "mfr": "Linc",
-                "latitude": 38.578609,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff31": {
-            "basic": {
-                "name": "PRVDRIGR",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff31",
-                "longitude": -71.415278,
-                "mfr": "Linc",
-                "latitude": 41.818889,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff30": {
-            "basic": {
-                "name": "PITBPADG",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff30",
-                "longitude": -79.995552,
-                "mfr": "Linc",
-                "latitude": 40.441387,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff33": {
-            "basic": {
-                "name": "RCMDVAGR",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff33",
-                "longitude": -77.436096,
-                "mfr": "Linc",
-                "latitude": 37.540752,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff32": {
-            "basic": {
-                "name": "PTLDOR62",
-                "optical.regens": 2,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff32",
-                "longitude": -122.678055,
-                "mfr": "Linc",
-                "latitude": 45.522499,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff22": {
-            "basic": {
-                "name": "MILWWIHE",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff22",
-                "longitude": -87.922501,
-                "mfr": "Linc",
-                "latitude": 43.037224,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff23": {
-            "basic": {
-                "name": "MMPHTNMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff23",
-                "longitude": -90.048058,
-                "mfr": "Linc",
-                "latitude": 35.145158,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff20": {
-            "basic": {
-                "name": "LTRKARFR",
-                "optical.regens": 2,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff20",
-                "longitude": -92.271942,
-                "mfr": "Linc",
-                "latitude": 34.740833,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff21": {
-            "basic": {
-                "name": "MIAMFLAC",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff21",
-                "longitude": -80.195,
-                "mfr": "Linc",
-                "latitude": 25.779167,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff26": {
-            "basic": {
-                "name": "NSVLTNMT",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff26",
-                "longitude": -86.775558,
-                "mfr": "Linc",
-                "latitude": 36.163955,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff27": {
-            "basic": {
-                "name": "NWORLAMA",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff27",
-                "longitude": -90.07222,
-                "mfr": "Linc",
-                "latitude": 29.949806,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff24": {
-            "basic": {
-                "name": "MPLSMNDT",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff24",
-                "longitude": -93.26718,
-                "mfr": "Linc",
-                "latitude": 44.977365,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff25": {
-            "basic": {
-                "name": "NRFLVABS",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff25",
-                "longitude": -76.29,
-                "mfr": "Linc",
-                "latitude": 36.853333,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff28": {
-            "basic": {
-                "name": "NWRKNJ02",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff28",
-                "longitude": -74.177978,
-                "mfr": "Linc",
-                "latitude": 40.734408,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff29": {
-            "basic": {
-                "name": "NYCMNY54",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff29",
-                "longitude": -73.989713,
-                "mfr": "Linc",
-                "latitude": 40.767497,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3e": {
-            "basic": {
-                "name": "SPFDILSD",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3e",
-                "longitude": -89.649444,
-                "mfr": "Linc",
-                "latitude": 39.795278,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3d": {
-            "basic": {
-                "name": "SNJSCA02",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3d",
-                "longitude": -121.892778,
-                "mfr": "Linc",
-                "latitude": 37.333333,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3f": {
-            "basic": {
-                "name": "SPKNWA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3f",
-                "longitude": -117.419167,
-                "mfr": "Linc",
-                "latitude": 47.654724,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3a": {
-            "basic": {
-                "name": "SNBBCA01",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3a",
-                "longitude": -119.7,
-                "mfr": "Linc",
-                "latitude": 34.418889,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3c": {
-            "basic": {
-                "name": "SNFCCA21",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3c",
-                "longitude": -122.397263,
-                "mfr": "Linc",
-                "latitude": 37.785143,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff3b": {
-            "basic": {
-                "name": "SNDGCA02",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff3b",
-                "longitude": -117.158611,
-                "mfr": "Linc",
-                "latitude": 32.746944,
-                "type": "ROADM"
-            }
-        },
-        "of:0000ffffffffff1b": {
-            "basic": {
-                "name": "KSCYMO09",
-                "optical.regens": 0,
-                "driver": "LINC-OE",
-                "mac": "ffffffffffff1b",
-                "longitude": -94.578716,
-                "mfr": "Linc",
-                "latitude": 39.096649,
-                "type": "ROADM"
-            }
-        }
-    },
-    "links": {
-        "of:0000ffffff000006/6-of:0000ffffffffff2d/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff1b/101-of:0000ffffffffff2c/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 320
-            }
-        },
-        "of:0000ffffffffff1f/102-of:0000ffffffffff40/108": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 468
-            }
-        },
-        "of:0000ffffff000001/4-of:0000ffffffffff48/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff0f/101-of:0000ffffffffff30/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 312
-            }
-        },
-        "of:0000ffffffffff06/103-of:0000ffffffffff3f/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 852
-            }
-        },
-        "of:0000ffffffffff30/101-of:0000ffffffffff37/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 457
-            }
-        },
-        "of:0000ffffffffff02/103-of:0000ffffffffff1e/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 931
-            }
-        },
-        "of:0000ffffff00000a/6-of:0000ffffffffff12/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff12/102-of:0000ffffffffff20/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 563
-            }
-        },
-        "of:0000ffffff000003/5-of:0000ffffffffff39/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000005/3-of:0000ffffffffff2f/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff05/103-of:0000ffffffffff0e/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 333
-            }
-        },
-        "of:0000ffffffffff22/101-of:0000ffffffffff24/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 574
-            }
-        },
-        "of:0000ffffffffff0a/102-of:0000ffffffffff27/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 144
-            }
-        },
-        "of:0000ffffffffff02/100-of:0000ffffffffff12/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 1134
-            }
-        },
-        "of:0000ffffffffff04/102-of:0000ffffffffff0c/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 436
-            }
-        },
-        "of:0000ffffff00000a/4-of:0000ffffffffff12/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff2d/101-of:0000ffffffffff4a/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 290
-            }
-        },
-        "of:0000ffffffffff13/101-of:0000ffffffffff2c/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 940
-            }
-        },
-        "of:0000ffffff000008/2-of:0000ffffffffff24/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000007/6-of:0000ffffffffff28/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000008/3-of:0000ffffffffff24/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff14/101-of:0000ffffffffff46/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 103
-            }
-        },
-        "of:0000ffffff000002/3-of:0000ffffffffff3d/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000009/3-of:0000ffffffffff1d/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff11/103-of:0000ffffffffff48/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 779
-            }
-        },
-        "of:0000ffffff000002/5-of:0000ffffffffff3d/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff1b/103-of:0000ffffffffff47/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 420
-            }
-        },
-        "of:0000ffffffffff0d/101-of:0000ffffffffff1a/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 368
-            }
-        },
-        "of:0000ffffff000009/4-of:0000ffffffffff1d/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff28/101-of:0000ffffffffff2e/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 146
-            }
-        },
-        "of:0000ffffffffff1f/104-of:0000ffffffffff26/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 298
-            }
-        },
-        "of:0000ffffffffff0e/102-of:0000ffffffffff46/101": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 185
-            }
-        },
-        "of:0000ffffff000005/4-of:0000ffffffffff2f/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff0c/101-of:0000ffffffffff17/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 160
-            }
-        },
-        "of:0000ffffffffff18/101-of:0000ffffffffff1c/108": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 185
-            }
-        },
-        "of:0000ffffffffff06/101-of:0000ffffffffff09/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 724
-            }
-        },
-        "of:0000ffffff000009/5-of:0000ffffffffff1d/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff17/101-of:0000ffffffffff1f/108": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 697
-            }
-        },
-        "of:0000ffffffffff16/102-of:0000ffffffffff1d/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 396
-            }
-        },
-        "of:0000ffffff00000a/2-of:0000ffffffffff12/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff1c/101-of:0000ffffffffff29/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 40
-            }
-        },
-        "of:0000ffffff000006/4-of:0000ffffffffff2d/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff08/102-of:0000ffffffffff27/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 602
-            }
-        },
-        "of:0000ffffffffff1d/102-of:0000ffffffffff3a/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 167
-            }
-        },
-        "of:0000ffffff00000a/5-of:0000ffffffffff12/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000001/3-of:0000ffffffffff48/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff01/100-of:0000ffffffffff12/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 334
-            }
-        },
-        "of:0000ffffffffff1a/101-of:0000ffffffffff2d/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 238
-            }
-        },
-        "of:0000ffffff000004/6-of:0000ffffffffff35/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff1e/102-of:0000ffffffffff38/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 701
-            }
-        },
-        "of:0000ffffff000008/6-of:0000ffffffffff24/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000004/4-of:0000ffffffffff35/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000002/2-of:0000ffffffffff3d/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff03/101-of:0000ffffffffff42/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 239
-            }
-        },
-        "of:0000ffffffffff2e/101-of:0000ffffffffff37/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 201
-            }
-        },
-        "of:0000ffffffffff13/102-of:0000ffffffffff38/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 714
-            }
-        },
-        "of:0000ffffffffff07/101-of:0000ffffffffff2e/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 170
-            }
-        },
-        "of:0000ffffffffff16/103-of:0000ffffffffff2a/108": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 298
-            }
-        },
-        "of:0000ffffffffff3e/101-of:0000ffffffffff40/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 165
-            }
-        },
-        "of:0000ffffffffff02/101-of:0000ffffffffff13/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 646
-            }
-        },
-        "of:0000ffffff000002/6-of:0000ffffffffff3d/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000007/5-of:0000ffffffffff28/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000002/4-of:0000ffffffffff3d/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff01/101-of:0000ffffffffff15/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 768
-            }
-        },
-        "of:0000ffffff000006/2-of:0000ffffffffff2d/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff04/103-of:0000ffffffffff1a/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 566
-            }
-        },
-        "of:0000ffffffffff0e/101-of:0000ffffffffff0f/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 243
-            }
-        },
-        "of:0000ffffff000003/4-of:0000ffffffffff39/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000009/2-of:0000ffffffffff1d/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff18/102-of:0000ffffffffff31/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 125
-            }
-        },
-        "of:0000ffffff000001/5-of:0000ffffffffff48/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff11/102-of:0000ffffffffff1f/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 172
-            }
-        },
-        "of:0000ffffff00000b/6-of:0000ffffffffff04/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff29/101-of:0000ffffffffff28/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 19
-            }
-        },
-        "of:0000ffffffffff12/101-of:0000ffffffffff19/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 437
-            }
-        },
-        "of:0000ffffffffff3d/101-of:0000ffffffffff3a/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 455
-            }
-        },
-        "of:0000ffffffffff2b/103-of:0000ffffffffff3c/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 13
-            }
-        },
-        "of:0000ffffffffff4b/101-of:0000ffffffffff19/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 283
-            }
-        },
-        "of:0000ffffffffff32/101-of:0000ffffffffff36/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 934
-            }
-        },
-        "of:0000ffffffffff12/103-of:0000ffffffffff2a/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 365
-            }
-        },
-        "of:0000ffffffffff0d/102-of:0000ffffffffff34/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 424
-            }
-        },
-        "of:0000ffffffffff29/103-of:0000ffffffffff49/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 210
-            }
-        },
-        "of:0000ffffffffff10/101-of:0000ffffffffff31/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 80
-            }
-        },
-        "of:0000ffffffffff1d/101-of:0000ffffffffff3b/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 212
-            }
-        },
-        "of:0000ffffffffff29/102-of:0000ffffffffff37/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 187
-            }
-        },
-        "of:0000ffffff00000a/3-of:0000ffffffffff12/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff15/101-of:0000ffffffffff39/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 969
-            }
-        },
-        "of:0000ffffff000003/6-of:0000ffffffffff39/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff1e/101-of:0000ffffffffff2f/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 494
-            }
-        },
-        "of:0000ffffffffff1b/102-of:0000ffffffffff40/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 457
-            }
-        },
-        "of:0000ffffff000001/2-of:0000ffffffffff48/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff21/102-of:0000ffffffffff4a/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 125
-            }
-        },
-        "of:0000ffffff000003/3-of:0000ffffffffff39/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff15/102-of:0000ffffffffff44/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 511
-            }
-        },
-        "of:0000ffffff000005/2-of:0000ffffffffff2f/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff2b/102-of:0000ffffffffff38/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 1142
-            }
-        },
-        "of:0000ffffffffff0b/101-of:0000ffffffffff14/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 458
-            }
-        },
-        "of:0000ffffffffff45/101-of:0000ffffffffff43/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 384
-            }
-        },
-        "of:0000ffffffffff32/102-of:0000ffffffffff38/108": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 1225
-            }
-        },
-        "of:0000ffffffffff24/101-of:0000ffffffffff2c/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 560
-            }
-        },
-        "of:0000ffffff000006/3-of:0000ffffffffff2d/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff3c/101-of:0000ffffffffff3d/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 80.0
-            }
-        },
-        "of:0000ffffffffff21/101-of:0000ffffffffff43/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 407
-            }
-        },
-        "of:0000ffffff000008/5-of:0000ffffffffff24/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000005/6-of:0000ffffffffff2f/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff2f/102-of:0000ffffffffff44/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 205
-            }
-        },
-        "of:0000ffffff000007/3-of:0000ffffffffff28/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff0a/101-of:0000ffffffffff19/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 491
-            }
-        },
-        "of:0000ffffffffff41/101-of:0000ffffffffff3f/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 442
-            }
-        },
-        "of:0000ffffffffff33/101-of:0000ffffffffff48/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 184
-            }
-        },
-        "of:0000ffffff000004/3-of:0000ffffffffff35/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff2f/101-of:0000ffffffffff3b/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 575
-            }
-        },
-        "of:0000ffffff000006/5-of:0000ffffffffff2d/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff00000b/3-of:0000ffffffffff04/11": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000009/6-of:0000ffffffffff1d/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000007/2-of:0000ffffffffff28/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff17/103-of:0000ffffffffff33/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 319
-            }
-        },
-        "of:0000ffffffffff16/101-of:0000ffffffffff1f/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 505
-            }
-        },
-        "of:0000ffffffffff17/102-of:0000ffffffffff34/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 130
-            }
-        },
-        "of:0000ffffffffff2b/101-of:0000ffffffffff36/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 131
-            }
-        },
-        "of:0000ffffffffff03/100-of:0000ffffffffff10/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 265
-            }
-        },
-        "of:0000ffffffffff04/101-of:0000ffffffffff08/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 271
-            }
-        },
-        "of:0000ffffffffff07/103-of:0000ffffffffff46/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 68
-            }
-        },
-        "of:0000ffffffffff0b/102-of:0000ffffffffff22/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 156
-            }
-        },
-        "of:0000ffffffffff20/101-of:0000ffffffffff23/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 249
-            }
-        },
-        "of:0000ffffff00000b/2-of:0000ffffffffff04/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff25/102-of:0000ffffffffff49/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 392
-            }
-        },
-        "of:0000ffffffffff09/101-of:0000ffffffffff24/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 741
-            }
-        },
-        "of:0000ffffffffff2a/101-of:0000ffffffffff47/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 188
-            }
-        },
-        "of:0000ffffff000003/2-of:0000ffffffffff39/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff11/101-of:0000ffffffffff0f/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 194
-            }
-        },
-        "of:0000ffffffffff35/101-of:0000ffffffffff42/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 143
-            }
-        },
-        "of:0000ffffff000005/5-of:0000ffffffffff2f/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff00000b/5-of:0000ffffffffff04/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff25/101-of:0000ffffffffff34/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 290
-            }
-        },
-        "of:0000ffffffffff32/103-of:0000ffffffffff41/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 280
-            }
-        },
-        "of:0000ffffff000008/4-of:0000ffffffffff24/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff02/102-of:0000ffffffffff15/107": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 444
-            }
-        },
-        "of:0000ffffffffff0b/103-of:0000ffffffffff3e/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 344
-            }
-        },
-        "of:0000ffffffffff07/102-of:0000ffffffffff30/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 378
-            }
-        },
-        "of:0000ffffffffff4b/102-of:0000ffffffffff39/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 141
-            }
-        },
-        "of:0000ffffffffff23/101-of:0000ffffffffff26/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 380
-            }
-        },
-        "of:0000ffffff00000b/4-of:0000ffffffffff04/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff08/101-of:0000ffffffffff26/106": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 353
-            }
-        },
-        "of:0000ffffffffff27/101-of:0000ffffffffff45/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 670
-            }
-        },
-        "of:0000ffffff000004/2-of:0000ffffffffff35/10": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000001/6-of:0000ffffffffff48/14": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff05/104-of:0000ffffffffff35/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 128
-            }
-        },
-        "of:0000ffffffffff37/101-of:0000ffffffffff42/105": {
-            "basic": {
-                "optical.waves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 223
-            }
-        },
-        "of:0000ffffff000004/5-of:0000ffffffffff35/13": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffff000007/4-of:0000ffffffffff28/12": {
-            "basic": {
-                "bandwidth": 100000,
-                "type": "OPTICAL",
-                "durable": "true",
-                "optical.type": "cross-connect"
-            }
-        },
-        "of:0000ffffffffff06/102-of:0000ffffffffff13/107": {
-            "basic": {
-                "optical.wves": 80,
-                "durable": "true",
-                "type": "OPTICAL",
-                "optical.type": "WDM",
-                "optical.kms": 875
-            }
-        }
-    },
-    "ports": {
-        "of:0000ffffffffff27/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff3b/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff3b/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff00000b/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff32/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff22/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff4b/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff22/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff2f/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff03/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff03/100": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 100
-            }
-        },
-        "of:0000ffffffffff38/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff32/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff38/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff38/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff38/108": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 108
-            }
-        },
-        "of:0000ffffffffff1e/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffff000008/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff3d/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff3d/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff1e/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff3d/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff3f/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff1e/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff42/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff42/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff42/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff41/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff39/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff39/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff35/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff000009/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff49/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff49/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff2f/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff24/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff46/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff27/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff43/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff43/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff35/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff04/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff04/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff04/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff04/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff36/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff36/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff04/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff35/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff28/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff17/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff17/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff17/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff47/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff47/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff17/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff20/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff14/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff000005/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff1d/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff1d/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff14/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff1d/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff18/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff18/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff35/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff2b/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff2b/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff2a/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff39/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffff000006/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffff000006/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff1d/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff39/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff16/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff16/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff16/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff15/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff15/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff15/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff15/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff48/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff00000a/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffff00000a/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff3c/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff3c/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff23/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff04/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff04/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff04/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff23/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff1c/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff33/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff07/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff07/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff07/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff3d/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff40/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff2e/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff2e/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff35/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff2e/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff3a/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff2d/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff2d/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff2d/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff2d/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff2d/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff05/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff05/104": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 104
-            }
-        },
-        "of:0000ffffffffff24/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff13/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff13/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff06/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff13/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff13/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff06/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000007/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffff000007/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff48/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff44/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff44/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff35/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff46/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff46/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff31/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff31/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff12/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff12/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff2d/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff12/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff32/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff12/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff12/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff0d/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff0d/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff48/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff19/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff19/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff19/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff29/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff29/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff29/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff28/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff0a/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff29/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff35/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff0a/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff30/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000004/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff39/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff39/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff30/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff30/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff39/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff12/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff12/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff12/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff12/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff12/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff1d/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff33/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff2c/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff48/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff2c/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff2c/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff2d/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff28/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff28/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff28/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff28/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff28/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff45/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff3d/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff45/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000004/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffff000004/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff01/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff01/100": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 100
-            }
-        },
-        "of:0000ffffff000001/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffff000005/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffff000005/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff27/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000007/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff1b/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff1b/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff1b/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff24/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff2b/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff06/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff11/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff11/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff11/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff24/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffff000002/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff08/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff2a/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff24/12": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 12
-            }
-        },
-        "of:0000ffffffffff08/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff08/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff0b/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff0b/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff0c/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff0b/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff0c/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff26/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff26/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff2f/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffff00000a/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff2f/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff2f/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff1c/108": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 108
-            }
-        },
-        "of:0000ffffffffff2f/14": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 14
-            }
-        },
-        "of:0000ffffffffff34/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff34/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff34/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff4a/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff4a/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff09/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff2a/108": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 108
-            }
-        },
-        "of:0000ffffffffff09/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000002/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff1d/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff1d/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff1d/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000006/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffff000002/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffff000001/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff02/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff02/103": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 103
-            }
-        },
-        "of:0000ffffffffff02/100": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 100
-            }
-        },
-        "of:0000ffffffffff02/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff2f/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff26/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff0e/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff0e/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff4b/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff0e/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffff000008/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff1a/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff1a/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffff000009/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff1a/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff24/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffff000009/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff24/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff000008/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff24/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffff000001/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffff00000b/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffff00000b/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffffffff2f/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff3a/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff3d/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff000003/7": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 7
-            }
-        },
-        "of:0000ffffffffff48/11": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 11
-            }
-        },
-        "of:0000ffffffffff48/10": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 10
-            }
-        },
-        "of:0000ffffffffff3d/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff20/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff41/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff25/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff25/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff1f/108": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 108
-            }
-        },
-        "of:0000ffffffffff10/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff37/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff37/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff37/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        },
-        "of:0000ffffffffff10/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff37/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffff000003/8": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 8
-            }
-        },
-        "of:0000ffffff000003/9": {
-            "optical": {
-                "speed": 0,
-                "type": "COPPER",
-                "port": 9
-            }
-        },
-        "of:0000ffffffffff1f/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff1f/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff1f/104": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 104
-            }
-        },
-        "of:0000ffffffffff1f/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff0f/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff3e/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff0f/105": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 105
-            }
-        },
-        "of:0000ffffffffff48/13": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 13
-            }
-        },
-        "of:0000ffffffffff3e/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff40/106": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 106
-            }
-        },
-        "of:0000ffffffffff0f/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff40/108": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 108
-            }
-        },
-        "of:0000ffffffffff21/102": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 102
-            }
-        },
-        "of:0000ffffffffff21/101": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 101
-            }
-        },
-        "of:0000ffffffffff3f/107": {
-            "optical": {
-                "type": "FIBER",
-                "speed": 0,
-                "port": 107
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/FuncIntentFunction.py b/TestON/tests/FUNC/FUNCoptical/dependencies/FuncIntentFunction.py
deleted file mode 100755
index 616e71e..0000000
--- a/TestON/tests/FUNC/FUNCoptical/dependencies/FuncIntentFunction.py
+++ /dev/null
@@ -1,1629 +0,0 @@
-"""
-    Wrapper functions for FuncIntent
-    This functions include Onosclidriver and Mininetclidriver driver functions
-    Author: kelvin@onlab.us
-"""
-import time
-import copy
-import json
-
-def __init__( self ):
-    self.default = ''
-
-def hostIntent( main,
-                name,
-                host1,
-                host2,
-                onosNode=0,
-                host1Id="",
-                host2Id="",
-                mac1="",
-                mac2="",
-                vlan1="-1",
-                vlan2="-1",
-                sw1="",
-                sw2="",
-                expectedLink=0 ):
-    """
-    Description:
-        Verify add-host-intent
-    Steps:
-        - Discover hosts
-        - Add host intents
-        - Check intents
-        - Verify flows
-        - Ping hosts
-        - Reroute
-            - Link down
-            - Verify flows
-            - Check topology
-            - Ping hosts
-            - Link up
-            - Verify flows
-            - Check topology
-            - Ping hosts
-        - Remove intents
-    Required:
-        name - Type of host intent to add eg. IPV4 | VLAN | Dualstack
-        host1 - Name of first host
-        host2 - Name of second host
-    Optional:
-        onosNode - ONOS node to install the intents in main.CLIs[ ]
-                   0 by default so that it will always use the first
-                   ONOS node
-        host1Id - ONOS id of the first host eg. 00:00:00:00:00:01/-1
-        host2Id - ONOS id of the second host
-        mac1 - Mac address of first host
-        mac2 - Mac address of the second host
-        vlan1 - Vlan tag of first host, defaults to -1
-        vlan2 - Vlan tag of second host, defaults to -1
-        sw1 - First switch to bring down & up for rerouting purpose
-        sw2 - Second switch to bring down & up for rerouting purpose
-        expectedLink - Expected link when the switches are down, it should
-                       be two links lower than the links before the two
-                       switches are down
-    Return:
-        Returns main.TRUE if all verification passed, otherwise return
-        main.FALSE; returns main.FALSE if there is a key error
-    """
-
-    # Assert variables
-    assert main, "There is no main variable"
-    assert name, "variable name is empty"
-    assert host1 and host2, "You must specify hosts"
-
-    global itemName
-    itemName = name
-    h1Id = host1Id
-    h2Id = host2Id
-    h1Mac = mac1
-    h2Mac = mac2
-    vlan1 = vlan1
-    vlan2 = vlan2
-    hostNames = [ host1 , host2 ]
-    intentsId = []
-    stepResult = main.TRUE
-    pingResult = main.TRUE
-    intentResult = main.TRUE
-    removeIntentResult = main.TRUE
-    flowResult = main.TRUE
-    topoResult = main.TRUE
-    linkDownResult = main.TRUE
-    linkUpResult = main.TRUE
-    onosNode = int( onosNode )
-
-    try:
-        if main.hostsData:
-            if not h1Mac:
-                h1Mac = main.hostsData[ host1 ][ 'mac' ]
-            if not h2Mac:
-                h2Mac = main.hostsData[ host2 ][ 'mac' ]
-            if main.hostsData[ host1 ].get( 'vlan' ):
-                vlan1 = main.hostsData[ host1 ][ 'vlan' ]
-            if main.hostsData[ host1 ].get( 'vlan' ):
-                vlan2 = main.hostsData[ host2 ][ 'vlan' ]
-            if not h1Id:
-                h1Id = main.hostsData[ host1 ][ 'id' ]
-            if not h2Id:
-                h2Id = main.hostsData[ host2 ][ 'id' ]
-
-        assert h1Id and h2Id, "You must specify host IDs"
-        if not ( h1Id and h2Id ):
-            main.log.info( "There are no host IDs" )
-            return main.FALSE
-
-    except KeyError:
-        main.log.error( itemName + ": Key error Exception" )
-        return main.FALSE
-
-    # Discover hosts using arping incase pingall discovery failed
-    main.log.info( itemName + ": Discover host using arping" )
-    main.Mininet1.arping( srcHost=host1, dstHost=host2 )
-    main.Mininet1.arping( srcHost=host2, dstHost=host1 )
-    host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
-    host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Adding host intents
-    main.log.info( itemName + ": Adding host intents" )
-    intent1 = main.CLIs[ onosNode ].addHostIntent( hostIdOne=h1Id,
-                                                   hostIdTwo=h2Id )
-    intentsId.append( intent1 )
-
-    # Check intents state
-    time.sleep( main.checkIntentSleep )
-    intentResult = checkIntentState( main, intentsId )
-    checkFlowsCount( main )
-
-    # Check intents state again if first check fails...
-    if not intentResult:
-        intentResult = checkIntentState( main, intentsId )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-    # Verify flows
-    checkFlowsState( main )
-
-    # Ping hosts
-    firstPingResult = pingallHosts( main, hostNames )
-    if not firstPingResult:
-        main.log.debug( "First ping failed, there must be" +
-                       " something wrong with ONOS performance" )
-
-    # Ping hosts again...
-    pingTemp = pingallHosts( main, hostNames )
-    pingResult = pingResult and pingTemp
-    if pingTemp:
-        main.assertReturnString += 'Initial Pingall Passed\n'
-    else:
-        main.assertReturnString += 'Initial Pingall Failed\n'
-
-    # Test rerouting if these variables exist
-    if sw1 and sw2 and expectedLink:
-        # Link down
-        linkDownResult = link( main, sw1, sw2, "down" )
-
-        if linkDownResult:
-            main.assertReturnString += 'Link Down Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, expectedLink )
-        if topoResult:
-            main.assertReturnString += 'Link Down Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-
-        if pingTemp:
-            main.assertReturnString += 'Link Down Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Pingall Failed\n'
-
-        # Check intent states
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link down
-        if linkDownResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link down" )
-        else:
-            main.log.error( itemName + ": Failed to bring link down" )
-
-        # Link up
-        linkUpResult = link( main, sw1, sw2, "up" )
-        time.sleep( main.rerouteSleep )
-
-        if linkUpResult:
-            main.assertReturnString += 'Link Up Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, main.numLinks )
-
-        if topoResult:
-            main.assertReturnString += 'Link Up Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-
-        if pingTemp:
-            main.assertReturnString += 'Link Up Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Pingall Failed\n'
-
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Up Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Intent State Failed\n'
-
-        # Checks ONOS state in link up
-        if linkUpResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link back up" )
-        else:
-            main.log.error( itemName + ": Failed to bring link back up" )
-
-    # Remove all intents
-    removeIntentResult = removeAllIntents( main, intentsId )
-
-    if removeIntentResult:
-        main.assertReturnString += 'Remove Intents Passed'
-    else:
-        main.assertReturnString += 'Remove Intents Failed'
-
-    stepResult = pingResult and linkDownResult and linkUpResult \
-                 and intentResult and removeIntentResult
-
-    return stepResult
-
-def pointIntent( main,
-                 name,
-                 host1,
-                 host2,
-                 onosNode=0,
-                 deviceId1="",
-                 deviceId2="",
-                 port1="",
-                 port2="",
-                 ethType="",
-                 mac1="",
-                 mac2="",
-                 bandwidth="",
-                 lambdaAlloc=False,
-                 ipProto="",
-                 ip1="",
-                 ip2="",
-                 tcp1="",
-                 tcp2="",
-                 sw1="",
-                 sw2="",
-                 expectedLink=0 ):
-
-    """
-    Description:
-        Verify add-point-intent
-    Steps:
-        - Get device ids | ports
-        - Add point intents
-        - Check intents
-        - Verify flows
-        - Ping hosts
-        - Reroute
-            - Link down
-            - Verify flows
-            - Check topology
-            - Ping hosts
-            - Link up
-            - Verify flows
-            - Check topology
-            - Ping hosts
-        - Remove intents
-    Required:
-        name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
-        host1 - Name of first host
-        host2 - Name of second host
-    Optional:
-        onosNode - ONOS node to install the intents in main.CLIs[ ]
-                   0 by default so that it will always use the first
-                   ONOS node
-        deviceId1 - ONOS device id of the first switch, the same as the
-                    location of the first host eg. of:0000000000000001/1,
-                    located at device 1 port 1
-        deviceId2 - ONOS device id of the second switch
-        port1 - The port number where the first host is attached
-        port2 - The port number where the second host is attached
-        ethType - Ethernet type eg. IPV4, IPV6
-        mac1 - Mac address of first host
-        mac2 - Mac address of the second host
-        bandwidth - Bandwidth capacity
-        lambdaAlloc - Allocate lambda, defaults to False
-        ipProto - IP protocol
-        ip1 - IP address of first host
-        ip2 - IP address of second host
-        tcp1 - TCP port of first host
-        tcp2 - TCP port of second host
-        sw1 - First switch to bring down & up for rerouting purpose
-        sw2 - Second switch to bring down & up for rerouting purpose
-        expectedLink - Expected link when the switches are down, it should
-                       be two links lower than the links before the two
-                       switches are down
-    """
-
-    assert main, "There is no main variable"
-    assert name, "variable name is empty"
-    assert host1 and host2, "You must specify hosts"
-
-    global itemName
-    itemName = name
-    host1 = host1
-    host2 = host2
-    hostNames = [ host1, host2 ]
-    intentsId = []
-
-    pingResult = main.TRUE
-    intentResult = main.TRUE
-    removeIntentResult = main.TRUE
-    flowResult = main.TRUE
-    topoResult = main.TRUE
-    linkDownResult = main.TRUE
-    linkUpResult = main.TRUE
-    onosNode = int( onosNode )
-
-    # Adding bidirectional point  intents
-    main.log.info( itemName + ": Adding point intents" )
-    intent1 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
-                                             egressDevice=deviceId2,
-                                             portIngress=port1,
-                                             portEgress=port2,
-                                             ethType=ethType,
-                                             ethSrc=mac1,
-                                             ethDst=mac2,
-                                             bandwidth=bandwidth,
-                                             lambdaAlloc=lambdaAlloc,
-                                             ipProto=ipProto,
-                                             ipSrc=ip1,
-                                             ipDst=ip2,
-                                             tcpSrc=tcp1,
-                                             tcpDst=tcp2 )
-
-    intentsId.append( intent1 )
-    intent2 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
-                                             egressDevice=deviceId1,
-                                             portIngress=port2,
-                                             portEgress=port1,
-                                             ethType=ethType,
-                                             ethSrc=mac2,
-                                             ethDst=mac1,
-                                             bandwidth=bandwidth,
-                                             lambdaAlloc=lambdaAlloc,
-                                             ipProto=ipProto,
-                                             ipSrc=ip2,
-                                             ipDst=ip1,
-                                             tcpSrc=tcp2,
-                                             tcpDst=tcp1 )
-    intentsId.append( intent2 )
-
-    # Check intents state
-    time.sleep( main.checkIntentSleep )
-    intentResult = checkIntentState( main, intentsId )
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Check intents state again if first check fails...
-    if not intentResult:
-        intentResult = checkIntentState( main, intentsId )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-    # Verify flows
-    checkFlowsState( main )
-
-    # Ping hosts
-    pingTemp = pingallHosts( main, hostNames )
-    pingResult = pingResult and pingTemp
-    if pingTemp:
-        main.assertReturnString += 'Initial Pingall Passed\n'
-    else:
-        main.assertReturnString += 'Initial Pingall Failed\n'
-
-    # Test rerouting if these variables exist
-    if sw1 and sw2 and expectedLink:
-        # link down
-        linkDownResult = link( main, sw1, sw2, "down" )
-
-        if linkDownResult:
-            main.assertReturnString += 'Link Down Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, expectedLink )
-        if topoResult:
-            main.assertReturnString += 'Link Down Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-        if pingTemp:
-            main.assertReturnString += 'Link Down Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Pingall Failed\n'
-
-        # Check intent state
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link down
-        if linkDownResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link down" )
-        else:
-            main.log.error( itemName + ": Failed to bring link down" )
-
-        # link up
-        linkUpResult = link( main, sw1, sw2, "up" )
-        if linkUpResult:
-            main.assertReturnString += 'Link Up Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Failed\n'
-
-        time.sleep( main.rerouteSleep )
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, main.numLinks )
-        if topoResult:
-            main.assertReturnString += 'Link Up Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-
-        if pingTemp:
-            main.assertReturnString += 'Link Up Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Pingall Failed\n'
-
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Up Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Intent State Failed\n'
-
-        # Checks ONOS state in link up
-        if linkUpResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link back up" )
-        else:
-            main.log.error( itemName + ": Failed to bring link back up" )
-
-    # Remove all intents
-    removeIntentResult = removeAllIntents( main, intentsId )
-    if removeIntentResult:
-        main.assertReturnString += 'Remove Intents Passed'
-    else:
-        main.assertReturnString += 'Remove Intents Failed'
-
-    stepResult = pingResult and linkDownResult and linkUpResult \
-                 and intentResult and removeIntentResult
-
-    return stepResult
-
-def pointIntentTcp( main,
-                    name,
-                    host1,
-                    host2,
-                    onosNode=0,
-                    deviceId1="",
-                    deviceId2="",
-                    port1="",
-                    port2="",
-                    ethType="",
-                    mac1="",
-                    mac2="",
-                    bandwidth="",
-                    lambdaAlloc=False,
-                    ipProto="",
-                    ip1="",
-                    ip2="",
-                    tcp1="",
-                    tcp2="",
-                    sw1="",
-                    sw2="",
-                    expectedLink=0 ):
-
-    """
-    Description:
-        Verify add-point-intent only for TCP
-    Steps:
-        - Get device ids | ports
-        - Add point intents
-        - Check intents
-        - Verify flows
-        - Ping hosts
-        - Reroute
-            - Link down
-            - Verify flows
-            - Check topology
-            - Ping hosts
-            - Link up
-            - Verify flows
-            - Check topology
-            - Ping hosts
-        - Remove intents
-    Required:
-        name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
-        host1 - Name of first host
-        host2 - Name of second host
-    Optional:
-        onosNode - ONOS node to install the intents in main.CLIs[ ]
-                   0 by default so that it will always use the first
-                   ONOS node
-        deviceId1 - ONOS device id of the first switch, the same as the
-                    location of the first host eg. of:0000000000000001/1,
-                    located at device 1 port 1
-        deviceId2 - ONOS device id of the second switch
-        port1 - The port number where the first host is attached
-        port2 - The port number where the second host is attached
-        ethType - Ethernet type eg. IPV4, IPV6
-        mac1 - Mac address of first host
-        mac2 - Mac address of the second host
-        bandwidth - Bandwidth capacity
-        lambdaAlloc - Allocate lambda, defaults to False
-        ipProto - IP protocol
-        ip1 - IP address of first host
-        ip2 - IP address of second host
-        tcp1 - TCP port of first host
-        tcp2 - TCP port of second host
-        sw1 - First switch to bring down & up for rerouting purpose
-        sw2 - Second switch to bring down & up for rerouting purpose
-        expectedLink - Expected link when the switches are down, it should
-                       be two links lower than the links before the two
-                       switches are down
-    """
-
-    assert main, "There is no main variable"
-    assert name, "variable name is empty"
-    assert host1 and host2, "You must specify hosts"
-
-    global itemName
-    itemName = name
-    host1 = host1
-    host2 = host2
-    hostNames = [ host1, host2 ]
-    intentsId = []
-
-    iperfResult = main.TRUE
-    intentResult = main.TRUE
-    removeIntentResult = main.TRUE
-    flowResult = main.TRUE
-    topoResult = main.TRUE
-    linkDownResult = main.TRUE
-    linkUpResult = main.TRUE
-    onosNode = int( onosNode )
-
-    # Adding bidirectional point  intents
-    main.log.info( itemName + ": Adding point intents" )
-    intent1 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
-                                                    egressDevice=deviceId2,
-                                                    portIngress=port1,
-                                                    portEgress=port2,
-                                                    ethType=ethType,
-                                                    ethSrc=mac1,
-                                                    ethDst=mac2,
-                                                    bandwidth=bandwidth,
-                                                    lambdaAlloc=lambdaAlloc,
-                                                    ipProto=ipProto,
-                                                    ipSrc=ip1,
-                                                    ipDst=ip2,
-                                                    tcpSrc=tcp1,
-                                                    tcpDst="" )
-
-    intent2 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
-                                                    egressDevice=deviceId1,
-                                                    portIngress=port2,
-                                                    portEgress=port1,
-                                                    ethType=ethType,
-                                                    ethSrc=mac2,
-                                                    ethDst=mac1,
-                                                    bandwidth=bandwidth,
-                                                    lambdaAlloc=lambdaAlloc,
-                                                    ipProto=ipProto,
-                                                    ipSrc=ip2,
-                                                    ipDst=ip1,
-                                                    tcpSrc=tcp2,
-                                                    tcpDst="" )
-
-    intent3 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
-                                                    egressDevice=deviceId2,
-                                                    portIngress=port1,
-                                                    portEgress=port2,
-                                                    ethType=ethType,
-                                                    ethSrc=mac1,
-                                                    ethDst=mac2,
-                                                    bandwidth=bandwidth,
-                                                    lambdaAlloc=lambdaAlloc,
-                                                    ipProto=ipProto,
-                                                    ipSrc=ip1,
-                                                    ipDst=ip2,
-                                                    tcpSrc="",
-                                                    tcpDst=tcp2 )
-
-    intent4 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
-                                                    egressDevice=deviceId1,
-                                                    portIngress=port2,
-                                                    portEgress=port1,
-                                                    ethType=ethType,
-                                                    ethSrc=mac2,
-                                                    ethDst=mac1,
-                                                    bandwidth=bandwidth,
-                                                    lambdaAlloc=lambdaAlloc,
-                                                    ipProto=ipProto,
-                                                    ipSrc=ip2,
-                                                    ipDst=ip1,
-                                                    tcpSrc="",
-                                                    tcpDst=tcp1 )
-    intentsId.append( intent1 )
-    intentsId.append( intent2 )
-    intentsId.append( intent3 )
-    intentsId.append( intent4 )
-
-    # Check intents state
-    time.sleep( main.checkIntentSleep )
-    intentResult = checkIntentState( main, intentsId )
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Check intents state again if first check fails...
-    if not intentResult:
-        intentResult = checkIntentState( main, intentsId )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Verify flows
-    checkFlowsState( main )
-
-    # Run iperf to both host
-    iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
-    iperfResult = iperfResult and iperfTemp
-    if iperfTemp:
-        main.assertReturnString += 'Initial Iperf Passed\n'
-    else:
-        main.assertReturnString += 'Initial Iperf Failed\n'
-
-    # Test rerouting if these variables exist
-    if sw1 and sw2 and expectedLink:
-        # link down
-        linkDownResult = link( main, sw1, sw2, "down" )
-
-        if linkDownResult:
-            main.assertReturnString += 'Link Down Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, expectedLink )
-        if topoResult:
-            main.assertReturnString += 'Link Down Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Topology State Failed\n'
-
-        # Run iperf to both host
-        iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
-        iperfResult = iperfResult and iperfTemp
-        if iperfTemp:
-            main.assertReturnString += 'Link Down Iperf Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Iperf Failed\n'
-
-        # Check intent state
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link down
-        if linkDownResult and topoResult and iperfResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link down" )
-        else:
-            main.log.error( itemName + ": Failed to bring link down" )
-
-        # link up
-        linkUpResult = link( main, sw1, sw2, "up" )
-        if linkUpTemp:
-            main.assertReturnString += 'Link Up Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Failed\n'
-
-        time.sleep( main.rerouteSleep )
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, main.numLinks )
-
-        if topoResult:
-            main.assertReturnString += 'Link Up Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Topology State Failed\n'
-
-        # Run iperf to both host
-        iperfTemp = main.Mininet1.iperftcp( host1,host2,10 )
-        iperfResult = iperfResult and iperfTemp
-        if iperfTemp:
-            main.assertReturnString += 'Link Up Iperf Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Iperf Failed\n'
-
-        # Check intent state
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link up
-        if linkUpResult and topoResult and iperfResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link back up" )
-        else:
-            main.log.error( itemName + ": Failed to bring link back up" )
-
-    # Remove all intents
-    removeIntentResult = removeAllIntents( main, intentsId )
-    if removeIntentResult:
-        main.assertReturnString += 'Remove Intents Passed'
-    else:
-        main.assertReturnString += 'Remove Intents Failed'
-
-    stepResult = iperfResult and linkDownResult and linkUpResult \
-                 and intentResult and removeIntentResult
-
-    return stepResult
-
-def singleToMultiIntent( main,
-                         name,
-                         hostNames,
-                         onosNode=0,
-                         devices="",
-                         ports=None,
-                         ethType="",
-                         macs=None,
-                         bandwidth="",
-                         lambdaAlloc=False,
-                         ipProto="",
-                         ipAddresses="",
-                         tcp="",
-                         sw1="",
-                         sw2="",
-                         expectedLink=0 ):
-    """
-    Verify Single to Multi Point intents
-    NOTE:If main.hostsData is not defined, variables data should be passed
-    in the same order index wise. All devices in the list should have the same
-    format, either all the devices have its port or it doesn't.
-    eg. hostName = [ 'h1', 'h2' ,..  ]
-        devices = [ 'of:0000000000000001', 'of:0000000000000002', ...]
-        ports = [ '1', '1', ..]
-        ...
-    Description:
-        Verify add-single-to-multi-intent iterates through the list of given
-        host | devices and add intents
-    Steps:
-        - Get device ids | ports
-        - Add single to multi point intents
-        - Check intents
-        - Verify flows
-        - Ping hosts
-        - Reroute
-            - Link down
-            - Verify flows
-            - Check topology
-            - Ping hosts
-            - Link up
-            - Verify flows
-            - Check topology
-            - Ping hosts
-        - Remove intents
-    Required:
-        name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
-        hostNames - List of host names
-    Optional:
-        onosNode - ONOS node to install the intents in main.CLIs[ ]
-                   0 by default so that it will always use the first
-                   ONOS node
-        devices - List of device ids in the same order as the hosts
-                  in hostNames
-        ports - List of port numbers in the same order as the device in
-                devices
-        ethType - Ethernet type eg. IPV4, IPV6
-        macs - List of hosts mac address in the same order as the hosts in
-               hostNames
-        bandwidth - Bandwidth capacity
-        lambdaAlloc - Allocate lambda, defaults to False
-        ipProto - IP protocol
-        ipAddresses - IP addresses of host in the same order as the hosts in
-                      hostNames
-        tcp - TCP ports in the same order as the hosts in hostNames
-        sw1 - First switch to bring down & up for rerouting purpose
-        sw2 - Second switch to bring down & up for rerouting purpose
-        expectedLink - Expected link when the switches are down, it should
-                       be two links lower than the links before the two
-                       switches are down
-    """
-
-    assert main, "There is no main variable"
-    assert hostNames, "You must specify hosts"
-    assert devices or main.hostsData, "You must specify devices"
-
-    global itemName
-    itemName = name
-    tempHostsData = {}
-    intentsId = []
-    onosNode = int( onosNode )
-
-    macsDict = {}
-    ipDict = {}
-    if hostNames and devices:
-        if len( hostNames ) != len( devices ):
-            main.log.debug( "hosts and devices does not have the same length" )
-            #print "len hostNames = ", len( hostNames )
-            #print "len devices = ", len( devices )
-            return main.FALSE
-        if ports:
-            if len( ports ) != len( devices ):
-                main.log.error( "Ports and devices does " +
-                                "not have the same length" )
-                #print "len devices = ", len( devices )
-                #print "len ports = ", len( ports )
-                return main.FALSE
-        else:
-            main.log.info( "Device Ports are not specified" )
-        if macs:
-            for i in range( len( devices ) ):
-                macsDict[ devices[ i ] ] = macs[ i ]
-
-    elif hostNames and not devices and main.hostsData:
-        devices = []
-        main.log.info( "singleToMultiIntent function is using main.hostsData" )
-        for host in hostNames:
-               devices.append( main.hostsData.get( host ).get( 'location' ) )
-               macsDict[ main.hostsData.get( host ).get( 'location' ) ] = \
-                           main.hostsData.get( host ).get( 'mac' )
-               ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
-                           main.hostsData.get( host ).get( 'ipAddresses' )
-        #print main.hostsData
-
-    #print 'host names = ', hostNames
-    #print 'devices = ', devices
-    #print "macsDict = ", macsDict
-
-    pingResult = main.TRUE
-    intentResult = main.TRUE
-    removeIntentResult = main.TRUE
-    flowResult = main.TRUE
-    topoResult = main.TRUE
-    linkDownResult = main.TRUE
-    linkUpResult = main.TRUE
-
-    devicesCopy = copy.copy( devices )
-    if ports:
-        portsCopy = copy.copy( ports )
-    main.log.info( itemName + ": Adding single point to multi point intents" )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Adding bidirectional point  intents
-    for i in range( len( devices ) ):
-        ingressDevice = devicesCopy[ i ]
-        egressDeviceList = copy.copy( devicesCopy )
-        egressDeviceList.remove( ingressDevice )
-        if ports:
-            portIngress = portsCopy[ i ]
-            portEgressList = copy.copy( portsCopy )
-            del portEgressList[ i ]
-        else:
-            portIngress = ""
-            portEgressList = None
-        if not macsDict:
-            srcMac = ""
-        else:
-            srcMac = macsDict[ ingressDevice ]
-            if srcMac == None:
-                main.log.debug( "There is no MAC in device - " + ingressDevice )
-                srcMac = ""
-
-        intentsId.append(
-                        main.CLIs[ onosNode ].addSinglepointToMultipointIntent(
-                                            ingressDevice=ingressDevice,
-                                            egressDeviceList=egressDeviceList,
-                                            portIngress=portIngress,
-                                            portEgressList=portEgressList,
-                                            ethType=ethType,
-                                            ethSrc=srcMac,
-                                            bandwidth=bandwidth,
-                                            lambdaAlloc=lambdaAlloc,
-                                            ipProto=ipProto,
-                                            ipSrc="",
-                                            ipDst="",
-                                            tcpSrc="",
-                                            tcpDst="" ) )
-
-    # Wait some time for the flow to go through when using multi instance
-    pingTemp = pingallHosts( main, hostNames )
-
-    # Check intents state
-    time.sleep( main.checkIntentSleep )
-    intentResult = checkIntentState( main, intentsId )
-
-    # Check intents state again if first check fails...
-    if not intentResult:
-        intentResult = checkIntentState( main, intentsId )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-    # Verify flows
-    checkFlowsState( main )
-
-    pingTemp = pingallHosts( main, hostNames )
-    pingResult = pingResult and pingTemp
-    if pingTemp:
-        main.assertReturnString += 'Initial Pingall Passed\n'
-    else:
-        main.assertReturnString += 'Initial Pingall Failed\n'
-
-    # Test rerouting if these variables exist
-    if sw1 and sw2 and expectedLink:
-        # link down
-        linkDownResult = link( main, sw1, sw2, "down" )
-
-        if linkDownResult:
-            main.assertReturnString += 'Link Down Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, expectedLink )
-        if topoResult:
-            main.assertReturnString += 'Link Down Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-        if pingTemp:
-            main.assertReturnString += 'Link Down Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Pingall Failed\n'
-
-        # Check intent state
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link down
-        if linkDownResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link down" )
-        else:
-            main.log.error( itemName + ": Failed to bring link down" )
-
-        # link up
-        linkUpResult = link( main, sw1, sw2, "up" )
-        if linkUpResult:
-            main.assertReturnString += 'Link Up Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Failed\n'
-
-        time.sleep( main.rerouteSleep )
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, main.numLinks )
-        if topoResult:
-            main.assertReturnString += 'Link Up Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-        if pingTemp:
-            main.assertReturnString += 'Link Up Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Pingall Failed\n'
-
-        # Check Intents
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Up Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Intent State Failed\n'
-
-        # Checks ONOS state in link up
-        if linkUpResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link back up" )
-        else:
-            main.log.error( itemName + ": Failed to bring link back up" )
-
-    # Remove all intents
-    removeIntentResult = removeAllIntents( main, intentsId )
-    if removeIntentResult:
-        main.assertReturnString += 'Remove Intents Passed'
-    else:
-        main.assertReturnString += 'Remove Intents Failed'
-
-    stepResult = pingResult and linkDownResult and linkUpResult \
-                 and intentResult and removeIntentResult
-
-    return stepResult
-
-def multiToSingleIntent( main,
-                         name,
-                         hostNames,
-                         onosNode=0,
-                         devices="",
-                         ports=None,
-                         ethType="",
-                         macs=None,
-                         bandwidth="",
-                         lambdaAlloc=False,
-                         ipProto="",
-                         ipAddresses="",
-                         tcp="",
-                         sw1="",
-                         sw2="",
-                         expectedLink=0 ):
-    """
-    Verify Single to Multi Point intents
-    NOTE:If main.hostsData is not defined, variables data should be passed in the
-    same order index wise. All devices in the list should have the same
-    format, either all the devices have its port or it doesn't.
-    eg. hostName = [ 'h1', 'h2' ,..  ]
-        devices = [ 'of:0000000000000001', 'of:0000000000000002', ...]
-        ports = [ '1', '1', ..]
-        ...
-    Description:
-        Verify add-multi-to-single-intent
-    Steps:
-        - Get device ids | ports
-        - Add multi to single point intents
-        - Check intents
-        - Verify flows
-        - Ping hosts
-        - Reroute
-            - Link down
-            - Verify flows
-            - Check topology
-            - Ping hosts
-            - Link up
-            - Verify flows
-            - Check topology
-            - Ping hosts
-        - Remove intents
-    Required:
-        name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
-        hostNames - List of host names
-    Optional:
-        onosNode - ONOS node to install the intents in main.CLIs[ ]
-                   0 by default so that it will always use the first
-                   ONOS node
-        devices - List of device ids in the same order as the hosts
-                  in hostNames
-        ports - List of port numbers in the same order as the device in
-                devices
-        ethType - Ethernet type eg. IPV4, IPV6
-        macs - List of hosts mac address in the same order as the hosts in
-               hostNames
-        bandwidth - Bandwidth capacity
-        lambdaAlloc - Allocate lambda, defaults to False
-        ipProto - IP protocol
-        ipAddresses - IP addresses of host in the same order as the hosts in
-                      hostNames
-        tcp - TCP ports in the same order as the hosts in hostNames
-        sw1 - First switch to bring down & up for rerouting purpose
-        sw2 - Second switch to bring down & up for rerouting purpose
-        expectedLink - Expected link when the switches are down, it should
-                       be two links lower than the links before the two
-                       switches are down
-    """
-
-    assert main, "There is no main variable"
-    assert hostNames, "You must specify hosts"
-    assert devices or main.hostsData, "You must specify devices"
-
-    global itemName
-    itemName = name
-    tempHostsData = {}
-    intentsId = []
-    onosNode = int( onosNode )
-
-    macsDict = {}
-    ipDict = {}
-    if hostNames and devices:
-        if len( hostNames ) != len( devices ):
-            main.log.debug( "hosts and devices does not have the same length" )
-            #print "len hostNames = ", len( hostNames )
-            #print "len devices = ", len( devices )
-            return main.FALSE
-        if ports:
-            if len( ports ) != len( devices ):
-                main.log.error( "Ports and devices does " +
-                                "not have the same length" )
-                #print "len devices = ", len( devices )
-                #print "len ports = ", len( ports )
-                return main.FALSE
-        else:
-            main.log.info( "Device Ports are not specified" )
-        if macs:
-            for i in range( len( devices ) ):
-                macsDict[ devices[ i ] ] = macs[ i ]
-    elif hostNames and not devices and main.hostsData:
-        devices = []
-        main.log.info( "multiToSingleIntent function is using main.hostsData" )
-        for host in hostNames:
-               devices.append( main.hostsData.get( host ).get( 'location' ) )
-               macsDict[ main.hostsData.get( host ).get( 'location' ) ] = \
-                           main.hostsData.get( host ).get( 'mac' )
-               ipDict[ main.hostsData.get( host ).get( 'location' ) ] = \
-                           main.hostsData.get( host ).get( 'ipAddresses' )
-        #print main.hostsData
-
-    #print 'host names = ', hostNames
-    #print 'devices = ', devices
-    #print "macsDict = ", macsDict
-
-    pingResult = main.TRUE
-    intentResult = main.TRUE
-    removeIntentResult = main.TRUE
-    flowResult = main.TRUE
-    topoResult = main.TRUE
-    linkDownResult = main.TRUE
-    linkUpResult = main.TRUE
-
-    devicesCopy = copy.copy( devices )
-    if ports:
-        portsCopy = copy.copy( ports )
-    main.log.info( itemName + ": Adding multi point to single point intents" )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-
-    # Adding bidirectional point  intents
-    for i in range( len( devices ) ):
-        egressDevice = devicesCopy[ i ]
-        ingressDeviceList = copy.copy( devicesCopy )
-        ingressDeviceList.remove( egressDevice )
-        if ports:
-            portEgress = portsCopy[ i ]
-            portIngressList = copy.copy( portsCopy )
-            del portIngressList[ i ]
-        else:
-            portEgress = ""
-            portIngressList = None
-        if not macsDict:
-            dstMac = ""
-        else:
-            dstMac = macsDict[ egressDevice ]
-            if dstMac == None:
-                main.log.debug( "There is no MAC in device - " + egressDevice )
-                dstMac = ""
-
-        intentsId.append(
-                        main.CLIs[ onosNode ].addMultipointToSinglepointIntent(
-                                            ingressDeviceList=ingressDeviceList,
-                                            egressDevice=egressDevice,
-                                            portIngressList=portIngressList,
-                                            portEgress=portEgress,
-                                            ethType=ethType,
-                                            ethDst=dstMac,
-                                            bandwidth=bandwidth,
-                                            lambdaAlloc=lambdaAlloc,
-                                            ipProto=ipProto,
-                                            ipSrc="",
-                                            ipDst="",
-                                            tcpSrc="",
-                                            tcpDst="" ) )
-
-    pingTemp = pingallHosts( main, hostNames )
-
-    # Check intents state
-    time.sleep( main.checkIntentSleep )
-    intentResult = checkIntentState( main, intentsId )
-
-    # Check intents state again if first check fails...
-    if not intentResult:
-        intentResult = checkIntentState( main, intentsId )
-
-    # Check flows count in each node
-    checkFlowsCount( main )
-    # Verify flows
-    checkFlowsState( main )
-
-    # Ping hosts
-    pingTemp = pingallHosts( main, hostNames )
-
-    # Ping hosts again...
-    pingTemp = pingallHosts( main, hostNames )
-    pingResult = pingResult and pingTemp
-    if pingTemp:
-        main.assertReturnString += 'Initial Pingall Passed\n'
-    else:
-        main.assertReturnString += 'Initial Pingall Failed\n'
-
-    # Test rerouting if these variables exist
-    if sw1 and sw2 and expectedLink:
-        # link down
-        linkDownResult = link( main, sw1, sw2, "down" )
-
-        if linkDownResult:
-            main.assertReturnString += 'Link Down Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Failed\n'
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, expectedLink )
-        if topoResult:
-            main.assertReturnString += 'Link Down Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-        if pingTemp:
-            main.assertReturnString += 'Link Down Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Pingall Failed\n'
-
-        # Check intent state
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Down Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Down Intent State Failed\n'
-
-        # Checks ONOS state in link down
-        if linkDownResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link down" )
-        else:
-            main.log.error( itemName + ": Failed to bring link down" )
-
-        # link up
-        linkUpResult = link( main, sw1, sw2, "up" )
-        if linkUpResult:
-            main.assertReturnString += 'Link Up Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Failed\n'
-
-        time.sleep( main.rerouteSleep )
-
-        # Check flows count in each node
-        checkFlowsCount( main )
-        # Verify flows
-        checkFlowsState( main )
-
-        # Check OnosTopology
-        topoResult = checkTopology( main, main.numLinks )
-        if topoResult:
-            main.assertReturnString += 'Link Up Topology State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Topology State Failed\n'
-
-        # Ping hosts
-        pingTemp = pingallHosts( main, hostNames )
-        pingResult = pingResult and pingTemp
-        if pingTemp:
-            main.assertReturnString += 'Link Up Pingall Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Pingall Failed\n'
-
-        # Check Intents
-        intentTemp = checkIntentState( main, intentsId )
-        intentResult = intentResult and intentTemp
-        if intentTemp:
-            main.assertReturnString += 'Link Up Intent State Passed\n'
-        else:
-            main.assertReturnString += 'Link Up Intent State Failed\n'
-
-        # Checks ONOS state in link up
-        if linkUpResult and topoResult and pingResult and intentResult:
-            main.log.info( itemName + ": Successfully brought link back up" )
-        else:
-            main.log.error( itemName + ": Failed to bring link back up" )
-
-    # Remove all intents
-    removeIntentResult = removeAllIntents( main, intentsId )
-    if removeIntentResult:
-        main.assertReturnString += 'Remove Intents Passed'
-    else:
-        main.assertReturnString += 'Remove Intents Failed'
-
-    stepResult = pingResult and linkDownResult and linkUpResult \
-                 and intentResult and removeIntentResult
-
-    return stepResult
-
-def pingallHosts( main, hostList ):
-    # Ping all host in the hosts list variable
-    main.log.info( "Pinging: " + str( hostList ) )
-    return main.Mininet1.pingallHosts( hostList )
-
-def getHostsData( main ):
-    """
-        Use fwd app and pingall to discover all the hosts
-    """
-
-    activateResult = main.TRUE
-    appCheck = main.TRUE
-    getDataResult = main.TRUE
-    main.log.info( "Activating reactive forwarding app " )
-    activateResult = main.CLIs[ 0 ].activateApp( "org.onosproject.fwd" )
-    time.sleep( main.fwdSleep )
-
-    for i in range( main.numCtrls ):
-        appCheck = appCheck and main.CLIs[ i ].appToIDCheck()
-        if appCheck != main.TRUE:
-            main.log.warn( main.CLIs[ i ].apps() )
-            main.log.warn( main.CLIs[ i ].appIDs() )
-
-    pingResult = main.Mininet1.pingall( timeout = 600 )
-    hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
-    hosts = main.Mininet1.getHosts().keys()
-    # TODO: Make better use of new getHosts function
-    for host in hosts:
-        main.hostsData[ host ] = {}
-        main.hostsData[ host ][ 'mac' ] =  \
-            main.Mininet1.getMacAddress( host ).upper()
-        for hostj in hostsJson:
-            if main.hostsData[ host ][ 'mac' ] == hostj[ 'mac' ]:
-                main.hostsData[ host ][ 'id' ] = hostj[ 'id' ]
-                main.hostsData[ host ][ 'vlan' ] = hostj[ 'vlan' ]
-                main.hostsData[ host ][ 'location' ] = \
-                            hostj[ 'location' ][ 'elementId' ] + '/' + \
-                            hostj[ 'location' ][ 'port' ]
-                main.hostsData[ host ][ 'ipAddresses' ] = hostj[ 'ipAddresses' ]
-
-    main.log.info( "Deactivating reactive forwarding app " )
-    deactivateResult = main.CLIs[ 0 ].deactivateApp( "org.onosproject.fwd" )
-    if activateResult and deactivateResult and main.hostsData:
-        main.log.info( "Successfully used fwd app to discover hosts " )
-        getDataResult = main.TRUE
-    else:
-        main.log.info( "Failed to use fwd app to discover hosts " )
-        getDataResult = main.FALSE
-
-    print main.hostsData
-
-    return getDataResult
-
-def checkTopology( main, expectedLink ):
-    statusResult = main.TRUE
-    # Check onos topology
-    main.log.info( itemName + ": Checking ONOS topology " )
-
-    for i in range( main.numCtrls ):
-        statusResult = main.CLIs[ i ].checkStatus( main.numSwitch,
-                                                   expectedLink )\
-                       and statusResult
-    if not statusResult:
-        main.log.error( itemName + ": Topology mismatch" )
-    else:
-        main.log.info( itemName + ": Topology match" )
-    return statusResult
-
-def checkIntentState( main, intentsId ):
-    """
-        This function will check intent state to make sure all the intents
-        are in INSTALLED state
-    """
-
-    intentResult = main.TRUE
-    results = []
-
-    main.log.info( itemName + ": Checking intents state" )
-    # First check of intents
-    for i in range( main.numCtrls ):
-        tempResult = main.CLIs[ i ].checkIntentState( intentsId=intentsId )
-        results.append( tempResult )
-
-    expectedState = [ 'INSTALLED', 'INSTALLING' ]
-
-    if all( result == main.TRUE for result in results ):
-        main.log.info( itemName + ": Intents are installed correctly" )
-    else:
-        # Wait for at least 5 second before checking the intents again
-        time.sleep( 5 )
-        results = []
-        # Second check of intents since some of the intents may be in
-        # INSTALLING state, they should be in INSTALLED at this time
-        for i in range( main.numCtrls ):
-            tempResult = main.CLIs[ i ].checkIntentState(
-                                                        intentsId=intentsId )
-            results.append( tempResult )
-        if all( result == main.TRUE for result in results ):
-            main.log.info( itemName + ": Intents are installed correctly" )
-        else:
-            main.log.error( itemName + ": Intents are NOT installed correctly" )
-            intentResult = main.FALSE
-
-    return intentResult
-
-def checkFlowsState( main ):
-
-    main.log.info( itemName + ": Check flows state" )
-    checkFlowsResult = main.CLIs[ 0 ].checkFlowsState()
-    return checkFlowsResult
-
-def link( main, sw1, sw2, option):
-
-    # link down
-    main.log.info( itemName + ": Bring link " + option + "between " +
-                       sw1 + " and " + sw2 )
-    linkResult = main.Mininet1.link( end1=sw1, end2=sw2, option=option )
-    return linkResult
-
-def removeAllIntents( main, intentsId ):
-    """
-        Remove all intents in the intentsId
-    """
-
-    onosSummary = []
-    removeIntentResult = main.TRUE
-    # Remove intents
-    for intent in intentsId:
-        main.CLIs[ 0 ].removeIntent( intentId=intent, purge=True )
-
-    time.sleep( main.removeIntentSleep )
-
-    # If there is remianing intents then remove intents should fail
-    for i in range( main.numCtrls ):
-        onosSummary.append( json.loads( main.CLIs[ i ].summary() ) )
-
-    for summary in onosSummary:
-        if summary.get( 'intents' ) != 0:
-            main.log.warn( itemName + ": There are " +
-                           str( summary.get( 'intents' ) ) +
-                           " intents remaining in node " +
-                           str( summary.get( 'node' ) ) +
-                           ", failed to remove all the intents " )
-            removeIntentResult = main.FALSE
-
-    if removeIntentResult:
-        main.log.info( itemName + ": There are no more intents remaining, " +
-                       "successfully removed all the intents." )
-
-    return removeIntentResult
-
-def checkFlowsCount( main ):
-    """
-        Check flows count in each node
-    """
-
-    flowsCount = []
-    main.log.info( itemName + ": Checking flows count in each ONOS node" )
-    for i in range( main.numCtrls ):
-        summaryResult = main.CLIs[ i ].summary()
-        if not summaryResult:
-            main.log.error( itemName + ": There is something wrong with " +
-                            "summary command" )
-            return main.FALSE
-        else:
-            summaryJson = json.loads( summaryResult )
-            flowsCount.append( summaryJson.get( 'flows' ) )
-
-    if flowsCount:
-        if all( flows==flowsCount[ 0 ] for flows in flowsCount ):
-            main.log.info( itemName + ": There are " + str( flowsCount[ 0 ] ) +
-                           " flows in all ONOS node" )
-        else:
-            for i in range( main.numCtrls ):
-                main.log.debug( itemName + ": ONOS node " + str( i ) + " has " +
-                                str( flowsCount[ i ] ) + " flows" )
-    else:
-        main.log.error( "Checking flows count failed, check summary command" )
-        return main.FALSE
-
-    return main.TRUE
-
-def checkLeaderChange( leaders1, leaders2 ):
-    """
-        Checks for a change in intent partition leadership.
-
-        Takes the output of leaders -c in json string format before and after
-        a potential change as input
-
-        Returns main.TRUE if no mismatches are detected
-        Returns main.FALSE if there is a mismatch or on error loading the input
-    """
-    try:
-        leaders1 = json.loads( leaders1 )
-        leaders2 = json.loads( leaders2 )
-    except ( AttributeError, TypeError):
-        main.log.exception( self.name + ": Object not as expected" )
-        return main.FALSE
-    except Exception:
-        main.log.exception( self.name + ": Uncaught exception!" )
-        main.cleanup()
-        main.exit()
-    main.log.info( "Checking Intent Paritions for Change in Leadership" )
-    mismatch = False
-    for dict1 in leaders1:
-        if "intent" in dict1.get( "topic", [] ):
-            for dict2 in leaders2:
-                if dict1.get( "topic", 0 ) == dict2.get( "topic", 0 ) and \
-                    dict1.get( "leader", 0 ) != dict2.get( "leader", 0 ):
-                    mismatch = True
-                    main.log.error( "{0} changed leader from {1} to {2}".\
-                        format( dict1.get( "topic", "no-topic" ),\
-                            dict1.get( "leader", "no-leader" ),\
-                            dict2.get( "leader", "no-leader" ) ) )
-    if mismatch:
-        return main.FALSE
-    else:
-        return main.TRUE
-
-def report( main ):
-    """
-    Report errors/warnings/exceptions
-    """
-
-    main.ONOSbench.logReport( main.ONOSip[ 0 ],
-                              [ "INFO",
-                                "FOLLOWER",
-                                "WARN",
-                                "flow",
-                                "ERROR",
-                                "Except" ],
-                              "s" )
-
-    main.log.info( "ERROR report: \n" )
-    for i in range( main.numCtrls ):
-        main.ONOSbench.logReport( main.ONOSip[ i ],
-                [ "ERROR" ],
-                "d" )
-
-    main.log.info( "EXCEPTIONS report: \n" )
-    for i in range( main.numCtrls ):
-        main.ONOSbench.logReport( main.ONOSip[ i ],
-                [ "Except" ],
-                "d" )
-
-    main.log.info( "WARNING report: \n" )
-    for i in range( main.numCtrls ):
-        main.ONOSbench.logReport( main.ONOSip[ i ],
-                [ "WARN" ],
-                "d" )
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/TopoConfig.json b/TestON/tests/FUNC/FUNCoptical/dependencies/TopoConfig.json
new file mode 100644
index 0000000..e24ed20
--- /dev/null
+++ b/TestON/tests/FUNC/FUNCoptical/dependencies/TopoConfig.json
@@ -0,0 +1,99 @@
+{
+    "linkConfig": [
+        {
+            "type": "wdmLink",
+            "params": {
+                "port2": 2100,
+                "port1": 1200,
+                "nodeName2": "OE2",
+                "nodeName1": "OE1"
+            },
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:01",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:02",
+            "allowed": true
+        },
+        {
+            "type": "wdmLink",
+            "params": {
+                "port2": 3200,
+                "port1": 2300,
+                "nodeName2": "OE3",
+                "nodeName1": "OE2"
+            },
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:02",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:03",
+            "allowed": true
+        },
+        {
+            "type": "wdmLink",
+            "params": {
+                "port2": 1300,
+                "port1": 3100,
+                "nodeName2": "OE1",
+                "nodeName1": "OE3"
+            },
+            "nodeDpid1": "00:00:ff:ff:ff:ff:ff:03",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:01",
+            "allowed": true
+        },
+        {
+            "type": "pktOptLink",
+            "params": {
+                "port2": 1,
+                "port1": 2,
+                "nodeName2": "OE1",
+                "nodeName1": "ps1"
+            },
+            "nodeDpid1": "00:00:00:00:00:00:00:01",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:01",
+            "allowed": true
+        },
+        {
+            "type": "pktOptLink",
+            "params": {
+                "port2": 1,
+                "port1": 2,
+                "nodeName2": "OE2",
+                "nodeName1": "ps2"
+            },
+            "nodeDpid1": "00:00:00:00:00:00:00:02",
+            "nodeDpid2": "00:00:ff:ff:ff:ff:ff:02",
+            "allowed": true
+        }
+    ],
+    "switchConfig": [
+        {
+            "name": "OE1",
+            "longitude": 0.0,
+            "params": {
+                "numregens": 0
+            },
+            "allowed": true,
+            "latitude": 0.0,
+            "type": "Roadm",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:01"
+        },
+        {
+            "name": "OE2",
+            "longitude": 0.0,
+            "params": {
+                "numregens": 0
+            },
+            "allowed": true,
+            "latitude": 0.0,
+            "type": "Roadm",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:02"
+        },
+        {
+            "name": "OE3",
+            "longitude": 0.0,
+            "params": {
+                "numregens": 0
+            },
+            "allowed": true,
+            "latitude": 0.0,
+            "type": "Roadm",
+            "nodeDpid": "00:00:ff:ff:ff:ff:ff:03"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/Topology.json b/TestON/tests/FUNC/FUNCoptical/dependencies/Topology.json
new file mode 100644
index 0000000..210fc58
--- /dev/null
+++ b/TestON/tests/FUNC/FUNCoptical/dependencies/Topology.json
@@ -0,0 +1,138 @@
+{
+    "devices": {
+        "of:0000ffffffffff01": {
+            "basic": {
+                "type": "ROADM",
+                "name": "OE1"
+            }
+        },
+        "of:0000ffffffffff02": {
+            "basic": {
+                "type": "ROADM",
+                "name": "OE2"
+            }
+        },
+        "of:0000ffffffffff03": {
+            "basic": {
+                "type": "ROADM",
+                "name": "OE3"
+            }
+        },
+        "of:0000000000000002": {
+            "basic": {
+                "type": "SWITCH",
+                "name": "ps2"
+            }
+        },
+        "of:0000000000000001": {
+            "basic": {
+                "type": "SWITCH",
+                "name": "ps1"
+            }
+        }
+    },
+    "links": {
+        "of:0000ffffffffff03/3100-of:0000ffffffffff01/1300": {
+            "basic": {
+                "durable": "true",
+                "type": "OPTICAL"
+            }
+        },
+        "of:0000000000000002/2-of:0000ffffffffff02/1": {
+            "basic": {
+                "durable": "true",
+                "type": "OPTICAL"
+            }
+        },
+        "of:0000ffffffffff01/1200-of:0000ffffffffff02/2100": {
+            "basic": {
+                "durable": "true",
+                "type": "OPTICAL"
+            }
+        },
+        "of:0000ffffffffff02/2300-of:0000ffffffffff03/3200": {
+            "basic": {
+                "durable": "true",
+                "type": "OPTICAL"
+            }
+        },
+        "of:0000000000000001/2-of:0000ffffffffff01/1": {
+            "basic": {
+                "durable": "true",
+                "type": "OPTICAL"
+            }
+        }
+    },
+    "ports": {
+        "of:0000ffffffffff01/1300": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 1300
+            }
+        },
+        "of:0000000000000001/1": {
+            "optical": {
+                "speed": 0,
+                "type": "COPPER",
+                "port": 1
+            }
+        },
+        "of:0000ffffffffff03/3200": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 3200
+            }
+        },
+        "of:0000ffffffffff02/2100": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 2100
+            }
+        },
+        "of:0000ffffffffff01/1200": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 1200
+            }
+        },
+        "of:0000000000000002/1": {
+            "optical": {
+                "speed": 0,
+                "type": "COPPER",
+                "port": 1
+            }
+        },
+        "of:0000ffffffffff03/3100": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 3100
+            }
+        },
+        "of:0000ffffffffff01/1": {
+            "optical": {
+                "type": "OCH",
+                "speed": 0,
+                "port": 1
+            }
+        },
+        "of:0000ffffffffff02/1": {
+            "optical": {
+                "type": "OCH",
+                "speed": 0,
+                "port": 1
+            }
+        },
+        "of:0000ffffffffff02/2300": {
+            "optical": {
+                "type": "OMS",
+                "speed": 0,
+                "port": 2300
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py b/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py
new file mode 100644
index 0000000..cd365b3
--- /dev/null
+++ b/TestON/tests/FUNC/FUNCoptical/dependencies/ectopo.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+from mininet.net import Mininet
+from mininet.topo import Topo
+from mininet.node import Host, RemoteController
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+
+from opticalUtils import LINCSwitch, LINCLink
+
+class OpticalTopo( Topo ):
+    """
+    A simple optical topology of three LINC nodes(OE*), two OVS switches(ps*), and two hosts:
+
+              OE3
+              /\
+    h1-ps1-OE1--OE2-ps2-h2
+
+    """
+    def build( self ):
+
+        # set up packet layer - OVS + hosts
+        s1 = self.addSwitch( 'ps1' )
+        s2 = self.addSwitch( 'ps2' )
+        h1 = self.addHost( 'h1' )
+        h2 = self.addHost( 'h2' )
+        self.addLink( s1, h1 )
+        self.addLink( s2, h2 )
+
+        # set up ROADMs, add them to oel[]
+        oel = []
+        an = { "durable": "true" }
+        for i in range (1,4):
+            oean = { "optical.regens": 0 }
+            oel.append( self.addSwitch('OE%s' % i, dpid='0000ffffffffff0%s' % i, annotations=oean, cls=LINCSwitch) )
+
+        # ROADM port numbers are built as: OE1 <-> OE2 = 1200
+        # leaving port number up to 100 open for use by Och port
+        self.addLink( oel[0], oel[1], port1=1200, port2=2100, annotations=an, cls=LINCLink )
+        self.addLink( oel[1], oel[2], port1=2300, port2=3200, annotations=an, cls=LINCLink )
+        self.addLink( oel[2], oel[0], port1=3100, port2=1300, annotations=an, cls=LINCLink )
+
+        # cross-connects between OVSes and LINCs
+        self.addLink( s1, oel[0], port1=2, port2=1, annotations=an, cls=LINCLink )
+        self.addLink( s2, oel[1], port1=2, port2=1, annotations=an, cls=LINCLink )
+
+
+def setup( ctls ):
+    net = Mininet( topo=OpticalTopo(), controller=None )
+    i = 1
+    for ctl in ctls:
+        net.addController( RemoteController( 'c%d' % i, ip=ctl ) )
+        i+=1
+
+    net.start()
+    LINCSwitch.bootOE( net )
+    CLI( net )
+    net.stop()
+    LINCSwitch.shutdownOE()
+
+
+if __name__ == "__main__" :
+    import sys
+    if len( sys.argv ) >= 2 :
+        setLogLevel( 'info' )
+        ctls = sys.argv[ 1: ]
+        setup( ctls )
+    else:
+        print('./ectopo.py [IP1] [IP2]...\n')
diff --git a/TestON/tests/FUNC/FUNCoptical/dependencies/startUp.py b/TestON/tests/FUNC/FUNCoptical/dependencies/startUp.py
deleted file mode 100644
index bf2a2b6..0000000
--- a/TestON/tests/FUNC/FUNCoptical/dependencies/startUp.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-    This wrapper function is use for starting up onos instance
-"""
-
-import time
-import os
-import json
-
-def onosBuild( main, gitBranch ):
-    """
-        This includes pulling ONOS and building it using maven install
-    """
-
-    buildResult = main.FALSE
-
-    # Git checkout a branch of ONOS
-    checkOutResult = main.ONOSbench.gitCheckout( gitBranch )
-    # Does the git pull on the branch that was checked out
-    if not checkOutResult:
-        main.log.warn( "Failed to checked out " + gitBranch +
-                                           " branch")
-    else:
-        main.log.info( "Successfully checked out " + gitBranch +
-                                           " branch")
-    gitPullResult = main.ONOSbench.gitPull()
-    if gitPullResult == main.ERROR:
-        main.log.error( "Error pulling git branch" )
-    else:
-        main.log.info( "Successfully pulled " + gitBranch + " branch" )
-
-    # Maven clean install
-    buildResult = main.ONOSbench.cleanInstall()
-
-    return buildResult
-
-
-
-
diff --git a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.params b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.params
index 9bd9e6b..be4caec 100644
--- a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.params
+++ b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.params
@@ -9,7 +9,7 @@
     </ENV>
 
     <DEPENDENCY>
-        <path>/tests/SCPFhostLat/dependencies/</path>
+        <path>/tests/SCPF/SCPFhostLat/dependencies/</path>
         <topology>topo-perf-1h1s.py</topology>
     </DEPENDENCY>
 
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.params b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.params
index c7c156c..cf4c6ac 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.params
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.params
@@ -1,6 +1,6 @@
 <PARAMS>
 
-    <testcases>1,2,1,2,1,2,1,2,1,2,1,2,1,2</testcases>
+    <testcases>0,1,2,1,2,1,2,1,2,1,2,1,2,1,2</testcases>
 
     <debugMode></debugMode>  #nothing means false
 
@@ -13,8 +13,8 @@
     <max>7</max>
 
     <GIT>
-        <autopull>off</autopull>
-        <checkout>master</checkout>
+        <gitPull>off</gitPull>
+        <gitBranch>master</gitBranch>
     </GIT>
 
     <CTRL>
@@ -44,6 +44,14 @@
 
     <MN><ip1>OCN</ip1></MN>
 
+    <SLEEP>
+        <startup>10</startup>
+        <install>10</install>
+        <verify>3</verify>
+        <reroute>3</reroute>
+        # timeout for pexpect
+        <timeout>300</timeout>
+    </SLEEP>
     <BENCH>
         <user>sdn</user>
         <ip1>OCN</ip1>
@@ -60,8 +68,12 @@
         <neighbors>0,a</neighbors>           #a == all nodes (-1)
         <flowRuleBUEnabled>true</flowRuleBUEnabled>
         <skipReleaseResourcesOnWithdrawal>true</skipReleaseResourcesOnWithdrawal>
+        <flowObj>False</flowObj>
     </TEST>
-
+    <DATABASE>
+        <dbName>/tmp/IntentEventTPDB</dbName>
+        <dbFlowObj>/tmp/IntentEventTPflowObjDB</dbFlowObj>
+    </DATABASE>
     <METRICS>
         <intents_rate>intents-events-metrics|grep "Intent Installed Events"|cut -d ' ' -f7</intents_rate>
         <intents_withdrawn>intents-events-metrics|grep "Intent Withdrawn Events"|cut -d ' ' -f7</intents_withdrawn>
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
index 2caa008..6b333bc 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
@@ -1,324 +1,261 @@
-# ScaleOutTemplate
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
+'''
+SCPFintentEventTp
+    - Use intentperf app to generate a lot of intent install and withdraw events
+    - Test will run with 1,3,5,7 nodes, and with all neighbors
+    - Test will run 400 seconds and grep the overall rate from intent-perf summary
 
-import sys
-import os.path
+    yunpeng@onlab.us
+'''
+
 import time
 
 
 class SCPFintentEventTp:
-
     def __init__( self ):
         self.default = ''
 
+    def CASE0( self, main ):
+        '''
+        - GIT
+        - BUILDING ONOS
+            Pull specific ONOS branch, then Build ONOS ono ONOS Bench.
+            This step is usually skipped. Because in a Jenkins driven automated
+            test env. We want Jenkins jobs to pull&build for flexibility to handle
+            different versions of ONOS.
+        - Construct tests variables
+        '''
+        gitPull = main.params['GIT']['gitPull']
+        gitBranch = main.params['GIT']['gitBranch']
+
+        main.case( "Pull onos branch and build onos on Teststation." )
+
+        if gitPull == 'True':
+            main.step( "Git Checkout ONOS branch: " + gitBranch )
+            stepResult = main.ONOSbench.gitCheckout( branch=gitBranch )
+            utilities.assert_equals(expect=main.TRUE,
+                                    actual=stepResult,
+                                    onpass="Successfully checkout onos branch.",
+                                    onfail="Failed to checkout onos branch. Exiting test...")
+            if not stepResult: main.exit()
+
+            main.step( "Git Pull on ONOS branch:" + gitBranch )
+            stepResult = main.ONOSbench.gitPull()
+            utilities.assert_equals(expect=main.TRUE,
+                                    actual=stepResult,
+                                    onpass="Successfully pull onos. ",
+                                    onfail="Failed to pull onos. Exiting test ...")
+            if not stepResult: main.exit()
+
+            main.step( "Building ONOS branch: " + gitBranch )
+            stepResult = main.ONOSbench.cleanInstall( skipTest=True )
+            utilities.assert_equals(expect=main.TRUE,
+                                    actual=stepResult,
+                                    onpass="Successfully build onos.",
+                                    onfail="Failed to build onos. Exiting test...")
+            if not stepResult: main.exit()
+
+        else:
+            main.log.warn( "Skipped pulling onos and Skipped building ONOS" )
+
+        main.cellName = main.params['ENV']['cellName']
+        main.Apps = main.params['ENV']['cellApps']
+        main.BENCHIp = main.params['BENCH']['ip1']
+        main.BENCHUser = main.params['BENCH']['user']
+        main.MN1Ip = main.params['MN']['ip1']
+        main.maxNodes = int(main.params['max'])
+        main.numSwitches = (main.params['TEST']['numSwitches']).split(",")
+        main.flowRuleBU = main.params['TEST']['flowRuleBUEnabled']
+        main.skipRelRsrc = main.params['TEST']['skipReleaseResourcesOnWithdrawal']
+        main.flowObj = main.params['TEST']['flowObj']
+        main.startUpSleep = int(main.params['SLEEP']['startup'])
+        main.installSleep = int(main.params['SLEEP']['install'])
+        main.verifySleep = int(main.params['SLEEP']['verify'])
+        main.scale = (main.params['SCALE']).split(",")
+        main.testDuration = main.params[ 'TEST' ][ 'duration' ]
+        main.logInterval = main.params[ 'TEST' ][ 'log_interval' ]
+        main.debug = main.params[ 'debugMode' ]
+        main.numKeys = main.params[ 'TEST' ][ 'numKeys' ]
+        main.timeout = int(main.params['SLEEP']['timeout'])
+        main.cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
+        if main.flowObj == "True":
+            main.flowObj = True
+            main.dbFileName = main.params['DATABASE']['dbFlowObj']
+        else:
+            main.flowObj = False
+            main.dbFileName = main.params['DATABASE']['dbName']
+        # Create DataBase file
+        main.log.info( "Create Database file " + main.dbFileName )
+        resultsDB = open( main.dbFileName, "w+" )
+        resultsDB.close()
+
+        # set neighbors
+        main.neighbors = "1"
+
     def CASE1( self, main ):
-        import sys
-        import os.path
+        # Clean up test environment and set up
         import time
+        main.log.info( "Get ONOS cluster IP" )
+        print( main.scale )
+        main.numCtrls = int( main.scale.pop(0) )
+        main.ONOSip = []
+        main.maxNumBatch = 0
+        main.AllONOSip = main.ONOSbench.getOnosIps()
+        for i in range( main.numCtrls ):
+            main.ONOSip.append( main.AllONOSip[i] )
+        main.log.info( main.ONOSip )
+        main.CLIs = []
+        main.log.info( "Creating list of ONOS cli handles" )
+        for i in range( main.numCtrls ):
+            main.CLIs.append( getattr( main, 'ONOS%scli' % (i + 1) ) )
 
-        global init
-        try:
-            if type(init) is not bool:
-                init = False
-        except NameError:
-            init = False
+        if not main.CLIs:
+            main.log.error( "Failed to create the list of ONOS cli handles" )
+            main.cleanup()
+            main.exit()
 
-        #Load values from params file
-        checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
-        gitPull = main.params[ 'GIT' ][ 'autopull' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        Apps = main.params[ 'ENV' ][ 'cellApps' ]
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        BENCHUser = main.params[ 'BENCH' ][ 'user' ]
-        MN1Ip = main.params[ 'MN' ][ 'ip1' ]
-        maxNodes = int(main.params[ 'max' ])
-        main.maxNodes = maxNodes
-        skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
-        flowRuleBU = main.params[ 'TEST' ][ 'flowRuleBUEnabled' ]
-        skipRelRsrc = main.params[ 'TEST'][ 'skipReleaseResourcesOnWithdrawal']
-        homeDir = os.path.expanduser('~')
+        main.commit = main.ONOSbench.getVersion( report=True )
+        main.commit = main.commit.split(" ")[1]
+        main.log.info( "Starting up %s node(s) ONOS cluster" % main.numCtrls )
+        main.log.info("Safety check, killing all ONOS processes" +
+                      " before initiating environment setup")
 
-        main.exceptions = [0]*11
-        main.warnings = [0]*11
-        main.errors = [0]*11
+        for i in range( main.numCtrls ):
+            main.ONOSbench.onosDie( main.ONOSip[i] )
 
-        # -- INIT SECTION, ONLY RUNS ONCE -- #
-        if init == False:
-            init = True
-            global clusterCount             #number of nodes running
-            global ONOSIp                   #list of ONOS IP addresses
-            global scale
-            global commit
-
-            clusterCount = 0
-            ONOSIp = main.ONOSbench.getOnosIps()
-            print ONOSIp
-            print main.ONOSbench.onosIps.values()
-
-            scale = (main.params[ 'SCALE' ]).split(",")
-            clusterCount = int(scale[0])
-
-            #Populate ONOSIp with ips from params
-            ONOSIp.extend(main.ONOSbench.getOnosIps())
-
-            #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
-            if skipMvn != "yes":
-                mvnResult = main.ONOSbench.cleanInstall()
-
-            #git
-            main.step( "Git checkout and pull " + checkoutBranch )
-            if gitPull == 'on':
-                checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
-                pullResult = main.ONOSbench.gitPull()
-
-            else:
-                checkoutResult = main.TRUE
-                pullResult = main.TRUE
-                main.log.info( "Skipped git checkout and pull" )
-
-            main.step("Grabbing commit number")
-            commit = main.ONOSbench.getVersion()
-            commit = (commit.split(" "))[1]
-
-            main.step("Creating results file")
-            resultsDB = open("/tmp/IntentEventTPDB", "w+")
-            resultsDB.close()
-
-        # -- END OF INIT SECTION --#
-
-        main.step("Adjusting scale")
-        print str(scale)
-        print str(ONOSIp)
-        clusterCount = int(scale[0])
-        scale.remove(scale[0])
-
-        MN1Ip = ONOSIp[len(ONOSIp) -1]
-        BENCHIp = ONOSIp[len(ONOSIp) -2]
-
-        #kill off all onos processes
-        main.step("Safety check, killing all ONOS processes")
-        main.step("before initiating environment setup")
-        for node in range(maxNodes):
-            main.ONOSbench.onosDie(ONOSIp[node])
-
-        MN1Ip = ONOSIp[len(ONOSIp) -1]
-        BENCHIp = ONOSIp[len(ONOSIp) -2]
-
-        #Uninstall everywhere
-        main.step( "Cleaning Enviornment..." )
-        for i in range(maxNodes):
-            main.log.info(" Uninstalling ONOS " + str(i) )
-            main.ONOSbench.onosUninstall( ONOSIp[i] )
-        main.log.info("Sleep 10 second for uninstall to settle...")
-        time.sleep(10)
-        main.ONOSbench.handle.sendline(" ")
-        main.ONOSbench.handle.expect(":~")
-
-        #construct the cell file
-        main.log.info("Creating cell file")
-        cellIp = []
-        for node in range (clusterCount):
-            cellIp.append(ONOSIp[node])
-
-        main.ONOSbench.createCellFile("localhost",cellName,MN1Ip,str(Apps), cellIp)
-
-        main.step( "Set Cell" )
-        main.ONOSbench.setCell(cellName)
-
-        myDistribution = []
-        for node in range (clusterCount):
-            myDistribution.append(numSwitches[node])
+        main.log.info( "NODE COUNT = %s" % main.numCtrls )
+        main.ONOSbench.createCellFile(main.ONOSbench.ip_address,
+                                      main.cellName,
+                                      main.MN1Ip,
+                                      main.Apps,
+                                      main.ONOSip)
+        main.step( "Apply cell to environment" )
+        cellResult = main.ONOSbench.setCell( main.cellName )
+        verifyResult = main.ONOSbench.verifyCell()
+        stepResult = cellResult and verifyResult
+        utilities.assert_equals(expect=main.TRUE,
+                                actual=stepResult,
+                                onpass="Successfully applied cell to " + \
+                                       "environment",
+                                onfail="Failed to apply cell to environment ")
 
         main.step( "Creating ONOS package" )
         packageResult = main.ONOSbench.onosPackage()
+        stepResult = packageResult
+        utilities.assert_equals(expect=main.TRUE,
+                                actual=stepResult,
+                                onpass="Successfully created ONOS package",
+                                onfail="Failed to create ONOS package")
 
-        main.step( "verify cells" )
-        verifyCellResult = main.ONOSbench.verifyCell()
+        main.step( "Uninstall ONOS package on all Nodes" )
+        uninstallResult = main.TRUE
+        for i in range( int( main.numCtrls ) ):
+            main.log.info( "Uninstalling package on ONOS Node IP: " + main.ONOSip[i] )
+            u_result = main.ONOSbench.onosUninstall( main.ONOSip[i] )
+            utilities.assert_equals(expect=main.TRUE, actual=u_result,
+                                    onpass="Test step PASS",
+                                    onfail="Test step FAIL")
+            uninstallResult = ( uninstallResult and u_result )
 
-        main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
-        for node in range(clusterCount):
-            main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
-            main.ONOSbench.onosInstall( ONOSIp[node])
+        main.step( "Install ONOS package on all Nodes" )
+        installResult = main.TRUE
+        for i in range( int( main.numCtrls ) ):
+            main.log.info( "Installing package on ONOS Node IP: " + main.ONOSip[i] )
+            i_result = main.ONOSbench.onosInstall(node=main.ONOSip[i])
+            utilities.assert_equals(expect=main.TRUE, actual=i_result,
+                                    onpass="Test step PASS",
+                                    onfail="Test step FAIL")
+            installResult = installResult and i_result
 
-        for node in range(clusterCount):
-            for i in range( 2 ):
-                isup = main.ONOSbench.isup( ONOSIp[node] )
-                if isup:
-                    main.log.info("ONOS " + str(node) + " is up\n")
-                    break
-            if not isup:
-                main.log.report( "ONOS " + str(node) + " didn't start!" )
-        main.log.info("Startup sequence complete")
+        main.step( "Verify ONOS nodes UP status" )
+        statusResult = main.TRUE
+        for i in range( int( main.numCtrls ) ):
+            main.log.info( "ONOS Node " + main.ONOSip[i] + " status:" )
+            onos_status = main.ONOSbench.onosStatus(node=main.ONOSip[i])
+            utilities.assert_equals(expect=main.TRUE, actual=onos_status,
+                                    onpass="Test step PASS",
+                                    onfail="Test step FAIL")
+            statusResult = (statusResult and onos_status)
+        time.sleep(2)
+        main.step( "Start ONOS cli using thread" )
+        startCliResult = main.TRUE
+        pool = []
+        main.threadID = 0
+        for i in range(int(main.numCtrls)):
+            t = main.Thread(target=main.CLIs[i].startOnosCli,
+                            threadID=main.threadID,
+                            name="startOnosCli",
+                            args=[main.ONOSip[i]],
+                            kwargs={"onosStartTimeout": main.timeout})
+            pool.append(t)
+            t.start()
+            main.threadID = main.threadID + 1
+        for t in pool:
+            t.join()
+            startCliResult = startCliResult and t.result
+        time.sleep( main.startUpSleep )
 
-        time.sleep(20)
+        # config apps
+        main.CLIs[0].setCfg( "org.onosproject.store.flow.impl.DistributedFlowRuleStore",
+                            "backupEnabled " + main.flowRuleBU )
+        main.CLIs[0].setCfg( "org.onosproject.net.intent.impl.IntentManager",
+                                  "skipReleaseResourcesOnWithdrawal " + main.skipRelRsrc )
+        main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(int(main.numCtrls*10)) )
+        main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "topoShape linear" )
+        main.CLIs[0].setCfg( "org.onosproject.provider.nil.NullProviders", "enabled true" )
+        if main.flowObj:
+            main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
+                                "useFlowObjectives", value="true")
+        time.sleep( main.startUpSleep )
 
-        main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.store.flow.impl.DistributedFlowRuleStore", "backupEnabled " + str(flowRuleBU))
-        main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.net.intent.impl.IntentManager", "skipReleaseResourcesOnWithdrawal " + skipRelRsrc)
-        devices = int(clusterCount)*10
+        # balanceMasters
+        main.CLIs[0].balanceMasters()
+        time.sleep( main.startUpSleep )
 
-        main.step("Setting up null provider")
-        for i in range(3):
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(devices))
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear")
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "enabled true")
-            time.sleep(5)
-
-            main.ONOSbench.handle.sendline("onos $OC1 summary")
-            main.ONOSbench.handle.expect(":~")
-
-            before = main.ONOSbench.handle.before
-            if ("devices=" + str(devices)) in before:
-                break
-
-        main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
-        main.ONOSbench.handle.expect(":~")
-        print main.ONOSbench.handle.before
-        time.sleep(5)
-
-        for i in range(3):
-            passed = main.ONOSbench.verifySummary( ONOSIp[0] )
-            if passed:
-                main.log.info("Clusters have converged")
-                break
-            else:
-                main.log.error("Clusters have not converged, retying...")
-            time.sleep(3)
-
-        main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
-    def CASE2( self, main ):
-        import time
-        import json
-        import string
-        import csv
+    def CASE2(self, main):
         import numpy
-        import os.path
 
-        global currentNeighbors
-        neighbors = []
+        main.log.info( "Cluster Count = " + str( main.numCtrls ) )
+        # adjust neighbors
+        if main.numCtrls == 1:
+            main.neighbors = "0"
+            main.log.info( "Neighbors: 0" )
+        elif main.neighbors != "0":
+            main.neighbors = "0"
+            main.log.info( "Neighbors: 0" )
+        elif main.neighbors == "0":
+            main.neighbors = str( main.numCtrls - 1 )
+            main.log.info( "Neighbors: " + main.neighbors )
 
-        try:
-            currentNeighbors
-        except:
-            currentNeighbors = "0"
-            neighbors = ['0']
-        else:
-            if currentNeighbors == "r":      #reset
-                currentNeighbors = "a"
-                neighbors = ['0']
-            else:
-                currentNeighbors = "r"
-                neighbors = ['a']
+        main.log.info( "Config intent-perf app" )
+        main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "numKeys " + main.numKeys )
+        main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "numNeighbors " + str( main.neighbors ) )
+        main.CLIs[0].setCfg( "org.onosproject.intentperf.IntentPerfInstaller", "cyclePeriod " + main.cyclePeriod )
 
-        if clusterCount == 1:
-            currentNeighbors = "r"
+        main.log.info( "Starting intent-perf test for " + str(main.testDuration) + " seconds..." )
+        main.CLIs[0].sendline( "intent-perf-start" )
+        stop = time.time() + float( main.testDuration )
 
-        main.log.info("Cluster Count = " + str(clusterCount))
+        while time.time() < stop:
+            time.sleep(15)
+            result = main.CLIs[0].getIntentPerfSummary()
+            if result:
+                for ip in main.ONOSip:
+                    main.log.info( "Node {} Overall Rate: {}".format( ip, result[ip] ) )
+        main.log.info( "Stop intent-perf" )
+        for node in main.CLIs:
+            node.sendline( "intent-perf-stop" )
+        if result:
+            for ip in main.ONOSip:
+                main.log.info( "Node {} final Overall Rate: {}".format( ip, result[ip] ) )
 
-        intentsRate = main.params['METRICS']['intents_rate']
-        intentsWithdrawn = main.params[ 'METRICS' ][ 'intents_withdrawn' ]
-        intentsFailed  = main.params[ 'METRICS' ][ 'intents_failed' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-        debug = main.params[ 'debugMode' ]
-        numKeys = main.params[ 'TEST' ][ 'numKeys' ]
-        cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
-        #neighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")
-        metricList = [intentsRate, intentsWithdrawn, intentsFailed]
-
-        for n in range(0, len(neighbors)):
-            if neighbors[n] == 'a':
-                neighbors[n] = str(clusterCount -1)
-                if int(clusterCount) == 1:
-                    neighbors = neighbors.pop()
-
-        for n in neighbors:
-            main.log.info("Run with " + n + " neighbors")
-            time.sleep(5)
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numKeys " + numKeys )
-            main.ONOSbench.handle.expect(":~")
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numNeighbors " + n )
-            main.ONOSbench.handle.expect(":~")
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller cyclePeriod " + cyclePeriod )
-            main.ONOSbench.handle.expect(":~")
-
-            cmd = "onos $OC1 intent-perf-start"
-            main.ONOSbench.handle.sendline(cmd)
-            main.ONOSbench.handle.expect(":~")
-            main.log.info("Starting ONOS (all nodes)  intent-perf from $OC1" )
-
-            main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
-            stop = time.time() + float( testDuration )
-
-            while time.time() < stop:
-                time.sleep( float( logInterval ) )
-                groupResult = []
-                for node in range (1, clusterCount + 1):
-                    groupResult.append(0)
-
-                    cmd = " onos-ssh $OC" + str(node) +  """ cat /opt/onos/log/karaf.log | grep "Throughput:" | tail -1  """
-                    main.log.info("COMMAND: " + str(cmd))
-
-                    x = 0
-                    while True:
-                        main.ONOSbench.handle.sendline(cmd)
-                        time.sleep(6)
-                        main.ONOSbench.handle.expect(":~")
-                        raw = main.ONOSbench.handle.before
-                        if "OVERALL=" in raw:
-                            break
-                        x += 1
-                        if x > 10:
-                            main.log.error("Expected output not being recieved... continuing")
-                            break
-                        time.sleep(2)
-
-                    raw = raw.splitlines()
-                    splitResults = []
-                    for line in raw:
-                        splitResults.extend(line.split(" "))
-
-                    myResult = "--"
-                    for field in splitResults:
-                        if "OVERALL" in field:
-                            myResult = field
-
-                    if myResult == "--":
-                        main.log.error("Parsing/Pexpect error\n" + str(splitResults))
-
-                    myResult = myResult.replace(";", "")
-                    myResult = myResult.replace("OVERALL=","")
-                    myResult = float(myResult)
-                    groupResult[len(groupResult) -1] = myResult
-
-                    main.log.info("Node " + str(node) + " overall rate: " + str(myResult))
-
-                clusterTotal = str(numpy.sum(groupResult))
-                main.log.report("Results from this round of polling: " + str(groupResult))
-                main.log.report("Cluster Total: " + clusterTotal + "\n")
-
-            cmd = "onos $OC1 intent-perf-stop"
-            main.ONOSbench.handle.sendline(cmd)
-            main.ONOSbench.handle.expect(":~")
-            main.log.info("Stopping intentperf" )
-
-            with open("/tmp/IntentEventTPDB", "a") as resultsDB:
-                for node in groupResult:
-                    resultString = "'" + commit + "',"
-                    resultString += "'1gig',"
-                    resultString += str(clusterCount) + ","
-                    resultString += "'baremetal" + str(int(groupResult.index(node)) + 1) + "',"
-                    resultString += n + ","
-                    resultString += str(node) + ","
-                    resultString += str(0) + "\n" #no stddev
-                    resultsDB.write(resultString)
-
-            resultsDB.close()
-
-            main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
+        with open( main.dbFileName, "a" ) as resultDB:
+            for nodes in range( 0, len( main.ONOSip ) ):
+                resultString = "'" + main.commit + "',"
+                resultString += "'1gig',"
+                resultString += str(main.numCtrls) + ","
+                resultString += "'baremetal" + str( nodes+1 ) + "',"
+                resultString += main.neighbors + ","
+                resultString += result[ main.ONOSip[ nodes ] ]+","
+                resultString += str(0) + "\n"  # no stddev
+                resultDB.write( resultString )
+        resultDB.close()
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/README b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/README
deleted file mode 100644
index 30a2549..0000000
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/README
+++ /dev/null
@@ -1,28 +0,0 @@
-INTENT EVENT THROUGHPUT
-
-Summary: This is a performance test suite to test the intent
-    throughput capabilities of ONOS with various controller cluster sizes.
-
-Pre-requisites: To run out-of-the box this test requires 7 NODES. OC1->OC7
-    must be set before initiating the test. Passwordless login must be set
-    from TestStation "sdn" root user.
-
-***If you wish to run this test with less than 7 nodes the following
-    alterations must be made:
-
-NOTE: Only scale sizes 1,3,5 and 7 will be functional
-
-Modifying .params file:
--- Remove any values in the comma separated list in the
-    <scale> tag that are above your desired cluster size.
-
--- Remove one instance of “1,2” from the <testcases>
-    tag for each value you removed from <scale> (case 1 and 2 are each
-    called once for each scale value)
-
--- Change the value in the <max> tag to your desired scale size (1,3, or 5)
-
-Modifying .topo file:
--- Change the <ONOSbench/COMPONENTS/nodes> tag to your desired scale size
-
--- Remove all unneeded <ONOS#cli> tags and their contents
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.params b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.params
deleted file mode 100644
index 729e3ef..0000000
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.params
+++ /dev/null
@@ -1,71 +0,0 @@
-<PARAMS>
-
-    <testcases>1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2,1,3,2</testcases>
-
-    <debugMode></debugMode>  #nothing means false
-
-    <ENV>
-    <cellName>intentTP</cellName>
-    <cellApps>drivers,null,intentperf</cellApps>
-    </ENV>
-
-    <SCALE>1,3,3,5,5,7,7</SCALE>
-    <max>7</max>
-
-    <GIT>
-        <autopull>off</autopull>
-        <checkout>master</checkout>
-    </GIT>
-
-    <CTRL>
-        <USER>sdn</USER>
-
-        <ip1>OC1</ip1>
-        <port1>6653</port1>
-
-        <ip2>OC2</ip2>
-        <port2>6653</port2>
-
-        <ip3>OC3</ip3>
-        <port3>6653</port3>
-
-        <ip4>OC4</ip4>
-        <port4>6653</port4>
-
-        <ip5>OC5</ip5>
-        <port5>6653</port5>
-
-        <ip6>OC6</ip6>
-        <port6>6653</port6>
-
-         <ip7>OC7</ip7>
-        <port7>6653</port7>
-    </CTRL>
-
-    <MN><ip1>OCN</ip1></MN>
-
-    <BENCH>
-        <user>sdn</user>
-        <ip1>OCN</ip1>
-    </BENCH>
-
-    <TEST>
-        <loadFrom>1,1,1,1,1,1,1</loadFrom>                                     #generate load on server, 1 = generator on
-        <numSwitches>10,10,10,10,10,10,10</numSwitches>
-        <skipCleanInstall>yes</skipCleanInstall>
-        <duration>400</duration>
-        <log_interval>10</log_interval>
-        <numKeys>40000</numKeys>
-        <cyclePeriod>1000</cyclePeriod>
-        <neighbors>0,a</neighbors>           #a == all nodes (-1)
-        <flowRuleBUEnabled>true</flowRuleBUEnabled>
-        <skipReleaseResourcesOnWithdrawal>true</skipReleaseResourcesOnWithdrawal>
-    </TEST>
-
-    <METRICS>
-        <intents_rate>intents-events-metrics|grep "Intent Installed Events"|cut -d ' ' -f7</intents_rate>
-        <intents_withdrawn>intents-events-metrics|grep "Intent Withdrawn Events"|cut -d ' ' -f7</intents_withdrawn>
-        <intents_failed>intents-events-metrics|grep "Intent Failed Events"|cut -d ' ' -f7</intents_failed>
-    </METRICS>
-
-</PARAMS>
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py
deleted file mode 100644
index 1a6e3ab..0000000
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py
+++ /dev/null
@@ -1,335 +0,0 @@
-# ScaleOutTemplate
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os.path
-import time
-
-
-class SCPFintentEventTpWithFlowObj:
-
-    def __init__( self ):
-        self.default = ''
-
-    def CASE1( self, main ):
-        import sys
-        import os.path
-        import time
-
-        global init
-        try:
-            if type(init) is not bool:
-                init = False
-        except NameError:
-            init = False
-
-        #Load values from params file
-        checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
-        gitPull = main.params[ 'GIT' ][ 'autopull' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        Apps = main.params[ 'ENV' ][ 'cellApps' ]
-        BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
-        BENCHUser = main.params[ 'BENCH' ][ 'user' ]
-        MN1Ip = main.params[ 'MN' ][ 'ip1' ]
-        maxNodes = int(main.params[ 'max' ])
-        main.maxNodes = maxNodes
-        skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
-        cellName = main.params[ 'ENV' ][ 'cellName' ]
-        numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",")
-        flowRuleBU = main.params[ 'TEST' ][ 'flowRuleBUEnabled' ]
-        skipRelRsrc = main.params[ 'TEST'][ 'skipReleaseResourcesOnWithdrawal']
-        homeDir = os.path.expanduser('~')
-
-        main.exceptions = [0]*11
-        main.warnings = [0]*11
-        main.errors = [0]*11
-
-        # -- INIT SECTION, ONLY RUNS ONCE -- #
-        if init == False:
-            init = True
-            global clusterCount             #number of nodes running
-            global ONOSIp                   #list of ONOS IP addresses
-            global scale
-            global commit
-
-            clusterCount = 0
-            ONOSIp = main.ONOSbench.getOnosIps()
-            print ONOSIp
-            print main.ONOSbench.onosIps.values()
-
-            scale = (main.params[ 'SCALE' ]).split(",")
-            clusterCount = int(scale[0])
-
-            #Populate ONOSIp with ips from params
-            ONOSIp.extend(main.ONOSbench.getOnosIps())
-
-            #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
-            if skipMvn != "yes":
-                mvnResult = main.ONOSbench.cleanInstall()
-
-            #git
-            main.step( "Git checkout and pull " + checkoutBranch )
-            if gitPull == 'on':
-                checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
-                pullResult = main.ONOSbench.gitPull()
-
-            else:
-                checkoutResult = main.TRUE
-                pullResult = main.TRUE
-                main.log.info( "Skipped git checkout and pull" )
-
-            main.step("Grabbing commit number")
-            commit = main.ONOSbench.getVersion()
-            commit = (commit.split(" "))[1]
-
-            main.step("Creating results file")
-            # Create results file with flow object
-            flowObjResultsDB = open("/tmp/IntentEventTPflowObjDB", "w+")
-            flowObjResultsDB.close()
-
-        # -- END OF INIT SECTION --#
-
-        main.step("Adjusting scale")
-        print str(scale)
-        print str(ONOSIp)
-        clusterCount = int(scale[0])
-        scale.remove(scale[0])
-
-        MN1Ip = ONOSIp[len(ONOSIp) -1]
-        BENCHIp = ONOSIp[len(ONOSIp) -2]
-
-        #kill off all onos processes
-        main.step("Safety check, killing all ONOS processes")
-        main.step("before initiating environment setup")
-        for node in range(maxNodes):
-            main.ONOSbench.onosDie(ONOSIp[node])
-
-        MN1Ip = ONOSIp[len(ONOSIp) -1]
-        BENCHIp = ONOSIp[len(ONOSIp) -2]
-
-        #Uninstall everywhere
-        main.step( "Cleaning Enviornment..." )
-        for i in range(maxNodes):
-            main.log.info(" Uninstalling ONOS " + str(i) )
-            main.ONOSbench.onosUninstall( ONOSIp[i] )
-        main.log.info("Sleep 10 second for uninstall to settle...")
-        time.sleep(10)
-        main.ONOSbench.handle.sendline(" ")
-        main.ONOSbench.handle.expect(":~")
-
-        #construct the cell file
-        main.log.info("Creating cell file")
-        cellIp = []
-        for node in range (clusterCount):
-            cellIp.append(ONOSIp[node])
-
-        main.ONOSbench.createCellFile("localhost",cellName,MN1Ip,str(Apps), cellIp)
-
-        main.step( "Set Cell" )
-        main.ONOSbench.setCell(cellName)
-
-        myDistribution = []
-        for node in range (clusterCount):
-            myDistribution.append(numSwitches[node])
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()
-
-        main.step( "verify cells" )
-        verifyCellResult = main.ONOSbench.verifyCell()
-
-        main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
-        for node in range(clusterCount):
-            main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
-            main.ONOSbench.onosInstall( ONOSIp[node])
-
-        for node in range(clusterCount):
-            for i in range( 2 ):
-                isup = main.ONOSbench.isup( ONOSIp[node] )
-                if isup:
-                    main.log.info("ONOS " + str(node) + " is up\n")
-                    break
-            if not isup:
-                main.log.report( "ONOS " + str(node) + " didn't start!" )
-        main.log.info("Startup sequence complete")
-
-        time.sleep(20)
-
-        main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.store.flow.impl.DistributedFlowRuleStore", "backupEnabled " + str(flowRuleBU))
-        main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.net.intent.impl.IntentManager", "skipReleaseResourcesOnWithdrawal " + skipRelRsrc)
-        devices = int(clusterCount)*10
-
-        main.step("Setting up null provider")
-        for i in range(3):
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(devices))
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear")
-            main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "enabled true")
-            time.sleep(5)
-
-            main.ONOSbench.handle.sendline("onos $OC1 summary")
-            main.ONOSbench.handle.expect(":~")
-
-            before = main.ONOSbench.handle.before
-            if ("devices=" + str(devices)) in before:
-                break
-
-        main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """)
-        main.ONOSbench.handle.expect(":~")
-        print main.ONOSbench.handle.before
-
-        for i in range(3):
-            passed = main.ONOSbench.verifySummary( ONOSIp[0] )
-            if passed:
-                main.log.info("Clusters have converged")
-                break
-            else:
-                main.log.error("Clusters have not converged, retying...")
-            time.sleep(3)
-
-        main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
-    def CASE2( self, main ):
-        import time
-        import json
-        import string
-        import csv
-        import numpy
-        import os.path
-
-        global currentNeighbors
-        neighbors = []
-
-        try:
-            currentNeighbors
-        except:
-            currentNeighbors = "0"
-            neighbors = ['0']
-        else:
-            if currentNeighbors == "r":      #reset
-                currentNeighbors = "a"
-                neighbors = ['0']
-            else:
-                currentNeighbors = "r"
-                neighbors = ['a']
-
-        if clusterCount == 1:
-            currentNeighbors = "r"
-
-        main.log.info("Cluster Count = " + str(clusterCount))
-
-        intentsRate = main.params['METRICS']['intents_rate']
-        intentsWithdrawn = main.params[ 'METRICS' ][ 'intents_withdrawn' ]
-        intentsFailed  = main.params[ 'METRICS' ][ 'intents_failed' ]
-        testDuration = main.params[ 'TEST' ][ 'duration' ]
-        logInterval = main.params[ 'TEST' ][ 'log_interval' ]
-        debug = main.params[ 'debugMode' ]
-        numKeys = main.params[ 'TEST' ][ 'numKeys' ]
-        cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ]
-        #neighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",")
-        metricList = [intentsRate, intentsWithdrawn, intentsFailed]
-
-        for n in range(0, len(neighbors)):
-            if neighbors[n] == 'a':
-                neighbors[n] = str(clusterCount -1)
-                if int(clusterCount) == 1:
-                    neighbors = neighbors.pop()
-
-        for n in neighbors:
-            main.log.info("Run with " + n + " neighbors")
-            time.sleep(5)
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numKeys " + numKeys )
-            main.ONOSbench.handle.expect(":~")
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numNeighbors " + n )
-            main.ONOSbench.handle.expect(":~")
-            main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller cyclePeriod " + cyclePeriod )
-            main.ONOSbench.handle.expect(":~")
-
-            cmd = "onos $OC1 intent-perf-start"
-            main.ONOSbench.handle.sendline(cmd)
-            main.ONOSbench.handle.expect(":~")
-            main.log.info("Starting ONOS (all nodes)  intent-perf from $OC1" )
-
-            main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
-            stop = time.time() + float( testDuration )
-
-            while time.time() < stop:
-                time.sleep( float( logInterval ) )
-                groupResult = []
-                for node in range (1, clusterCount + 1):
-                    groupResult.append(0)
-
-                    cmd = " onos-ssh $OC" + str(node) +  """ cat /opt/onos/log/karaf.log | grep "Throughput:" | tail -1  """
-                    main.log.info("COMMAND: " + str(cmd))
-
-                    x = 0
-                    while True:
-                        main.ONOSbench.handle.sendline(cmd)
-                        time.sleep(6)
-                        main.ONOSbench.handle.expect(":~")
-                        raw = main.ONOSbench.handle.before
-                        if "OVERALL=" in raw:
-                            break
-                        x += 1
-                        if x > 10:
-                            main.log.error("Expected output not being recieved... continuing")
-                            break
-                        time.sleep(2)
-
-                    raw = raw.splitlines()
-                    splitResults = []
-                    for line in raw:
-                        splitResults.extend(line.split(" "))
-
-                    myResult = "--"
-                    for field in splitResults:
-                        if "OVERALL" in field:
-                            myResult = field
-
-                    if myResult == "--":
-                        main.log.error("Parsing/Pexpect error\n" + str(splitResults))
-
-                    myResult = myResult.replace(";", "")
-                    myResult = myResult.replace("OVERALL=","")
-                    myResult = float(myResult)
-                    groupResult[len(groupResult) -1] = myResult
-
-                    main.log.info("Node " + str(node) + " overall rate: " + str(myResult))
-
-                clusterTotal = str(numpy.sum(groupResult))
-                main.log.report("Results from this round of polling: " + str(groupResult))
-                main.log.report("Cluster Total: " + clusterTotal + "\n")
-
-            cmd = "onos $OC1 intent-perf-stop"
-            main.ONOSbench.handle.sendline(cmd)
-            main.ONOSbench.handle.expect(":~")
-            main.log.info("Stopping intentperf" )
-
-            with open("/tmp/IntentEventTPflowObjDB", "a") as resultsDB:
-                for node in groupResult:
-                    resultString = "'" + commit + "',"
-                    resultString += "'1gig',"
-                    resultString += str(clusterCount) + ","
-                    resultString += "'baremetal" + str(int(groupResult.index(node)) + 1) + "',"
-                    resultString += n + ","
-                    resultString += str(node) + ","
-                    resultString += str(0) + "\n" #no stddev
-                    resultsDB.write(resultString)
-            resultsDB.close()
-            main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
-
-    def CASE3( self, main ):
-        main.step("Set Intent Compiler use Flow Object")
-        stepResult = utilities.retry( main.ONOSbench.onosCfgSet,
-                                      main.FALSE,
-                                      args=[ ONOSIp[0],
-                                        "org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
-                                        "useFlowObjectives true" ],
-                                      sleep=3,
-                                      attempts=3 )
-        utilities.assert_equals( expect = main.TRUE,
-                                  actual = stepResult,
-                                  onpass = "Successfully set Intent compiler use Flow object",
-                                  onfail = "Failed to set up" )
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.topo b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.topo
deleted file mode 100644
index 915d033..0000000
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.topo
+++ /dev/null
@@ -1,147 +0,0 @@
-<TOPOLOGY>
-
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS>
-                <home>~/onos</home>
-                <nodes>7</nodes> 
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOS1cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1cli>
-
-        <ONOS2cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2cli>
-
-        <ONOS3cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3cli>
-
-        <ONOS4cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4cli>
-
-        <ONOS5cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5cli>
-
-        <ONOS6cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6cli>
-
-        <ONOS7cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7cli>
-
-        <ONOS1>
-            <host>OC1</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1>
-
-        <ONOS2>
-            <host>OC2</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>10</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2>
-
-        <ONOS3>
-            <host>OC3</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>11</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3>
-
-        <ONOS4>
-            <host>OC4</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>12</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4>
-
-    
-        <ONOS5>
-            <host>OC5</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>13</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5>
-
-        <ONOS6>
-            <host>OC6</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>14</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6>
-
-        <ONOS7>
-            <host>OC7</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>15</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7>
-
-    </COMPONENT>
-
-</TOPOLOGY>
- 
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/__init__.py b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/__init__.py
+++ /dev/null
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
index fe61b9a..8843c2f 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
@@ -18,7 +18,8 @@
         <ingress>null:0000000000000001/6</ingress>
         <egress>null:0000000000000007/5</egress>
         <debug>False</debug>
-    </TEST>
+        <flowObj>False</flowObj>
+     </TEST>
 
     <GIT>
         <gitPull>off</gitPull>
@@ -26,7 +27,8 @@
     </GIT>
 
     <DATABASE>
-        <file>/tmp/IntentInstallWithdrawLatDB</file>
+        <dbName>/tmp/IntentInstallWithdrawLatDB</dbName>
+        <dbFlowObj>/tmp/IntentInstallWithdrawLatDBWFO</dbFlowObj>
     </DATABASE>
     <ATTEMPTS>
         <verify>3</verify>
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
index ef50ab3..3e84aad 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
@@ -62,7 +62,6 @@
         main.maxNodes = int(main.params['max'])
         main.cellName = main.params['ENV']['cellName']
         main.scale = (main.params['SCALE']).split(",")
-        main.dbFileName = main.params['DATABASE']['file']
         main.timeout = int(main.params['SLEEP']['timeout'])
         main.startUpSleep = int(main.params['SLEEP']['startup'])
         main.installSleep = int(main.params['SLEEP']['install'])
@@ -74,6 +73,15 @@
         main.ingress = main.params['TEST']['ingress']
         main.egress = main.params['TEST']['egress']
         main.debug = main.params['TEST']['debug']
+        main.flowObj = main.params['TEST']['flowObj']
+
+        if main.flowObj == "True":
+            main.flowObj = True
+            main.dbFileName = main.params['DATABASE']['dbFlowObj']
+        else:
+            main.flowObj = False
+            main.dbFileName = main.params['DATABASE']['dbName']
+
         for i in range(0, len(main.intentsList)):
             main.intentsList[i] = int(main.intentsList[i])
         # Create DataBase file
@@ -191,6 +199,9 @@
         main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "topoShape", value="linear")
         main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
         main.CLIs[0].setCfg("org.onosproject.net.intent.impl.IntentManager", "skipReleaseResourcesOnWithdrawal", value="true")
+        if main.flowObj:
+            main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
+                                "useFlowObjectives", value="true")
         time.sleep(main.startUpSleep)
 
         # balanceMasters
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params
deleted file mode 100644
index 6eeed39..0000000
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params
+++ /dev/null
@@ -1,82 +0,0 @@
-<PARAMS>
-
-    <testcases>0,1,2,1,2,1,2,1,2</testcases>
-
-    <SCALE>1,3,5,7</SCALE>
-    <max>7</max>
-
-    <ENV>
-        <cellName>IntentInstallWithdrawCell</cellName>
-        <cellApps>drivers,null</cellApps>
-    </ENV>
-
-    <TEST>
-        <skipCleanInstall>yes</skipCleanInstall>
-        <warmUp>5</warmUp>
-        <sampleSize>20</sampleSize>
-        <intents>1,100</intents>                       #list format, will be split on ','
-        <ingress>null:0000000000000001/6</ingress>
-        <egress>null:0000000000000007/5</egress>
-        <debug>False</debug>
-    </TEST>
-
-    <GIT>
-        <gitPull>off</gitPull>
-        <gitBranch>master</gitBranch>
-    </GIT>
-
-    <DATABASE>
-        <file>/tmp/IntentInstallWithdrawLatDBWFO</file>
-    </DATABASE>
-    <ATTEMPTS>
-        <verify>3</verify>
-    </ATTEMPTS>
-
-    <SLEEP>
-        <startup>10</startup>
-        <install>10</install>
-        <verify>3</verify>
-        <reroute>3</reroute>
-        # timeout for pexpect
-        <timeout>300</timeout>
-    </SLEEP>
-
-    <CTRL>
-        <USER>sdn</USER>
-
-        <ip1>OC1</ip1>
-        <port1>6653</port1>
-
-        <ip2>OC2</ip2>
-        <port2>6653</port2>
-
-        <ip3>OC3</ip3>
-        <port3>6653</port3>
-
-        <ip4>OC4</ip4>
-        <port4>6653</port4>
-
-        <ip5>OC5</ip5>
-        <port5>6653</port5>
-
-        <ip6>OC6</ip6>
-        <port6>6653</port6>
-
-        <ip7>OC7</ip7>
-        <port7>6653</port7>
-
-    </CTRL>
-
-    <MN>
-        <ip1>OCN</ip1>
-    </MN>
-
-    <BENCH>
-        <user>sdn</user>
-        <ip1>localhost</ip1>
-    </BENCH>
-
-    <JSON>
-    </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py
deleted file mode 100644
index 37da138..0000000
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py
+++ /dev/null
@@ -1,324 +0,0 @@
-"""
-SCPFintentInstallWithdrawLatWithFlowObj:
-    - Test the latency of intent installed and withdrawn
-    - Use Push-test-intents command to push intents
-    - Use Null provider with 7 devices and linear topology
-    - Always push intents between 1/6 and 7/5
-    - The batch size is defined in parm file. (default 1,100)
-    - org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator useFlowObjectives set
-     to true
-    yunpeng@onlab.us
-"""
-
-import sys
-import os.path
-
-
-class SCPFintentInstallWithdrawLatWithFlowObj:
-    def __init__( self ):
-        self.default = ''
-
-    def CASE0( self, main ):
-        '''
-        - GIT
-        - BUILDING ONOS
-            Pull specific ONOS branch, then Build ONOS ono ONOS Bench.
-            This step is usually skipped. Because in a Jenkins driven automated
-            test env. We want Jenkins jobs to pull&build for flexibility to handle
-            different versions of ONOS.
-        - Construct tests variables
-        '''
-        gitPull = main.params['GIT']['gitPull']
-        gitBranch = main.params['GIT']['gitBranch']
-
-        main.case("Pull onos branch and build onos on Teststation.")
-
-        if gitPull == 'True':
-            main.step("Git Checkout ONOS branch: " + gitBranch)
-            stepResult = main.ONOSbench.gitCheckout(branch=gitBranch)
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully checkout onos branch.",
-                                    onfail="Failed to checkout onos branch. Exiting test...")
-            if not stepResult: main.exit()
-
-            main.step("Git Pull on ONOS branch:" + gitBranch)
-            stepResult = main.ONOSbench.gitPull()
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully pull onos. ",
-                                    onfail="Failed to pull onos. Exiting test ...")
-            if not stepResult: main.exit()
-
-            main.step("Building ONOS branch: " + gitBranch)
-            stepResult = main.ONOSbench.cleanInstall(skipTest=True)
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully build onos.",
-                                    onfail="Failed to build onos. Exiting test...")
-            if not stepResult: main.exit()
-
-        else:
-            main.log.warn("Skipped pulling onos and Skipped building ONOS")
-
-        main.apps = main.params['ENV']['cellApps']
-        main.BENCHUser = main.params['BENCH']['user']
-        main.BENCHIp = main.params['BENCH']['ip1']
-        main.MN1Ip = main.params['MN']['ip1']
-        main.maxNodes = int(main.params['max'])
-        main.cellName = main.params['ENV']['cellName']
-        main.scale = (main.params['SCALE']).split(",")
-        main.dbFileName = main.params['DATABASE']['file']
-        main.timeout = int(main.params['SLEEP']['timeout'])
-        main.startUpSleep = int(main.params['SLEEP']['startup'])
-        main.installSleep = int(main.params['SLEEP']['install'])
-        main.verifySleep = int(main.params['SLEEP']['verify'])
-        main.verifyAttempts = int(main.params['ATTEMPTS']['verify'])
-        main.sampleSize = int(main.params['TEST']['sampleSize'])
-        main.warmUp = int(main.params['TEST']['warmUp'])
-        main.intentsList = (main.params['TEST']['intents']).split(",")
-        main.ingress = main.params['TEST']['ingress']
-        main.egress = main.params['TEST']['egress']
-        main.debug = main.params['TEST']['debug']
-        for i in range(0, len(main.intentsList)):
-            main.intentsList[i] = int(main.intentsList[i])
-        # Create DataBase file
-        main.log.info("Create Database file " + main.dbFileName)
-        resultsDB = open(main.dbFileName, "w+")
-        resultsDB.close()
-
-    def CASE1( self, main ):
-        # Clean up test environment and set up
-        import time
-        main.log.info("Get ONOS cluster IP")
-        print(main.scale)
-        main.numCtrls = int(main.scale[0])
-        main.ONOSip = []
-        main.maxNumBatch = 0
-        main.AllONOSip = main.ONOSbench.getOnosIps()
-        for i in range(main.numCtrls):
-            main.ONOSip.append(main.AllONOSip[i])
-        main.log.info(main.ONOSip)
-        main.CLIs = []
-        main.log.info("Creating list of ONOS cli handles")
-        for i in range(main.numCtrls):
-            main.CLIs.append(getattr(main, 'ONOS%scli' % (i + 1)))
-
-        if not main.CLIs:
-            main.log.error("Failed to create the list of ONOS cli handles")
-            main.cleanup()
-            main.exit()
-
-        main.commit = main.ONOSbench.getVersion(report=True)
-        main.commit = main.commit.split(" ")[1]
-        main.log.info("Starting up %s node(s) ONOS cluster" % main.numCtrls)
-        main.log.info("Safety check, killing all ONOS processes" +
-                      " before initiating environment setup")
-
-        for i in range(main.numCtrls):
-            main.ONOSbench.onosDie(main.ONOSip[i])
-
-        main.log.info("NODE COUNT = %s" % main.numCtrls)
-        main.ONOSbench.createCellFile(main.ONOSbench.ip_address,
-                                      main.cellName,
-                                      main.MN1Ip,
-                                      main.apps,
-                                      main.ONOSip)
-        main.step("Apply cell to environment")
-        cellResult = main.ONOSbench.setCell(main.cellName)
-        verifyResult = main.ONOSbench.verifyCell()
-        stepResult = cellResult and verifyResult
-        utilities.assert_equals(expect=main.TRUE,
-                                actual=stepResult,
-                                onpass="Successfully applied cell to " + \
-                                       "environment",
-                                onfail="Failed to apply cell to environment ")
-
-        main.step("Creating ONOS package")
-        packageResult = main.ONOSbench.onosPackage()
-        stepResult = packageResult
-        utilities.assert_equals(expect=main.TRUE,
-                                actual=stepResult,
-                                onpass="Successfully created ONOS package",
-                                onfail="Failed to create ONOS package")
-
-        main.step("Uninstall ONOS package on all Nodes")
-        uninstallResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("Uninstalling package on ONOS Node IP: " + main.ONOSip[i])
-            u_result = main.ONOSbench.onosUninstall(main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=u_result,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            uninstallResult = (uninstallResult and u_result)
-
-        main.step("Install ONOS package on all Nodes")
-        installResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("Installing package on ONOS Node IP: " + main.ONOSip[i])
-            i_result = main.ONOSbench.onosInstall(node=main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=i_result,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            installResult = installResult and i_result
-
-        main.step("Verify ONOS nodes UP status")
-        statusResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("ONOS Node " + main.ONOSip[i] + " status:")
-            onos_status = main.ONOSbench.onosStatus(node=main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=onos_status,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            statusResult = (statusResult and onos_status)
-        time.sleep(2)
-        main.step("Start ONOS CLI on all nodes")
-        cliResult = main.TRUE
-        main.step(" Start ONOS cli using thread ")
-        startCliResult = main.TRUE
-        pool = []
-        main.threadID = 0
-        for i in range(int(main.numCtrls)):
-            t = main.Thread(target=main.CLIs[i].startOnosCli,
-                            threadID=main.threadID,
-                            name="startOnosCli",
-                            args=[main.ONOSip[i]],
-                            kwargs={"onosStartTimeout": main.timeout})
-            pool.append(t)
-            t.start()
-            main.threadID = main.threadID + 1
-        for t in pool:
-            t.join()
-            startCliResult = startCliResult and t.result
-        time.sleep(main.startUpSleep)
-
-        # configure apps
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=7)
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "topoShape", value="linear")
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-        main.CLIs[0].setCfg("org.onosproject.net.intent.impl.IntentManager",
-        "skipReleaseResourcesOnWithdrawal", value="true")
-        main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
-                            "useFlowObjectives", value="true")
-        time.sleep(main.startUpSleep)
-
-        # balanceMasters
-        main.CLIs[0].balanceMasters()
-        time.sleep(main.startUpSleep)
-
-    def CASE2( self, main ):
-        import time
-        import numpy
-        import json
-        print(main.intentsList)
-        for batchSize in main.intentsList:
-            main.log.report("Intent Batch size: {}".format(batchSize))
-            main.installLatList = []
-            main.withdrawLatList = []
-            validrun = 0
-            invalidrun = 0
-            # we use two variables to control the iteration
-            while validrun <= main.warmUp + main.sampleSize and invalidrun < 20:
-                if validrun >= main.warmUp:
-                    main.log.info("================================================")
-                    main.log.info("Starting test iteration " + str(validrun - main.warmUp))
-                    main.log.info("Total test iteration: " + str(invalidrun + validrun))
-                    main.log.info("================================================")
-                else:
-                    main.log.info("====================Warm Up=====================")
-
-                # push intents
-                installResult = main.CLIs[0].pushTestIntents(main.ingress, main.egress, batchSize,
-                                                             offset=1, options="-i", timeout=main.timeout,
-                                                             getResponse=True)
-                if type(installResult) is str:
-                    if "Failure" in installResult:
-                        main.log.error("Install Intents failure, ignore this iteration.")
-                        if validrun < main.warmUp:
-                            validrun += 1
-                            continue
-                        else:
-                            invalidrun += 1
-                            continue
-
-                    try:
-                        latency = int(installResult.split()[5])
-                        main.log.info(installResult)
-                    except:
-                        main.log.error("Failed to get latency, ignore this iteration.")
-                        main.log.error("Response from ONOS:")
-                        print(installResult)
-                        if validrun < main.warmUp:
-                            validrun += 1
-                            continue
-                        else:
-                            invalidrun += 1
-                            continue
-
-                    if validrun >= main.warmUp:
-                        main.installLatList.append(latency)
-                else:
-                    invalidrun += 1
-                    continue
-                time.sleep(2)
-                # Withdraw Intents
-                withdrawResult = main.CLIs[0].pushTestIntents(main.ingress, main.egress, batchSize,
-                                                              offset=1, options="-w", timeout=main.timeout,
-                                                              getResponse=True)
-
-                if type(withdrawResult) is str:
-                    if "Failure" in withdrawResult:
-                        main.log.error("withdraw Intents failure, ignore this iteration.")
-                        if validrun < main.warmUp:
-                            validrun += 1
-                            continue
-                        else:
-                            invalidrun += 1
-                            continue
-
-                    try:
-                        latency = int(withdrawResult.split()[5])
-                        main.log.info(withdrawResult)
-                    except:
-                        main.log.error("Failed to get latency, ignore this iteration.")
-                        main.log.error("Response from ONOS:")
-                        print(withdrawResult)
-                        if validrun < main.warmUp:
-                            validrun += 1
-                            continue
-                        else:
-                            invalidrun += 1
-                            continue
-
-                    if validrun >= main.warmUp:
-                        main.withdrawLatList.append(latency)
-                else:
-                    invalidrun += 1
-                    continue
-                time.sleep(2)
-                main.CLIs[0].purgeWithdrawnIntents()
-                validrun += 1
-            installave = numpy.average(main.installLatList)
-            installstd = numpy.std(main.installLatList)
-            withdrawave = numpy.average(main.withdrawLatList)
-            withdrawstd = numpy.std(main.withdrawLatList)
-            # log report
-            main.log.report("----------------------------------------------------")
-            main.log.report("Scale: " + str(main.numCtrls))
-            main.log.report("Intent batch: " + str(batchSize))
-            main.log.report("Install average: {}    std: {}".format(installave, installstd))
-            main.log.report("Withdraw average: {}   std: {}".format(withdrawave, withdrawstd))
-            # write result to database file
-            if not (numpy.isnan(installave) or numpy.isnan(installstd) or \
-                    numpy.isnan(withdrawstd) or numpy.isnan(withdrawave)):
-                databaseString = "'" + main.commit + "',"
-                databaseString += str(main.numCtrls) + ","
-                databaseString += str(batchSize) + ","
-                databaseString += str(installave) + ","
-                databaseString += str(installstd) + ","
-                databaseString += str(withdrawave) + ","
-                databaseString += str(withdrawstd) + "\n"
-                resultsDB = open(main.dbFileName, "a")
-                resultsDB.write(databaseString)
-                resultsDB.close()
-        del main.scale[0]
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.topo b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.topo
deleted file mode 100644
index 915d033..0000000
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.topo
+++ /dev/null
@@ -1,147 +0,0 @@
-<TOPOLOGY>
-
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS>
-                <home>~/onos</home>
-                <nodes>7</nodes> 
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOS1cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1cli>
-
-        <ONOS2cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2cli>
-
-        <ONOS3cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3cli>
-
-        <ONOS4cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4cli>
-
-        <ONOS5cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5cli>
-
-        <ONOS6cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6cli>
-
-        <ONOS7cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7cli>
-
-        <ONOS1>
-            <host>OC1</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1>
-
-        <ONOS2>
-            <host>OC2</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>10</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2>
-
-        <ONOS3>
-            <host>OC3</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>11</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3>
-
-        <ONOS4>
-            <host>OC4</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>12</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4>
-
-    
-        <ONOS5>
-            <host>OC5</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>13</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5>
-
-        <ONOS6>
-            <host>OC6</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>14</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6>
-
-        <ONOS7>
-            <host>OC7</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>15</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7>
-
-    </COMPONENT>
-
-</TOPOLOGY>
- 
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/__init__.py b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/__init__.py
+++ /dev/null
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
index 6d684cc..7c69450 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
+++ b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
@@ -15,12 +15,15 @@
         <warmUp>5</warmUp>
         <sampleSize>20</sampleSize>
         <intents>1,100,1000</intents>                       #list format, will be split on ','
+        <FObjintents>1,100</FObjintents>
         <ingress>null:0000000000000001/0</ingress>
         <egress>null:0000000000000007/0</egress>
         <debug>False</debug>
+        <flowObj>False</flowObj>
     </TEST>
     <DATABASE>
-        <file>/tmp/IntentRerouteLatDB</file>
+        <dbName>/tmp/IntentRerouteLatDB</dbName>
+        <dbFlowObj>/tmp/IntentRerouteLatDBWithFlowObj</dbFlowObj>
     </DATABASE>
 
     <GIT>
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
index 4a63f18..93c467c 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
+++ b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
@@ -69,7 +69,6 @@
         main.skipMvn = main.params['TEST']['skipCleanInstall']
         main.cellName = main.params['ENV']['cellName']
         main.scale = (main.params['SCALE']).split(",")
-        main.dbFileName = main.params['DATABASE']['file']
         main.timeout = int(main.params['SLEEP']['timeout'])
         main.startUpSleep = int(main.params['SLEEP']['startup'])
         main.installSleep = int(main.params['SLEEP']['install'])
@@ -78,10 +77,20 @@
         main.verifyAttempts = int(main.params['ATTEMPTS']['verify'])
         main.sampleSize = int(main.params['TEST']['sampleSize'])
         main.warmUp = int(main.params['TEST']['warmUp'])
-        main.intentsList = (main.params['TEST']['intents']).split(",")
         main.ingress = main.params['TEST']['ingress']
         main.egress = main.params['TEST']['egress']
         main.debug = main.params['TEST']['debug']
+        main.flowObj = main.params['TEST']['flowObj']
+
+        if main.flowObj == "True":
+            main.flowObj = True
+            main.dbFileName = main.params['DATABASE']['dbFlowObj']
+            main.intentsList = (main.params['TEST']['FObjintents']).split(",")
+        else:
+            main.flowObj = False
+            main.dbFileName = main.params['DATABASE']['dbName']
+            main.intentsList = (main.params['TEST']['intents']).split(",")
+
         for i in range(0, len(main.intentsList)):
             main.intentsList[i] = int(main.intentsList[i])
             # Create DataBase file
@@ -202,7 +211,9 @@
         main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "topoShape", value="reroute")
         main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
         main.CLIs[0].setCfg("org.onosproject.store.flow.impl.DistributedFlowRuleStore", "backupEnabled", value="false")
-
+        if main.flowObj:
+            main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
+                                "useFlowObjectives", value="true")
         time.sleep(main.startUpSleep)
 
         # Balance Master
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/README b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/README
deleted file mode 100644
index 26b551b..0000000
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/README
+++ /dev/null
@@ -1,29 +0,0 @@
-INTENT REROUTE LATENCY
-
-Summary: This is a performance test designed to benchmark the
-    intent reroute speed of ONOS at various controller cluster sizes.
-
-Pre-requisites: To run out-of-the box this test requires 7 NODES.
-    OC1->OC7 must be set before initiating the test. Passwordless login
-    must be set from TestStation "sdn" root user.
-
-***If you wish to run this test with less than 7 nodes the
-    following alterations must be made:
-
-NOTE: Only scale sizes 1,3,5 and 7 will be functional
-
-Modifying .params file:
--- Remove any values in the comma separated list in
-    the <scale> tag that are above your desired cluster size.
-
--- Remove one instance of “1,2” from the <testcases> tag for
-    each value you removed from <scale> (case1 and 2 are each
-    called once for each scale value)
-
--- Change the value in the <max> tag to your desired scale size (1,3,5)
-
-Modifying .topo file:
--- Change the <ONOSbench/COMPONENTS/nodes> tag to
-    your desired scale size
-
--- Remove all unneeded <ONOS#cli> tags and their contents
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params
deleted file mode 100644
index 237dc5d..0000000
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params
+++ /dev/null
@@ -1,83 +0,0 @@
-<PARAMS>
-
-    <testcases>0,1,2,1,2,1,2,1,2</testcases>
-
-    <SCALE>1,3,5,7</SCALE>
-    <max>7</max>
-
-    <ENV>
-        <cellName>intentRerouteCell</cellName>
-        <cellApps>drivers,null,intentperf,metrics</cellApps>
-    </ENV>
-
-    <TEST>
-        <skipCleanInstall>yes</skipCleanInstall>
-        <warmUp>5</warmUp>
-        <sampleSize>20</sampleSize>
-        <intents>1,100</intents>                       #list format, will be split on ','
-        <ingress>null:0000000000000001/0</ingress>
-        <egress>null:0000000000000007/0</egress>
-        <debug>False</debug>
-    </TEST>
-    <DATABASE>
-        <file>/tmp/IntentRerouteLatDBWithFlowObj</file>
-    </DATABASE>
-
-    <GIT>
-        <gitPull>False</gitPull>
-        <gitBranch>master</gitBranch>
-    </GIT>
-
-    <ATTEMPTS>
-        <verify>3</verify>
-    </ATTEMPTS>
-
-    <SLEEP>
-        <startup>10</startup>
-        <install>10</install>
-        <setmaster>5</setmaster>
-        <verify>5</verify>
-        <reroute>3</reroute>
-        # timeout for pexpect
-        <timeout>300</timeout>
-    </SLEEP>
-
-    <CTRL>
-        <USER>sdn</USER>
-
-        <ip1>OC1</ip1>
-        <port1>6653</port1>
-
-        <ip2>OC2</ip2>
-        <port2>6653</port2>
-
-        <ip3>OC3</ip3>
-        <port3>6653</port3>
-
-        <ip4>OC4</ip4>
-        <port4>6653</port4>
-
-        <ip5>OC5</ip5>
-        <port5>6653</port5>
-
-        <ip6>OC6</ip6>
-        <port6>6653</port6>
-
-        <ip7>OC7</ip7>
-        <port7>6653</port7>
-
-    </CTRL>
-
-    <MN>
-        <ip1>OCN</ip1>
-    </MN>
-
-    <BENCH>
-        <user>sdn</user>
-        <ip1>localhost</ip1>
-    </BENCH>
-
-    <JSON>
-    </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py
deleted file mode 100644
index bc6ff0d..0000000
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py
+++ /dev/null
@@ -1,441 +0,0 @@
-# SCPFintentRerouteLatWithFlowObj
-"""
-SCPFintentRerouteLat
-    - Test Intent Reroute Latency
-    - Test Algorithm:
-        1. Start Null Provider reroute Topology
-        2. Using Push-test-intents to push batch size intents from switch 1 to switch 7
-        3. Cut the link between switch 3 and switch 4 (the path will reroute to switch 8)
-        4. Get the topology time stamp
-        5. Get Intent reroute(Installed) time stamp from each nodes
-        6. Use the latest intent time stamp subtract topology time stamp
-    - This test will run 5 warm up by default, warm up iteration can be setup in Param file
-    - The intent batch size will default set to 1 and 100, also can be set in Param file
-    - The unit of the latency result is milliseconds
-    - Ues flowObject set to True
-"""
-
-class SCPFintentRerouteLatWithFlowObj:
-    def __init__(self):
-        self.default = ''
-
-    def CASE0( self, main ):
-        '''
-        - GIT
-        - BUILDING ONOS
-            Pull specific ONOS branch, then Build ONOS ono ONOS Bench.
-            This step is usually skipped. Because in a Jenkins driven automated
-            test env. We want Jenkins jobs to pull&build for flexibility to handle
-            different versions of ONOS.
-        - Construct tests variables
-        '''
-        gitPull = main.params['GIT']['gitPull']
-        gitBranch = main.params['GIT']['gitBranch']
-
-        main.case("Pull onos branch and build onos on Teststation.")
-
-        if gitPull == 'True':
-            main.step("Git Checkout ONOS branch: " + gitBranch)
-            stepResult = main.ONOSbench.gitCheckout(branch=gitBranch)
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully checkout onos branch.",
-                                    onfail="Failed to checkout onos branch. Exiting test...")
-            if not stepResult: main.exit()
-
-            main.step("Git Pull on ONOS branch:" + gitBranch)
-            stepResult = main.ONOSbench.gitPull()
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully pull onos. ",
-                                    onfail="Failed to pull onos. Exiting test ...")
-            if not stepResult: main.exit()
-
-            main.step("Building ONOS branch: " + gitBranch)
-            stepResult = main.ONOSbench.cleanInstall(skipTest=True)
-            utilities.assert_equals(expect=main.TRUE,
-                                    actual=stepResult,
-                                    onpass="Successfully build onos.",
-                                    onfail="Failed to build onos. Exiting test...")
-            if not stepResult: main.exit()
-
-        else:
-            main.log.warn("Skipped pulling onos and Skipped building ONOS")
-
-        main.apps = main.params['ENV']['cellApps']
-        main.BENCHUser = main.params['BENCH']['user']
-        main.BENCHIp = main.params['BENCH']['ip1']
-        main.MN1Ip = main.params['MN']['ip1']
-        main.maxNodes = int(main.params['max'])
-        main.skipMvn = main.params['TEST']['skipCleanInstall']
-        main.cellName = main.params['ENV']['cellName']
-        main.scale = (main.params['SCALE']).split(",")
-        main.dbFileName = main.params['DATABASE']['file']
-        main.timeout = int(main.params['SLEEP']['timeout'])
-        main.startUpSleep = int(main.params['SLEEP']['startup'])
-        main.installSleep = int(main.params['SLEEP']['install'])
-        main.setMasterSleep = int(main.params['SLEEP']['setmaster'])
-        main.verifySleep = int(main.params['SLEEP']['verify'])
-        main.verifyAttempts = int(main.params['ATTEMPTS']['verify'])
-        main.sampleSize = int(main.params['TEST']['sampleSize'])
-        main.warmUp = int(main.params['TEST']['warmUp'])
-        main.intentsList = (main.params['TEST']['intents']).split(",")
-        main.ingress = main.params['TEST']['ingress']
-        main.egress = main.params['TEST']['egress']
-        main.debug = main.params['TEST']['debug']
-        for i in range(0, len(main.intentsList)):
-            main.intentsList[i] = int(main.intentsList[i])
-            # Create DataBase file
-        main.log.info("Create Database file " + main.dbFileName)
-        resultsDB = open(main.dbFileName, "w+")
-        resultsDB.close()
-
-    def CASE1( self, main ):
-        '''
-            clean up test environment and set up
-        '''
-        import time
-
-        main.log.info("Get ONOS cluster IP")
-        print(main.scale)
-        main.numCtrls = int(main.scale[0])
-        main.ONOSip = []
-        main.maxNumBatch = 0
-        main.AllONOSip = main.ONOSbench.getOnosIps()
-        for i in range(main.numCtrls):
-            main.ONOSip.append(main.AllONOSip[i])
-        main.log.info(main.ONOSip)
-        main.CLIs = []
-        main.log.info("Creating list of ONOS cli handles")
-        for i in range(main.numCtrls):
-            main.CLIs.append(getattr(main, 'ONOS%scli' % (i + 1)))
-
-        if not main.CLIs:
-            main.log.error("Failed to create the list of ONOS cli handles")
-            main.cleanup()
-            main.exit()
-
-        main.commit = main.ONOSbench.getVersion(report=True)
-        main.commit = main.commit.split(" ")[1]
-        main.log.info("Starting up %s node(s) ONOS cluster" % main.numCtrls)
-        main.log.info("Safety check, killing all ONOS processes" +
-                      " before initiating environment setup")
-
-        for i in range(main.numCtrls):
-            main.ONOSbench.onosDie(main.ONOSip[i])
-
-        main.log.info("NODE COUNT = %s" % main.numCtrls)
-        main.ONOSbench.createCellFile(main.ONOSbench.ip_address,
-                                      main.cellName,
-                                      main.MN1Ip,
-                                      main.apps,
-                                      main.ONOSip)
-        main.step("Apply cell to environment")
-        cellResult = main.ONOSbench.setCell(main.cellName)
-        verifyResult = main.ONOSbench.verifyCell()
-        stepResult = cellResult and verifyResult
-        utilities.assert_equals(expect=main.TRUE,
-                                actual=stepResult,
-                                onpass="Successfully applied cell to " + \
-                                       "environment",
-                                onfail="Failed to apply cell to environment ")
-
-        main.step("Creating ONOS package")
-        packageResult = main.ONOSbench.onosPackage()
-        stepResult = packageResult
-        utilities.assert_equals(expect=main.TRUE,
-                                actual=stepResult,
-                                onpass="Successfully created ONOS package",
-                                onfail="Failed to create ONOS package")
-
-        main.step("Uninstall ONOS package on all Nodes")
-        uninstallResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("Uninstalling package on ONOS Node IP: " + main.ONOSip[i])
-            u_result = main.ONOSbench.onosUninstall(main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=u_result,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            uninstallResult = (uninstallResult and u_result)
-
-        main.step("Install ONOS package on all Nodes")
-        installResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("Installing package on ONOS Node IP: " + main.ONOSip[i])
-            i_result = main.ONOSbench.onosInstall(node=main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=i_result,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            installResult = installResult and i_result
-
-        main.step("Verify ONOS nodes UP status")
-        statusResult = main.TRUE
-        for i in range(int(main.numCtrls)):
-            main.log.info("ONOS Node " + main.ONOSip[i] + " status:")
-            onos_status = main.ONOSbench.onosStatus(node=main.ONOSip[i])
-            utilities.assert_equals(expect=main.TRUE, actual=onos_status,
-                                    onpass="Test step PASS",
-                                    onfail="Test step FAIL")
-            statusResult = (statusResult and onos_status)
-        time.sleep(2)
-        main.step("Start ONOS CLI on all nodes")
-        cliResult = main.TRUE
-        main.step(" Start ONOS cli using thread ")
-        startCliResult = main.TRUE
-        pool = []
-        main.threadID = 0
-        for i in range(int(main.numCtrls)):
-            t = main.Thread(target=main.CLIs[i].startOnosCli,
-                            threadID=main.threadID,
-                            name="startOnosCli",
-                            args=[main.ONOSip[i]],
-                            kwargs={"onosStartTimeout": main.timeout})
-            pool.append(t)
-            t.start()
-            main.threadID = main.threadID + 1
-        for t in pool:
-            t.join()
-            startCliResult = startCliResult and t.result
-        time.sleep(main.startUpSleep)
-
-        # configure apps
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "topoShape", value="reroute")
-        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-        main.CLIs[0].setCfg("org.onosproject.store.flow.impl.DistributedFlowRuleStore", "backupEnabled", value="false")
-        main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
-                            "useFlowObjectives", value="true")
-
-        time.sleep(main.startUpSleep)
-
-        # Balance Master
-        main.CLIs[0].balanceMasters()
-        if len(main.ONOSip) > 1:
-            main.CLIs[0].deviceRole("null:0000000000000003", main.ONOSip[0])
-            main.CLIs[0].deviceRole("null:0000000000000004", main.ONOSip[0])
-        time.sleep( main.setMasterSleep )
-
-    def CASE2( self, main ):
-        import time
-        import numpy
-        import datetime
-        import json
-        # from scipy import stats
-
-        ts = time.time()
-        print(main.intentsList)
-        for batchSize in main.intentsList:
-            main.log.report("Intent Batch size: " + str(batchSize) + "\n      ")
-            main.LatencyList = []
-            validRun = 0
-            invalidRun = 0
-            while validRun <= main.warmUp + main.sampleSize and invalidRun <= 20:
-                if validRun >= main.warmUp:
-                    main.log.info("================================================")
-                    main.log.info("Starting test iteration: {} ".format(validRun - main.warmUp))
-                    main.log.info("Total iteration: {}".format(validRun + invalidRun))
-                    main.log.info("================================================")
-                else:
-                    main.log.info("====================Warm Up=====================")
-
-                # push intents
-                main.CLIs[0].pushTestIntents(main.ingress, main.egress, batchSize,
-                                             offset=1, options="-i", timeout=main.timeout)
-
-                # check links and flows
-                k = 0
-                verify = main.FALSE
-                linkCheck = 0
-                flowsCheck = 0
-                while k <= main.verifyAttempts:
-                    time.sleep(main.verifySleep)
-                    summary = json.loads(main.CLIs[0].summary(timeout=main.timeout))
-                    linkCheck = summary.get("links")
-                    flowsCheck = summary.get("flows")
-                    if linkCheck == 16 and flowsCheck == batchSize * 7:
-                        main.log.info("links: {}, flows: {} ".format(linkCheck, flowsCheck))
-                        verify = main.TRUE
-                        break
-                    k += 1
-                if not verify:
-                    main.log.warn("Links or flows number are not match!")
-                    main.log.warn("links: {}, flows: {} ".format(linkCheck, flowsCheck))
-                    # bring back topology
-                    main.log.info("Bring back topology...")
-                    main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                    time.sleep(1)
-                    main.CLIs[0].purgeWithdrawnIntents()
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=0)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="false")
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-                    if validRun >= main.warmUp:
-                        invalidRun += 1
-                        continue
-                    else:
-                        validRun += 1
-                        continue
-
-                # Bring link down
-                main.CLIs[0].link("0000000000000004/1", "0000000000000003/2", "down",
-                                  timeout=main.timeout, showResponse=False)
-                verify = main.FALSE
-                k = 0
-                topoManagerLog = ""
-                while k <= main.verifyAttempts:
-                    time.sleep(main.verifySleep)
-                    summary = json.loads(main.CLIs[0].summary(timeout=main.timeout))
-                    linkCheck = summary.get("links")
-                    flowsCheck = summary.get("flows")
-                    if linkCheck == 14:
-                        main.log.info("links: {}, flows: {} ".format(linkCheck, flowsCheck))
-                        verify = main.TRUE
-                        break
-                    k += 1
-                if not verify:
-                    main.log.warn("Links number are not match in TopologyManager log!")
-                    main.log.warn(topoManagerLog)
-                    # bring back topology
-                    main.log.info("Bring back topology...")
-                    main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                    time.sleep(1)
-                    main.CLIs[0].purgeWithdrawnIntents()
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=0)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="false")
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-                    if validRun >= main.warmUp:
-                        invalidRun += 1
-                        continue
-                    else:
-                        validRun += 1
-                        continue
-
-                try:
-                    # expect twice to clean the pexpect buffer
-                    main.ONOSbench.handle.sendline("")
-                    main.ONOSbench.handle.expect("\$")
-                    main.ONOSbench.handle.expect("\$")
-                    # send line by using bench, can't use driver because pexpect buffer problem
-                    cmd = "onos-ssh $OC1 cat /opt/onos/log/karaf.log | grep TopologyManager| tail -1"
-                    main.ONOSbench.handle.sendline(cmd)
-                    time.sleep(1)
-                    main.ONOSbench.handle.expect(":~")
-                    topoManagerLog = main.ONOSbench.handle.before
-                    topoManagerLogTemp = topoManagerLog.splitlines()
-                    # To make sure we get correct topology log
-                    for lines in topoManagerLogTemp:
-                        if "creationTime" in lines:
-                            topoManagerLog = lines
-                    main.log.info("Topology Manager log:")
-                    print(topoManagerLog)
-                    cutTimestamp = float(topoManagerLog.split("creationTime=")[1].split(",")[0])
-                except:
-                    main.log.error("Topology Log is not correct!")
-                    print(topoManagerLog)
-                    # bring back topology
-                    main.log.info("Bring back topology...")
-                    verify = main.FALSE
-                    main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                    time.sleep(1)
-                    main.CLIs[0].purgeWithdrawnIntents()
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=0)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="false")
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-                    if validRun >= main.warmUp:
-                        invalidRun += 1
-                    else:
-                        validRun += 1
-                    # If we got wrong Topology log, we should skip this iteration, and continue for next one
-                    continue
-
-                installedTemp = []
-                time.sleep(10)
-                for cli in main.CLIs:
-                    tempJson = json.loads(cli.intentsEventsMetrics())
-                    Installedtime = tempJson.get('intentInstalledTimestamp').get('value')
-                    installedTemp.append(float(Installedtime))
-                for i in range(0, len(installedTemp)):
-                    main.log.info("ONOS Node {} Installed Time stemp: {}".format((i + 1), installedTemp[i]))
-                maxInstallTime = float(max(installedTemp))
-                if validRun >= main.warmUp and verify:
-                    main.log.info("Installed time stemp: {0:f}".format(maxInstallTime))
-                    main.log.info("CutTimestamp: {0:f}".format(cutTimestamp))
-                    # Both timeStemps are milliseconds
-                    main.log.info("Latency: {0:f}".format(float(maxInstallTime - cutTimestamp)))
-                    if float(maxInstallTime - cutTimestamp) < 0:
-                        main.log.info("Latency less than 0!")
-                        # bring back topology
-                        main.log.info("Bring back topology...")
-                        verify = main.FALSE
-                        main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                        time.sleep(1)
-                        main.CLIs[0].purgeWithdrawnIntents()
-                        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=0)
-                        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="false")
-                        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-                        main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-                        if validRun >= main.warmUp:
-                            invalidRun += 1
-                        else:
-                            validRun += 1
-                        continue
-                    main.LatencyList.append(float(maxInstallTime - cutTimestamp))
-                # We get valid latency, validRun + 1
-                validRun += 1
-
-                # Verify Summary after we bring up link, and withdrawn intents
-                main.CLIs[0].link("0000000000000004/1", "0000000000000003/2", "up",
-                                  timeout=main.timeout)
-                k = 0
-                verify = main.FALSE
-                linkCheck = 0
-                flowsCheck = 0
-                while k <= main.verifyAttempts:
-                    time.sleep(main.verifySleep)
-                    main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                    time.sleep(1)
-                    main.CLIs[0].purgeWithdrawnIntents()
-                    summary = json.loads(main.CLIs[0].summary())
-                    linkCheck = summary.get("links")
-                    flowsCheck = summary.get("flows")
-                    intentCheck = summary.get("intents")
-                    if linkCheck == 16 and flowsCheck == 0 and intentCheck == 0:
-                        main.log.info("links: {}, flows: {}, intents: {} ".format(linkCheck, flowsCheck, intentCheck))
-                        verify = main.TRUE
-                        break
-                    k += 1
-                if not verify:
-                    main.log.error("links, flows, or intents are not correct!")
-                    main.log.info("links: {}, flows: {}, intents: {} ".format(linkCheck, flowsCheck, intentCheck))
-                    # bring back topology
-                    main.log.info("Bring back topology...")
-                    main.CLIs[0].removeAllIntents(purge=True, sync=True, timeout=main.timeout)
-                    time.sleep(1)
-                    main.CLIs[0].purgeWithdrawnIntents()
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=0)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="false")
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "deviceCount", value=8)
-                    main.CLIs[0].setCfg("org.onosproject.provider.nil.NullProviders", "enabled", value="true")
-                    continue
-
-            aveLatency = 0
-            stdLatency = 0
-            aveLatency = numpy.average(main.LatencyList)
-            stdLatency = numpy.std(main.LatencyList)
-            main.log.report("Scale: " + str(main.numCtrls) + "  \tIntent batch: " + str(batchSize))
-            main.log.report("Latency average:................" + str(aveLatency))
-            main.log.report("Latency standard deviation:....." + str(stdLatency))
-            main.log.report("________________________________________________________")
-
-            if not (numpy.isnan(aveLatency) or numpy.isnan(stdLatency)):
-                # check if got NaN for result
-                resultsDB = open(main.dbFileName, "a")
-                resultsDB.write("'" + main.commit + "',")
-                resultsDB.write(str(main.numCtrls) + ",")
-                resultsDB.write(str(batchSize) + ",")
-                resultsDB.write(str(aveLatency) + ",")
-                resultsDB.write(str(stdLatency) + "\n")
-                resultsDB.close()
-        del main.scale[0]
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.topo b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.topo
deleted file mode 100644
index 915d033..0000000
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.topo
+++ /dev/null
@@ -1,147 +0,0 @@
-<TOPOLOGY>
-
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS>
-                <home>~/onos</home>
-                <nodes>7</nodes> 
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOS1cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1cli>
-
-        <ONOS2cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2cli>
-
-        <ONOS3cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3cli>
-
-        <ONOS4cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4cli>
-
-        <ONOS5cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5cli>
-
-        <ONOS6cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6cli>
-
-        <ONOS7cli>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7cli>
-
-        <ONOS1>
-            <host>OC1</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>9</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS1>
-
-        <ONOS2>
-            <host>OC2</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>10</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS2>
-
-        <ONOS3>
-            <host>OC3</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>11</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS3>
-
-        <ONOS4>
-            <host>OC4</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>12</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS4>
-
-    
-        <ONOS5>
-            <host>OC5</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>13</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS5>
-
-        <ONOS6>
-            <host>OC6</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>14</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS6>
-
-        <ONOS7>
-            <host>OC7</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>15</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOS7>
-
-    </COMPONENT>
-
-</TOPOLOGY>
- 
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/__init__.py b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/__init__.py
+++ /dev/null
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/README b/TestON/tests/SCPF/SCPFmaxIntents/README
deleted file mode 100644
index cb53df8..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/README
+++ /dev/null
@@ -1,6 +0,0 @@
-Summary:
-        This is a performance test suit, designed to test the upper limits
-        of onos and ovsdb with respect to installing intents and rerouting flows.
-NOTE:
-        This test is largely based on the hardware used to run onos and mininet.
-        Therefore, results will very test station to test station.
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.params b/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.params
deleted file mode 100755
index 56ad4d8..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.params
+++ /dev/null
@@ -1,103 +0,0 @@
-<PARAMS>
-
-    # 1-init
-    # 2-setup
-    # 10-null provider setup
-    # 11-mininet setup
-    # 20-pushing intents, and rerouting intents if reroute is true
-    # 1,2,10,20,2,11,20,100
-    <testcases>1,2,10,20</testcases>
-
-    <reroute>False</reroute>
-
-    <SCALE>
-        <size>1</size>
-        <max>1</max>
-    </SCALE>
-
-    <DEPENDENCY>
-        <path>/tests/SCPFmaxIntents/dependencies/</path>
-        <wrapper1>startUp</wrapper1>
-        <wrapper2>maxIntentFunctions</wrapper2>
-        <topology>rerouteTopo.py</topology>
-    </DEPENDENCY>
-
-    <ENV>
-        <cellName>productionCell</cellName>
-        <cellApps>drivers</cellApps>
-    </ENV>
-
-    <GIT>
-        <pull>False</pull>
-        <branch>master</branch>
-    </GIT>
-
-    <CTRL>
-        <port>6653</port>
-    </CTRL>
-
-    <SLEEP>
-        <startup>3</startup>
-        <install>1</install>
-        <verify>5</verify>
-        <reroute>3</reroute>
-        # timeout for pexpect
-        <timeout>120</timeout>
-    </SLEEP>
-
-    <ATTEMPTS>
-        <verify>3</verify>
-        <push>3</push>
-    </ATTEMPTS>
-
-    <DATABASE>
-        <file>/tmp/MaxIntentDB</file>
-        <nic>1gig</nic>
-        <node>baremetal</node>
-    </DATABASE>
-
-    <LINK>
-        <ingress>0000000000000001/9</ingress>
-        <egress>0000000000000002/9</egress>
-    </LINK>
-
-    # CASE10
-    <NULL>
-        # CASE20
-        <PUSH>
-            <batch_size>1000</batch_size>
-            <min_intents>100000</min_intents>
-            <max_intents>1000000</max_intents>
-            <check_interval>100000</check_interval>
-        </PUSH>
-
-        # if reroute is true
-        <REROUTE>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>10000</max_intents>
-            <check_interval>10000</check_interval>
-        </REROUTE>
-    </NULL>
-
-    # CASE11
-    <OVS>
-        # CASE20
-        <PUSH>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>500000</max_intents>
-            <check_interval>10000</check_interval>
-        </PUSH>
-
-        # if reroute is true
-        <REROUTE>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>500000</max_intents>
-            <check_interval>10000</check_interval>
-        </REROUTE>
-    </OVS>
-
-
-</PARAMS>
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.py b/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.py
deleted file mode 100644
index 4bca4da..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.py
+++ /dev/null
@@ -1,517 +0,0 @@
-
-# This is a performance scale intent that test onos to see how many intents can
-# be installed and rerouted using the null provider and mininet.
-'''
-This test will not test on reroute and OVS!!!
-If you need test on reroute or OVS, change the params file
-
-Test information:
-    - BatchSize: 1000
-    - Minimum intents: 10,000
-    - Maximum Intents: 1,000,000
-    - Check Interval: 10,000
-    - Link:
-        - ingress: 0000000000000001/9
-        - egress: 0000000000000002/9
-    - Timeout: 120 Seconds
-'''
-
-class SCPFmaxIntents:
-
-    def __init__( self ):
-        self.default = ''
-
-    def CASE1( self, main ):
-        import time
-        import os
-        import imp
-
-        """
-        - Construct tests variables
-        - GIT ( optional )
-            - Checkout ONOS master branch
-            - Pull latest ONOS code
-        - Building ONOS ( optional )
-            - Install ONOS package
-            - Build ONOS package
-        - Set up cell
-            - Create cell file
-            - Set cell file
-            - Verify cell file
-        - Kill ONOS process
-        """
-
-        main.case( "Constructing test variables and building ONOS package" )
-        main.step( "Constructing test variables" )
-        stepResult = main.FALSE
-
-        # Test variables
-        main.testOnDirectory = os.path.dirname( os.getcwd ( ) )
-        main.dependencyPath = main.testOnDirectory + \
-                main.params['DEPENDENCY']['path']
-        main.cellName = main.params[ 'ENV' ][ 'cellName' ]
-        main.apps = main.params[ 'ENV' ][ 'cellApps' ]
-        main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
-        main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
-        main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] )
-        main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
-        main.timeout = int(main.params['SLEEP']['timeout'])
-        main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
-        main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
-        main.verifySleep = int( main.params[ 'SLEEP' ][ 'verify' ] )
-        main.rerouteSleep = int ( main.params['SLEEP']['reroute'] )
-        main.verifyAttempts = int( main.params['ATTEMPTS']['verify'] )
-        main.ingress = main.params['LINK']['ingress']
-        main.egress = main.params['LINK']['egress']
-        main.dbFileName = main.params['DATABASE']['file']
-        main.cellData = {} # for creating cell file
-        main.reroute = main.params['reroute']
-        if main.reroute == "True":
-            main.reroute = True
-        else:
-            main.reroute = False
-        main.CLIs = []
-        main.ONOSip = []
-        main.maxNumBatch = 0
-        main.ONOSip = main.ONOSbench.getOnosIps()
-        main.log.info(main.ONOSip)
-        main.setupSkipped = False
-
-        wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
-        wrapperFile2 = main.params[ 'DEPENDENCY' ][ 'wrapper2' ]
-        gitBranch = main.params[ 'GIT' ][ 'branch' ]
-        gitPull = main.params[ 'GIT' ][ 'pull' ]
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-
-        # main.scale[ 0 ] determines the current number of ONOS controller
-        main.numCtrls = int( main.scale[ 0 ] )
-
-        main.log.info("Creating list of ONOS cli handles")
-        for i in range(main.maxNodes):
-            main.CLIs.append( getattr( main, 'ONOScli' + str( i+1 )))
-
-        if not main.CLIs:
-            main.log.error("Failed to create the list of ONOS cli handles")
-            main.cleanup()
-            main.exit()
-
-        main.log.info("Loading wrapper files")
-        main.startUp = imp.load_source( wrapperFile1,
-                                        main.dependencyPath +
-                                        wrapperFile1 +
-                                        ".py" )
-
-        main.intentFunctions = imp.load_source( wrapperFile2,
-                                               main.dependencyPath +
-                                               wrapperFile2 +
-                                               ".py" )
-
-        copyResult = main.ONOSbench.copyMininetFile( main.topology,
-                                                    main.dependencyPath,
-                                                    main.Mininet1.user_name,
-                                                    main.Mininet1.ip_address )
-
-        commit = main.ONOSbench.getVersion(report=True)
-        commit = commit.split(" ")[1]
-
-        if gitPull == 'True':
-            if not main.startUp.onosBuild( main, gitBranch ):
-                main.log.error("Failed to build ONOS")
-                main.cleanup()
-                main.exit()
-        else:
-            main.log.warn( "Did not pull new code so skipping mvn " +
-                           "clean install" )
-
-        main.log.info( "Starting up %s node(s) ONOS cluster" % main.numCtrls)
-        main.log.info( "Safety check, killing all ONOS processes" +
-                       " before initiating environment setup" )
-
-        for i in range( main.maxNodes ):
-            main.ONOSbench.onosDie( main.ONOSip[ i ] )
-
-        main.log.info( "NODE COUNT = %s" % main.numCtrls)
-
-        tempOnosIp = []
-        for i in range( main.numCtrls ):
-            tempOnosIp.append( main.ONOSip[i] )
-
-        main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
-                                       "temp",
-                                       main.Mininet1.ip_address,
-                                       main.apps,
-                                       tempOnosIp )
-
-        main.step( "Apply cell to environment" )
-        cellResult = main.ONOSbench.setCell( "temp" )
-        verifyResult = main.ONOSbench.verifyCell()
-        stepResult = cellResult and verifyResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully applied cell to " + \
-                                        "environment",
-                                 onfail="Failed to apply cell to environment " )
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()
-        stepResult = packageResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully created ONOS package",
-                                 onfail="Failed to create ONOS package" )
-
-        main.log.info("Creating DB file")
-        with open(main.dbFileName, "w+") as dbFile:
-            temp = "'" + commit + "',"
-            temp += "'" + nic + "',"
-            temp += str(main.numCtrls) + ","
-            temp += "'" + node + "1" + "'"
-            temp += ",0"
-            temp += ",0"
-            temp += ",0"
-            temp += ",0"
-            dbFile.write(temp)
-
-    def CASE2( self, main ):
-        """
-        - Uninstall ONOS cluster
-        - Verify ONOS start up
-        - Install ONOS cluster
-        - Connect to cli
-        """
-
-        main.step( "Installing ONOS with -f" )
-        onosInstallResult = main.TRUE
-        for i in range( main.numCtrls ):
-            onosInstallResult = onosInstallResult and \
-                    main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
-        stepResult = onosInstallResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully installed ONOS package",
-                                 onfail="Failed to install ONOS package" )
-
-        time.sleep( main.startUpSleep )
-
-        main.step( "Start ONOS cli" )
-        cliResult = main.TRUE
-        for i in range( main.numCtrls ):
-            cliResult = cliResult and \
-                        main.CLIs[ i ].startOnosCli( main.ONOSip[ i ] )
-        stepResult = cliResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully start ONOS cli",
-                                 onfail="Failed to start ONOS cli" )
-
-        time.sleep( main.startUpSleep )
-
-    def CASE10( self, main ):
-        """
-            Setting up null-provider
-        """
-        import json
-        # Activate apps
-        main.step("Activating null-provider")
-        appStatus = utilities.retry( main.CLIs[0].activateApp,
-                                     main.FALSE,
-                                     ['org.onosproject.null'],
-                                     sleep=main.verifySleep,
-                                     attempts=main.verifyAttempts )
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=appStatus,
-                                 onpass="Successfully activated null-provider",
-                                 onfail="Failed activate null-provider" )
-
-        # Setup the null-provider
-        main.step("Configuring null-provider")
-        cfgStatus = utilities.retry( main.ONOSbench.onosCfgSet,
-                                     main.FALSE,
-                                     [ main.ONOSip[0],
-                                      'org.onosproject.provider.nil.NullProviders', 'deviceCount 3'],
-                                     sleep=main.verifySleep,
-                                     attempts = main.verifyAttempts )
-        cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
-                                                   main.FALSE,
-                                                   [ main.ONOSip[0],
-                                                     'org.onosproject.provider.nil.NullProviders', 'topoShape reroute'],
-                                                   sleep=main.verifySleep,
-                                                   attempts = main.verifyAttempts )
-
-        cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
-                                                   main.FALSE,
-                                                   [ main.ONOSip[0],
-                                                     'org.onosproject.provider.nil.NullProviders', 'enabled true'],
-                                                   sleep=main.verifySleep,
-                                                   attempts = main.verifyAttempts )
-
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=cfgStatus,
-                                 onpass="Successfully configured null-provider",
-                                 onfail="Failed to configure null-provider" )
-
-        # give onos some time to settle
-        time.sleep(main.startUpSleep)
-
-        main.log.info("Setting default flows to zero")
-        main.defaultFlows = 0
-
-        main.step("Check status of null-provider setup")
-        caseResult = appStatus and cfgStatus
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=caseResult,
-                                 onpass="Setting up null-provider was successfull",
-                                 onfail="Failed to setup null-provider" )
-
-        # This tells the following cases if we are using the null-provider or ovs
-        main.switchType = "null:"
-
-        # If the null-provider setup was unsuccessfull, then there is no point to
-        # run the subsequent cases
-        if not caseResult:
-            main.setupSkipped = True
-
-    def CASE11( self, main ):
-        '''
-            Setting up mininet
-        '''
-        import json
-        import time
-
-        time.sleep(main.startUpSleep)
-
-        main.step("Activating openflow")
-        appStatus = main.CLIs[0].activateApp('org.onosproject.openflow')
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=appStatus,
-                                 onpass="Successfully activated openflow",
-                                 onfail="Failed activate openflow" )
-
-        time.sleep(main.startUpSleep)
-
-        main.step('Starting mininet topology')
-        mnStatus = main.Mininet1.startNet(topoFile='~/mininet/custom/rerouteTopo.py')
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=mnStatus,
-                                 onpass="Successfully started Mininet",
-                                 onfail="Failed to activate Mininet" )
-
-        main.step("Assinging masters to switches")
-        switches = main.Mininet1.getSwitches()
-        swStatus = main.Mininet1.assignSwController( sw=switches.keys(), ip=main.ONOSip )
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=swStatus,
-                                 onpass="Successfully assigned switches to masters",
-                                 onfail="Failed assign switches to masters" )
-
-        time.sleep(main.startUpSleep)
-
-        main.log.info("Getting default flows")
-        jsonSum = json.loads(main.CLIs[0].summary())
-        main.defaultFlows = jsonSum["flows"]
-
-        main.step("Check status of Mininet setup")
-        caseResult = appStatus and mnStatus and swStatus
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=caseResult,
-                                 onpass="Successfully setup Mininet",
-                                 onfail="Failed setup Mininet" )
-
-        # This tells the following cases if we are using the null-provider or ovs
-        main.switchType = "of:"
-
-        if not caseResult:
-            main.setupSkipped = True
-
-    def CASE20( self, main ):
-        '''
-            Pushing intents
-        '''
-
-        if main.reroute:
-            if main.switchType == "of:":
-                main.minIntents = int(main.params['OVS']['REROUTE']['min_intents'])
-                main.maxIntents = int(main.params['OVS']['REROUTE']['max_intents'])
-                main.checkInterval = int(main.params['OVS']['REROUTE']['check_interval'])
-                main.batchSize = int(main.params['OVS']['REROUTE']['batch_size'])
-            else:
-                main.minIntents = int(main.params['NULL']['REROUTE']['min_intents'])
-                main.maxIntents = int(main.params['NULL']['REROUTE']['max_intents'])
-                main.checkInterval = int(main.params['NULL']['REROUTE']['check_interval'])
-                main.batchSize = int(main.params['NULL']['REROUTE']['batch_size'])
-        else:
-            if main.switchType == "of:":
-                main.minIntents = int(main.params['OVS']['PUSH']['min_intents'])
-                main.maxIntents = int(main.params['OVS']['PUSH']['max_intents'])
-                main.checkInterval = int(main.params['OVS']['PUSH']['check_interval'])
-                main.batchSize = int(main.params['OVS']['PUSH']['batch_size'])
-            else:
-                main.minIntents = int(main.params['NULL']['PUSH']['min_intents'])
-                main.maxIntents = int(main.params['NULL']['PUSH']['max_intents'])
-                main.checkInterval = int(main.params['NULL']['PUSH']['check_interval'])
-                main.batchSize = int(main.params['NULL']['PUSH']['batch_size'])
-
-        # check if the case needs to be skipped
-        if main.setupSkipped:
-            main.setupSkipped = False
-            main.skipCase()
-
-        # the index where the next intents will be installed
-        offset = 0
-        # keeps track of how many intents have been installed
-        currIntents = 0
-        # keeps track of how many flows have been installed
-        currFlows = main.defaultFlows
-        # limit for the number of intents that can be installed
-        limit = main.maxIntents / main.batchSize
-
-        main.step( "Pushing intents" )
-        for i in range(limit):
-            pushResult = main.ONOScli1.pushTestIntents( main.switchType +  main.ingress,
-                                                        main.switchType +  main.egress,
-                                                        main.batchSize,
-                                                        offset = offset,
-                                                        options = "-i",
-                                                        timeout = main.timeout )
-            if pushResult == None:
-                main.log.info( "Timeout!" )
-                main.skipCase()
-            time.sleep(1)
-
-            # Update offset
-            offset += main.batchSize
-
-            if offset >= main.minIntents and offset % main.checkInterval == 0:
-                intentVerify = utilities.retry( main.ONOScli1.checkIntentSummary,
-                                                main.FALSE,
-                                                [main.timeout],
-                                                sleep=main.verifySleep,
-                                                attempts=main.verifyAttempts )
-
-                flowVerify = utilities.retry( main.ONOScli1.checkFlowsState,
-                                              main.FALSE,
-                                              [False,main.timeout],
-                                              sleep=main.verifySleep,
-                                              attempts=main.verifyAttempts )
-
-                if not intentVerify:
-                    main.log.error( "Failed to install intents" )
-                    break
-
-                if main.reroute:
-                    main.step( "Reroute" )
-                    # tear down a link
-                    main.log.info("Tearing down link")
-                    if main.switchType == "of:":
-                        downlink = main.Mininet1.link( END1 = "s1", END2 = "s3", OPTION = "down" )
-                    else:
-                        downlink = main.ONOScli1.link( main.ingress, main.egress, "down")
-
-                    if downlink:
-                        main.log.info( "Successfully tear down link" )
-                    else:
-                        main.log.warn( "Failed to tear down link" )
-
-                    time.sleep(main.rerouteSleep)
-
-                    # Verifying intents
-                    main.step( "Checking intents and flows" )
-                    intentVerify = utilities.retry( main.ONOScli1.checkIntentSummary,
-                                                    main.FALSE,
-                                                    [main.timeout],
-                                                    sleep=main.verifySleep,
-                                                    attempts=main.verifyAttempts )
-                    # Verfying flows
-                    flowVerify = utilities.retry( main.ONOScli1.checkFlowsState,
-                                                  main.FALSE,
-                                                  [False, main.timeout],
-                                                  sleep = main.verifySleep,
-                                                  attempts = main.verifyAttempts )
-
-                    if not intentVerify:
-                        main.log.error( "Failed to install intents" )
-                    # Bring link back up
-                    main.log.info("Bringing link back up")
-                    if main.switchType == "of:":
-                        uplink = main.Mininet1.link( END1 = "s1", END2 = "s3", OPTION = "up" )
-                    else:
-                        uplink = main.ONOScli1.link( main.ingress, main.egress, "up" )
-
-                    if uplink:
-                        main.log.info( "Successfully bring link back up" )
-                    else:
-                        main.log.warn( "Failed to bring link back up" )
-
-                    time.sleep(main.rerouteSleep)
-
-                    # Verifying intents
-                    main.step( "Checking intents and flows" )
-                    intentVerify = utilities.retry( main.ONOScli1.checkIntentSummary,
-                                                    main.FALSE,
-                                                    [main.timeout],
-                                                    sleep=main.verifySleep,
-                                                    attempts=main.verifyAttempts )
-                    # Verfying flows
-                    flowVerify = utilities.retry( main.ONOScli1.checkFlowsState,
-                                                  main.FALSE,
-                                                  [False, main.timeout],
-                                                  sleep = main.verifySleep,
-                                                  attempts = main.verifyAttempts )
-
-                    if not intentVerify:
-                        main.log.error( "Failed to install intents" )
-
-                    rerouteResult = downlink and uplink
-                    utilities.assert_equals( expect = main.TRUE,
-                                             actual = rerouteResult,
-                                             onpass = "Successfully reroute",
-                                             onfail = "Failed to reroute" )
-
-        utilities.assert_equals( expect = main.TRUE,
-                                 actual = intentVerify,
-                                 onpass = "Successfully pushed and verified intents",
-                                 onfail = "Failed to push and verify intents" )
-        currIntents = main.ONOScli1.getTotalIntentsNum()
-        currFlows = 0
-        # Get current flows from REST API
-        temp = json.loads( main.ONOSrest1.flows() )
-        for t in temp:
-            if t.get("state") == "ADDED":
-                currFlows = currFlows + 1
-        main.log.info( "Total Intents Installed: {}".format( currIntents ) )
-        main.log.info( "Total Flows ADDED: {}".format( currFlows ) )
-
-        main.log.info("Writing results to DB file")
-        with open(main.dbFileName, "a") as dbFile:
-            temp = "," + str(currIntents)
-            temp += "," + str(currFlows)
-            temp += ",0"
-            temp += ",0\n"
-            dbFile.write(temp)
-
-        if main.switchType == "of:":
-            main.step( "Stopping mininet" )
-            stepResult = main.Mininet1.stopNet()
-            utilities.assert_equals( expect = main.TRUE,
-                                     actual = stepResult,
-                                     oppass = "Successfully stop Mininet",
-                                     opfail = "Failed stop Mininet" )
-
-
-    def CASE100( self, main ):
-        '''
-            Report errors/warnings/exceptions
-        '''
-        main.log.info("Error report: \n")
-        main.ONOSbench.logReport( main.ONOSip[ 0 ],
-                                  [ "INFO",
-                                    "FOLLOWER",
-                                    "WARN",
-                                    "flow",
-                                    "ERROR",
-                                    "Except" ],
-                                  "s" )
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo b/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo
deleted file mode 100755
index cdd16f1..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo
+++ /dev/null
@@ -1,46 +0,0 @@
-<TOPOLOGY>
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOScli1>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOScli1>
-
-        <ONOSrest1>
-            <host>OC1</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest1>
-
-        <Mininet1>
-            <host>OCN</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>MininetCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </Mininet1>
-
-    </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/__init__.py b/TestON/tests/SCPF/SCPFmaxIntents/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/__init__.py
+++ /dev/null
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/maxIntentFunctions.py b/TestON/tests/SCPF/SCPFmaxIntents/dependencies/maxIntentFunctions.py
deleted file mode 100644
index 268279c..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/maxIntentFunctions.py
+++ /dev/null
@@ -1,114 +0,0 @@
-'''
-    Wrapper functions for maxIntent
-'''
-
-import json
-import time
-import pexpect
-
-def __init__( self ):
-    self.default = ""
-
-def getIntents( main, state="INSTALLED", sleep=1, timeout=120 ):
-    intents = 0
-    try:
-        cmd = "intents | grep " + state + " | wc -l"
-        main.log.info("Sending: " + cmd)
-        main.CLIs[0].handle.sendline(cmd)
-
-        time.sleep(sleep)
-
-        main.CLIs[0].handle.expect("onos>", timeout=timeout)
-        raw = main.CLIs[0].handle.before
-        intents = int(main.CLIs[0].handle.before.split()[7])
-        main.log.info(state + " intents: " + str(intents))
-    except pexpect.TIMEOUT:
-        main.log.exception("Timeout exception caught in getIntent")
-    return intents
-
-def getFlows( main, state="ADDED", sleep=1, timeout=120 ):
-    flows = 0
-    try:
-        cmd = "flows | grep " + state + " | wc -l"
-        main.log.info("Sending: " + cmd)
-        main.CLIs[0].handle.sendline(cmd)
-
-        time.sleep(sleep)
-
-        main.CLIs[0].handle.expect("onos>", timeout=timeout)
-        raw = main.CLIs[0].handle.before
-        flows = int(main.CLIs[0].handle.before.split()[7])
-        main.log.info(state + " flows: " + str(flows))
-    except pexpect.TIMEOUT:
-        main.log.exception("Timeout exception caught in getFlows")
-    return flows
-
-
-def pushIntents( main,
-                 switch,
-                 ingress,
-                 egress,
-                 batch,
-                 offset,
-                 sleep=1,
-                 options="",
-                 timeout=120):
-    '''
-        Pushes intents using the push-test-intents cli command.
-    '''
-    try:
-        cmd = "push-test-intents " + options + " " + switch + ingress + " " +\
-                switch + egress + " " + str(batch) + " " + str(offset)
-        main.log.info("Installing " + str(offset+batch) + " intents")
-        main.log.debug("Sending: " + cmd)
-        main.CLIs[0].handle.sendline(cmd)
-        time.sleep(sleep)
-        main.CLIs[0].handle.expect("onos>", timeout=timeout)
-
-        raw = main.CLIs[0].handle.before
-        if "Failure:" not in raw and "GC" not in raw:
-            return main.TRUE
-    except pexpect.TIMEOUT:
-        main.log.exception("Timeout exception caught in pushIntents")
-    return main.FALSE
-
-def verifyFlows( main, expectedFlows, state="ADDED", sleep=1, numcheck=10, timeout=120):
-    '''
-        This function returns main.TRUE if the number of expected flows are in
-        the specified state
-
-        @params
-            expectedFlows: the flows you expect to see in the specified state
-            state: the state of the flow to check for
-            sleep: how long it should sleep for each check
-            numcheck: how many times it should check
-            timeout: the timeout for pexpect
-    '''
-    cmd = "flows | grep " + state + " | wc -l"
-    for i in range(numcheck):
-        flows = getFlows( main, state, sleep, timeout )
-        if expectedFlows == flows:
-            return main.TRUE
-
-    return main.FALSE
-
-def verifyIntents( main, expectedIntents, state="INSTALLED", sleep=1, numcheck=10, timeout=120):
-    '''
-        This function returns main.TRUE if the number of expected intents are in
-        the specified state
-
-        @params
-            expectedFlows: the intents you expect to see in the specified state
-            state: the state of the intent to check for
-            sleep: how long it should sleep for each check
-            numcheck: how many times it should check
-            timeout: the timeout for pexpect
-    '''
-    cmd = "intents | grep " + state + " | wc -l"
-    for i in range(numcheck):
-        intents = getIntents( main, state, sleep, timeout )
-        if expectedIntents == intents:
-            return main.TRUE
-        time.sleep(sleep)
-
-    return main.FALSE
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/rerouteTopo.py b/TestON/tests/SCPF/SCPFmaxIntents/dependencies/rerouteTopo.py
deleted file mode 100755
index a2fe9fe..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/rerouteTopo.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/python
-
-"""
-Custom topology for Mininet
-"""
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Host, RemoteController
-from mininet.node import Node
-from mininet.link import TCLink
-from mininet.cli import CLI
-from mininet.log import setLogLevel
-from mininet.util import dumpNodeConnections
-from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
-
-class MyTopo( Topo ):
-
-    def __init__( self ):
-        # Initialize topology
-        Topo.__init__( self )
-
-        host1 = self.addHost('h1', ip='10.1.0.1/24')
-        host2 = self.addHost('h2', ip='10.1.0.2/24')
-        host3 = self.addHost('h3', ip='10.1.0.3/24')
-
-        s1 = self.addSwitch( 's1' )
-        s2 = self.addSwitch( 's2' )
-        s3 = self.addSwitch( 's3' )
-
-        self.addLink(s1, host1)
-        self.addLink(s2, host2)
-        self.addLink(s3, host3)
-
-        self.addLink(s1,s2)
-        self.addLink(s1,s3)
-        self.addLink(s2,s3)
-
-        topos = { 'mytopo': ( lambda: MyTopo() ) }
-
-# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
-
-def setupNetwork():
-    "Create network"
-    topo = MyTopo()
-    network = Mininet(topo=topo, autoSetMacs=True, controller=None)
-    network.start()
-    CLI( network )
-    network.stop()
-
-if __name__ == '__main__':
-    setLogLevel('info')
-    #setLogLevel('debug')
-    setupNetwork()
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/startUp.py b/TestON/tests/SCPF/SCPFmaxIntents/dependencies/startUp.py
deleted file mode 100644
index bf2a2b6..0000000
--- a/TestON/tests/SCPF/SCPFmaxIntents/dependencies/startUp.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-    This wrapper function is use for starting up onos instance
-"""
-
-import time
-import os
-import json
-
-def onosBuild( main, gitBranch ):
-    """
-        This includes pulling ONOS and building it using maven install
-    """
-
-    buildResult = main.FALSE
-
-    # Git checkout a branch of ONOS
-    checkOutResult = main.ONOSbench.gitCheckout( gitBranch )
-    # Does the git pull on the branch that was checked out
-    if not checkOutResult:
-        main.log.warn( "Failed to checked out " + gitBranch +
-                                           " branch")
-    else:
-        main.log.info( "Successfully checked out " + gitBranch +
-                                           " branch")
-    gitPullResult = main.ONOSbench.gitPull()
-    if gitPullResult == main.ERROR:
-        main.log.error( "Error pulling git branch" )
-    else:
-        main.log.info( "Successfully pulled " + gitBranch + " branch" )
-
-    # Maven clean install
-    buildResult = main.ONOSbench.cleanInstall()
-
-    return buildResult
-
-
-
-
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
index 0d8687e..0a81dc6 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
@@ -9,6 +9,11 @@
         <cellApps>drivers,metrics,openflow</cellApps>
     </ENV>
 
+    <DEPENDENCY>
+        <path>/tests/SCPF/SCPFportLat/dependencies/</path>
+        <topology>topo-perf-2sw.py</topology>
+    </DEPENDENCY>
+
     <GIT>
         <autopull>off</autopull>
         <checkout>master</checkout>
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.py b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.py
index 35147ca..e6f62ef 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.py
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.py
@@ -21,6 +21,7 @@
             init = False
 
         #Load values from params file
+        main.testOnDirectory = os.path.dirname(os.getcwd())
         checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
         gitPull = main.params[ 'GIT' ][ 'autopull' ]
         cellName = main.params[ 'ENV' ][ 'cellName' ]
@@ -34,6 +35,9 @@
         topoCfgName = main.params['TEST']['topoConfigName']
         resultPath = main.params['DB']['portEventResultPath']
         skipMvn = main.params ['TEST']['mci']
+        main.topology = main.params['DEPENDENCY']['topology']
+        main.dependencyPath = main.testOnDirectory + \
+                              main.params['DEPENDENCY']['path']
         testONpath = re.sub( "(tests)$", "bin", main.testDir )  # TestON/bin
 
         # -- INIT SECTION, ONLY RUNS ONCE -- #
@@ -135,6 +139,10 @@
         verifyCellResult = main.ONOSbench.verifyCell()
 
         main.step('Starting mininet topology ')
+        copyResult = main.ONOSbench.copyMininetFile(main.topology,
+                                                    main.dependencyPath,
+                                                    main.Mininet1.user_name,
+                                                    main.Mininet1.ip_address)
         main.Mininet1.startNet()
 
         main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
diff --git a/TestON/tests/SCPF/SCPFportLat/dependencies/topo-perf-2sw.py b/TestON/tests/SCPF/SCPFportLat/dependencies/topo-perf-2sw.py
new file mode 100644
index 0000000..ad88767
--- /dev/null
+++ b/TestON/tests/SCPF/SCPFportLat/dependencies/topo-perf-2sw.py
@@ -0,0 +1,19 @@
+'''
+imple 2 switch topology for topologoy performance test
+'''
+
+from mininet.topo import Topo
+
+class MyTopo( Topo ):
+    def __init__(self):
+        Topo.__init__(self)
+        s1 = self.addSwitch( "s1", dpid="0000000000000001")
+        s2 = self.addSwitch( "s2", dpid="0000000000000002")
+
+        h1 = self.addHost( "h1" )
+        h2 = self.addHost( "h2" )
+        self.addLink( s1, s2 )
+        self.addLink( s1, h1 )
+        self.addLink( s2, h2 )
+
+topos = { 'mytopo': ( lambda: MyTopo() ) }
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.params b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.params
index cb75b01..8510204 100644
--- a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.params
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.params
@@ -22,7 +22,9 @@
         <cellName>productionCell</cellName>
         <cellApps>drivers,openflow</cellApps>
     </ENV>
-
+    <TEST>
+        <flowObj>False</flowObj>
+    </TEST>
     <GIT>
         <pull>False</pull>
         <branch>master</branch>
@@ -47,7 +49,8 @@
     </ATTEMPTS>
 
     <DATABASE>
-        <file>/tmp/ScalingMaxIntentDB</file>
+        <dbName>/tmp/ScalingMaxIntentDB</dbName>
+        <dbFlowObj>/tmp/ScalingMaxIntentDBWFO</dbFlowObj>
         <nic>1gig</nic>
         <node>baremetal</node>
     </DATABASE>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
index 5420010..c688207 100644
--- a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
@@ -43,9 +43,15 @@
         main.verifyAttempts = int( main.params['ATTEMPTS']['verify'] )
         main.ingress = main.params['LINK']['ingress']
         main.egress = main.params['LINK']['egress']
-        main.dbFileName = main.params['DATABASE']['file']
         main.cellData = {} # for creating cell file
         main.reroute = main.params['reroute']
+        main.flowObj = main.params['TEST']['flowObj']
+        if main.flowObj == "True":
+            main.flowObj = True
+            main.dbFileName = main.params['DATABASE']['dbFlowObj']
+        else:
+            main.flowObj = False
+            main.dbFileName = main.params['DATABASE']['dbName']
         main.threadID = 0
 
         if main.reroute == "True":
@@ -312,6 +318,9 @@
             main.CLIs[0].deviceRemove( d )
 
         time.sleep(main.startUpSleep)
+        if main.flowObj:
+            main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
+                                "useFlowObjectives", value="true")
         main.step('Starting mininet topology')
         mnStatus = main.Mininet1.startNet(topoFile='~/mininet/custom/rerouteTopo.py')
         utilities.assert_equals( expect=main.TRUE,
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/README b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/README
deleted file mode 100644
index 0c16859..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/README
+++ /dev/null
@@ -1,11 +0,0 @@
-Summary:
-        This is a performance test suit, designed to test the upper limits
-        of onos and ovsdb with respect to installing intents.
-        In this test, CASE10 set up null provoder, CASE 11 set up ovs. Start from
-        1 node, and scale to 7 nodes.
-        We push intents to every node by using Thread, and when the intents number
-        reach to the minimun number, we will verify intents and flows. If intents are
-        not installed correctly, test will stop pushing and finish this case.
-NOTE:
-        This test is largely based on the hardware used to run onos and mininet.
-        Therefore, results will very test station to test station.
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.params b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.params
deleted file mode 100644
index 8083e7a..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.params
+++ /dev/null
@@ -1,99 +0,0 @@
-<PARAMS>
-
-    # 0-init
-    # 1-setup
-    # 2-Install
-    # 10-null provider setup
-    # 20-pushing intents, and rerouting intents if reroute is true
-    # 0,1,2,10,20,1,2,10,20,1,2,10,20
-   <testcases>0,1,2,11,20,1,2,11,20,1,2,11,20,1,2,11,20</testcases>
-
-    <reroute>False</reroute>
-
-    <SCALE>1,3,5,7</SCALE>
-
-    <DEPENDENCY>
-        <path>/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/</path>
-        <wrapper1>startUp</wrapper1>
-        <topology>rerouteTopo.py</topology>
-    </DEPENDENCY>
-
-    <ENV>
-        <cellName>productionCell</cellName>
-        <cellApps>drivers,openflow</cellApps>
-    </ENV>
-
-    <GIT>
-        <pull>False</pull>
-        <branch>master</branch>
-    </GIT>
-
-    <CTRL>
-        <port>6653</port>
-    </CTRL>
-
-    <SLEEP>
-        <startup>10</startup>
-        <install>10</install>
-        <verify>15</verify>
-        <reroute>3</reroute>
-        # timeout for pexpect
-        <timeout>300</timeout>
-    </SLEEP>
-
-    <ATTEMPTS>
-        <verify>3</verify>
-        <push>3</push>
-    </ATTEMPTS>
-
-    <DATABASE>
-        <file>/tmp/ScalingMaxIntentDBWFO</file>
-        <nic>1gig</nic>
-        <node>baremetal</node>
-    </DATABASE>
-
-    <LINK>
-        <ingress>0000000000000001/5</ingress>
-        <egress>0000000000000007/5</egress>
-    </LINK>
-
-    # CASE10
-    <NULL>
-        # CASE20
-        <PUSH>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>70000</max_intents>
-            <check_interval>10000</check_interval>
-        </PUSH>
-
-        # if reroute is true
-        <REROUTE>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>1000000</max_intents>
-            <check_interval>100000</check_interval>
-        </REROUTE>
-    </NULL>
-
-    # CASE11
-    <OVS>
-        # CASE20
-        <PUSH>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>500000</max_intents>
-            <check_interval>10000</check_interval>
-        </PUSH>
-
-        # if reroute is true
-        <REROUTE>
-            <batch_size>1000</batch_size>
-            <min_intents>10000</min_intents>
-            <max_intents>500000</max_intents>
-            <check_interval>10000</check_interval>
-        </REROUTE>
-    </OVS>
-
-
-</PARAMS>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py
deleted file mode 100644
index 6177b1a..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py
+++ /dev/null
@@ -1,516 +0,0 @@
-import sys
-import json
-import time
-import os
-'''
-SCPFscalingMaxIntents
-Push test Intents to onos
-CASE10: set up Null Provider
-CASE11: set up Open Flows
-Scale up when reach the Limited
-Start from 1 nodes, 8 devices. Then Scale up to 3,5,7 nodes
-Recommand batch size: 100, check interval: 100
-'''
-class SCPFscalingMaxIntentsWithFlowObj:
-    def __init__( self ):
-        self.default = ''
-
-    def CASE0( self, main):
-        import sys
-        import json
-        import time
-        import os
-        import imp
-
-        main.case( "Constructing test variables and building ONOS package" )
-        main.step( "Constructing test variables" )
-        stepResult = main.FALSE
-
-        # Test variables
-        main.testOnDirectory = os.path.dirname( os.getcwd ( ) )
-        main.dependencyPath = main.testOnDirectory + \
-                main.params['DEPENDENCY']['path']
-        main.cellName = main.params[ 'ENV' ][ 'cellName' ]
-        main.apps = main.params[ 'ENV' ][ 'cellApps' ]
-        main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
-        main.scale = ( main.params[ 'SCALE' ] ).split( "," )
-        main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
-        main.timeout = int(main.params['SLEEP']['timeout'])
-        main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
-        main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
-        main.verifySleep = int( main.params[ 'SLEEP' ][ 'verify' ] )
-        main.rerouteSleep = int ( main.params['SLEEP']['reroute'] )
-        main.verifyAttempts = int( main.params['ATTEMPTS']['verify'] )
-        main.ingress = main.params['LINK']['ingress']
-        main.egress = main.params['LINK']['egress']
-        main.dbFileName = main.params['DATABASE']['file']
-        main.cellData = {} # for creating cell file
-        main.reroute = main.params['reroute']
-        main.threadID = 0
-
-        if main.reroute == "True":
-            main.reroute = True
-        else:
-            main.reroute = False
-
-        main.CLIs = []
-        main.setupSkipped = False
-
-        wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
-        gitBranch = main.params[ 'GIT' ][ 'branch' ]
-        gitPull = main.params[ 'GIT' ][ 'pull' ]
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-        nic = main.params['DATABASE']['nic']
-        node = main.params['DATABASE']['node']
-        stepResult = main.TRUE
-
-        main.log.info("Cresting DB file")
-        with open(main.dbFileName, "w+") as dbFile:
-            dbFile.write("")
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="environment set up successfull",
-                                 onfail="environment set up Failed" )
-
-    def CASE1( self ):
-        # main.scale[ 0 ] determines the current number of ONOS controller
-        main.CLIs = []
-        main.numCtrls = int( main.scale[ 0 ] )
-        main.ONOSip = []
-        main.maxNumBatch = 0
-        main.AllONOSip = main.ONOSbench.getOnosIps()
-        for i in range(main.numCtrls):
-            main.ONOSip.append(main.AllONOSip[i])
-        main.log.info(main.ONOSip)
-
-        main.log.info( "Creating list of ONOS cli handles" )
-        for i in range(main.numCtrls):
-            main.CLIs.append( getattr( main, 'ONOScli%s' % (i+1) ) )
-
-        main.log.info(main.CLIs)
-        if not main.CLIs:
-            main.log.error( "Failed to create the list of ONOS cli handles" )
-            main.cleanup()
-            main.exit()
-
-        main.log.info( "Loading wrapper files" )
-        main.startUp = imp.load_source( wrapperFile1,
-                                        main.dependencyPath +
-                                        wrapperFile1 +
-                                        ".py" )
-
-        copyResult = main.ONOSbench.copyMininetFile( main.topology,
-                                                     main.dependencyPath,
-                                                     main.Mininet1.user_name,
-                                                     main.Mininet1.ip_address )
-
-        commit = main.ONOSbench.getVersion(report=True)
-        commit = commit.split(" ")[1]
-
-        if gitPull == 'True':
-            if not main.startUp.onosBuild( main, gitBranch ):
-                main.log.error( "Failed to build ONOS" )
-                main.cleanup()
-                main.exit()
-        else:
-            main.log.warn( "Did not pull new code so skipping mvn " +
-                           "clean install" )
-        with open(main.dbFileName, "a") as dbFile:
-            temp = "'" + commit + "',"
-            temp += "'" + nic + "',"
-            dbFile.write(temp)
-
-    def CASE2( self, main ):
-        """
-        - Uninstall ONOS cluster
-        - Verify ONOS start up
-        - Install ONOS cluster
-        - Connect to cli
-        """
-        main.log.info( "Starting up %s node(s) ONOS cluster" % main.numCtrls)
-        main.log.info( "Safety check, killing all ONOS processes" +
-                       " before initiating environment setup" )
-
-        for i in range( main.numCtrls ):
-            main.ONOSbench.onosDie( main.ONOSip[ i ] )
-
-        main.log.info( "NODE COUNT = %s" % main.numCtrls)
-
-        tempOnosIp = []
-        for i in range( main.numCtrls ):
-            tempOnosIp.append( main.ONOSip[i] )
-
-        main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
-                                       "temp",
-                                       main.Mininet1.ip_address,
-                                       main.apps,
-                                       tempOnosIp )
-
-        main.step( "Apply cell to environment" )
-        cellResult = main.ONOSbench.setCell( "temp" )
-        verifyResult = main.ONOSbench.verifyCell()
-        stepResult = cellResult and verifyResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully applied cell to " + \
-                                        "environment",
-                                 onfail="Failed to apply cell to environment " )
-
-        main.step( "Creating ONOS package" )
-        packageResult = main.ONOSbench.onosPackage()
-        stepResult = packageResult
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Successfully created ONOS package",
-                                 onfail="Failed to create ONOS package" )
-
-        main.step( "Uninstall ONOS package on all Nodes" )
-        uninstallResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            main.log.info( "Uninstalling package on ONOS Node IP: " + main.ONOSip[i] )
-            u_result = main.ONOSbench.onosUninstall( main.ONOSip[i] )
-            utilities.assert_equals( expect=main.TRUE, actual=u_result,
-                                     onpass="Test step PASS",
-                                     onfail="Test step FAIL" )
-            uninstallResult = ( uninstallResult and u_result )
-
-        main.step( "Install ONOS package on all Nodes" )
-        installResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            main.log.info( "Installing package on ONOS Node IP: " + main.ONOSip[i] )
-            i_result = main.ONOSbench.onosInstall( node=main.ONOSip[i] )
-            utilities.assert_equals( expect=main.TRUE, actual=i_result,
-                                     onpass="Test step PASS",
-                                     onfail="Test step FAIL" )
-            installResult = installResult and i_result
-
-        main.step( "Verify ONOS nodes UP status" )
-        statusResult = main.TRUE
-        for i in range( int( main.numCtrls ) ):
-            main.log.info( "ONOS Node " + main.ONOSip[i] + " status:" )
-            onos_status = main.ONOSbench.onosStatus( node=main.ONOSip[i] )
-            utilities.assert_equals( expect=main.TRUE, actual=onos_status,
-                                     onpass="Test step PASS",
-                                     onfail="Test step FAIL" )
-            statusResult = ( statusResult and onos_status )
-
-        main.step( "Start ONOS CLI on all nodes" )
-        cliResult = main.TRUE
-        main.step(" Start ONOS cli using thread ")
-        startCliResult  = main.TRUE
-        pool = []
-
-        for i in range( int( main.numCtrls) ):
-            t = main.Thread( target=main.CLIs[i].startOnosCli,
-                             threadID=main.threadID,
-                             name="startOnosCli",
-                             args=[ main.ONOSip[i] ],
-                             kwargs = {"onosStartTimeout":main.timeout} )
-            pool.append(t)
-            t.start()
-            main.threadID = main.threadID + 1
-        for t in pool:
-            t.join()
-            startCliResult = startCliResult and t.result
-        time.sleep( main.startUpSleep )
-
-    def CASE10( self, main ):
-        """
-            Setting up null-provider
-        """
-        import json
-        # Activate apps
-        main.step("Activating null-provider")
-        appStatus = utilities.retry( main.CLIs[0].activateApp,
-                                     main.FALSE,
-                                     ['org.onosproject.null'],
-                                     sleep=main.verifySleep,
-                                     attempts=main.verifyAttempts )
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=appStatus,
-                                 onpass="Successfully activated null-provider",
-                                 onfail="Failed activate null-provider" )
-
-        # Setup the null-provider
-        main.step("Configuring null-provider")
-        cfgStatus = utilities.retry( main.ONOSbench.onosCfgSet,
-                                    main.FALSE,
-                                    [ main.ONOSip[0],
-                                      'org.onosproject.provider.nil.NullProviders', 'deviceCount 8'],
-                                    sleep=main.verifySleep,
-                                    attempts = main.verifyAttempts )
-        cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
-                                                   main.FALSE,
-                                                   [ main.ONOSip[0],
-                                                     'org.onosproject.provider.nil.NullProviders', 'topoShape reroute'],
-                                                   sleep=main.verifySleep,
-                                                   attempts = main.verifyAttempts )
-
-        cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
-                                                   main.FALSE,
-                                                   [ main.ONOSip[0],
-                                                     'org.onosproject.provider.nil.NullProviders', 'enabled true'],
-                                                   sleep=main.verifySleep,
-                                                   attempts = main.verifyAttempts )
-
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=cfgStatus,
-                                 onpass="Successfully configured null-provider",
-                                 onfail="Failed to configure null-provider" )
-
-        # give onos some time to settle
-        time.sleep(main.startUpSleep)
-
-        main.log.info("Setting default flows to zero")
-        main.defaultFlows = 0
-
-        main.step("Check status of null-provider setup")
-        caseResult = appStatus and cfgStatus
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=caseResult,
-                                 onpass="Setting up null-provider was successfull",
-                                 onfail="Failed to setup null-provider" )
-
-        # This tells the following cases if we are using the null-provider or ovs
-        main.switchType = "null:"
-
-        # If the null-provider setup was unsuccessfull, then there is no point to
-        # run the subsequent cases
-
-        time.sleep(main.startUpSleep)
-        main.step( "Balancing Masters" )
-
-        stepResult = main.FALSE
-        stepResult = utilities.retry( main.CLIs[0].balanceMasters,
-                                      main.FALSE,
-                                      [],
-                                      sleep=3,
-                                      attempts=3 )
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Balance masters was successfull",
-                                 onfail="Failed to balance masters")
-
-        time.sleep( 5 )
-        if not caseResult:
-            main.setupSkipped = True
-
-    def CASE11( self, main):
-        '''
-            Setting up mininet
-        '''
-        import json
-        import time 
-        devices = []
-        devices = main.CLIs[0].getAllDevicesId()
-        for d in devices:
-            main.CLIs[0].deviceRemove( d )
-
-        main.log.info("Set Intent Compiler use Flow Object")
-        main.CLIs[0].setCfg("org.onosproject.net.intent.impl.compiler.IntentConfigurableRegistrator",
-        "useFlowObjectives", "true")
-        time.sleep(main.startUpSleep)
-        main.step('Starting mininet topology')
-        mnStatus = main.Mininet1.startNet(topoFile='~/mininet/custom/rerouteTopo.py')
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=mnStatus,
-                                 onpass="Successfully started Mininet",
-                                 onfail="Failed to activate Mininet" )
-
-        main.step("Assinging masters to switches")
-        switches = main.Mininet1.getSwitches()
-        swStatus = main.Mininet1.assignSwController( sw=switches.keys(), ip=main.ONOSip )
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=swStatus,
-                                 onpass="Successfully assigned switches to masters",
-                                 onfail="Failed assign switches to masters" )
-
-        time.sleep(main.startUpSleep)
-        # Balancing Masters
-        main.step( "Balancing Masters" )
-        stepResult = main.FALSE
-        stepResult = utilities.retry( main.CLIs[0].balanceMasters,
-                                      main.FALSE,
-                                      [],
-                                      sleep=3,
-                                      attempts=3 )
-
-        utilities.assert_equals( expect=main.TRUE,
-                                       actual=stepResult,
-                                       onpass="Balance masters was successfull",
-                                       onfail="Failed to balance masters" )
-
-        main.log.info("Getting default flows")
-        jsonSum = json.loads(main.CLIs[0].summary())
-        main.defaultFlows = jsonSum["flows"]
-
-        main.step("Check status of Mininet setup")
-        caseResult = mnStatus and swStatus
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=caseResult,
-                                 onpass="Successfully setup Mininet",
-                                 onfail="Failed setup Mininet" )
-
-        # This tells the following cases if we are using the null-provider or ovs
-        main.switchType = "of:"
-
-        time.sleep(main.startUpSleep)
-        main.step( "Balancing Masters" )
-
-        stepResult = main.FALSE
-        stepResult = utilities.retry( main.CLIs[0].balanceMasters,
-                                      main.FALSE,
-                                      [],
-                                      sleep=3,
-                                      attempts=3 )
-
-        utilities.assert_equals( expect=main.TRUE,
-                                 actual=stepResult,
-                                 onpass="Balance masters was successfull",
-                                 onfail="Failed to balance masters")
-
-        time.sleep(5)
-        if not caseResult:
-            main.setupSkipped = True
-
-
-
-    def CASE20( self, main ):
-        if main.reroute:
-            main.minIntents = int(main.params['NULL']['REROUTE']['min_intents'])
-            main.maxIntents = int(main.params['NULL']['REROUTE']['max_intents'])
-            main.checkInterval = int(main.params['NULL']['REROUTE']['check_interval'])
-            main.batchSize = int(main.params['NULL']['REROUTE']['batch_size'])
-        else:
-            main.minIntents = int(main.params['NULL']['PUSH']['min_intents'])
-            main.maxIntents = int(main.params['NULL']['PUSH']['max_intents'])
-            main.checkInterval = int(main.params['NULL']['PUSH']['check_interval'])
-            main.batchSize = int(main.params['NULL']['PUSH']['batch_size'])
-
-        # check if the case needs to be skipped
-        if main.setupSkipped:
-            main.setupSkipped = False
-            main.skipCase()
-
-        # the index where the next intents will be installed
-        offfset = 0
-        # keeps track of how many intents have been installed
-        currIntents = 0
-        # keeps track of how many flows have been installed, set to 0 at start
-        currFlows = 0
-        # limit for the number of intents that can be installed
-        main.batchSize = int( int(main.batchSize)/int(main.numCtrls))
-        limit = main.maxIntents / main.batchSize
-        # total intents installed
-        totalIntents = 0
-
-        intentsState = None
-
-        offtmp = 0
-        main.step( "Pushing intents" )
-        stepResult = main.TRUE
-        # temp variable to contain the number of flows
-        flowsNum = 0
-        if main.numCtrls > 1:
-            # if more than one onos nodes, we should check more frequently
-            main.checkInterval = main.checkInterval/4
-
-        # make sure the checkInterval divisible batchSize
-        main.checkInterval = int( int( main.checkInterval / main.batchSize ) * main.batchSize )
-        flowTemp=0
-        totalFlows=0
-        verifyTotalIntents=0
-        for i in range(limit):
-
-            # Threads pool
-            pool = []
-
-            for j in range( int( main.numCtrls) ):
-                if main.numCtrls > 1:
-                    time.sleep( 1 )
-                offtmp = offfset + main.maxIntents * j
-                # Push intents by using threads
-                t = main.Thread( target=main.CLIs[j].pushTestIntents,
-                                 threadID=main.threadID,
-                                 name="Push-Test-Intents",
-                                 args=[ main.switchType + main.ingress,
-                                        main.switchType + main.egress,
-                                        main.batchSize ],
-                                 kwargs={ "offset": offtmp,
-                                          "options": "-i",
-                                          "timeout": main.timeout,
-                                          "background":False,
-                                          "noExit":True} )
-                pool.append(t)
-                t.start()
-                main.threadID = main.threadID + 1
-            for t in pool:
-                t.join()
-                stepResult = stepResult and t.result
-            offfset = offfset + main.batchSize
-
-            totalIntents = main.batchSize * main.numCtrls + totalIntents
-            if totalIntents >= main.minIntents and totalIntents % main.checkInterval == 0:
-                # if reach to minimum number and check interval, verify Intetns and flows
-                time.sleep( main.verifySleep * main.numCtrls )
-
-                main.log.info("Verify Intents states")
-                # k is a control variable for verify retry attempts
-                k = 1
-
-                while k <= main.verifyAttempts:
-                    # while loop for check intents by using REST api
-                    time.sleep(5)
-                    temp = 0
-                    intentsState = main.CLIs[0].checkIntentSummary(timeout=600)
-                    if intentsState:
-                        verifyTotalIntents = main.CLIs[0].getTotalIntentsNum(timeout=600)
-                        if temp < verifyTotalIntents:
-                            temp = verifyTotalIntents
-                        else:
-                            verifyTotalIntents = temp
-                        break
-                        main.log.info("Total Intents: {}".format( totalIntents) )
-                    k = k+1
-
-                totalFlows = main.CLIs[0].getTotalFlowsNum( timeout=600, noExit=True )
-                if flowTemp<totalFlows:
-                    flowTemp = totalFlows
-                else:
-                    totalFlows = flowTemp
-
-                if not intentsState:
-                    # If some intents are not installed, grep the previous flows list, and finished this test case
-                    main.log.warn( "Some intens did not install" )
-                    verifyTotalIntents = main.CLIs[0].getTotalIntentsNum(timeout=600)
-                    main.log.info("Total Intents: {}".format( totalIntents) )
-                    break
-
-        del main.scale[0]
-        utilities.assert_equals( expect = main.TRUE,
-                                 actual = intentsState,
-                                 onpass = "Successfully pushed and verified intents",
-                                 onfail = "Failed to push and verify intents" )
-
-        main.log.info( "Total Intents Installed before crash: {}".format( totalIntents ) )
-        main.log.info( "Total Flows ADDED before crash: {}".format( totalFlows ) )
-
-        main.step('clean up Mininet')
-        main.Mininet1.stopNet()
-        main.log.info("Writing results to DS file")
-        with open(main.dbFileName, "a") as dbFile:
-            # Scale number
-            temp = str(main.numCtrls)
-            temp += ",'" + "baremetal1" + "'"
-            # how many intents we installed before crash
-            temp += "," + str(totalIntents)
-            # how many flows we installed before crash
-            temp += "," + str(totalFlows)
-            # other columns in database, but we didn't use in this test
-            temp += "," + "0,0,0,0,0,0"
-            temp += "\n"
-            dbFile.write( temp )
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo
deleted file mode 100755
index 8e58be7..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo
+++ /dev/null
@@ -1,101 +0,0 @@
-<TOPOLOGY>
-
-    <COMPONENT>
-
-        <ONOSbench>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosDriver</type>
-            <connect_order>1</connect_order>
-            <COMPONENTS>
-                <home>~/onos</home>
-                <nodes>7</nodes> 
-            </COMPONENTS>
-        </ONOSbench>
-
-        <ONOSrest1>
-            <host>OC1</host>
-            <port>8181</port>
-            <user>onos</user>
-            <password>rocks</password>
-            <type>OnosRestDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </ONOSrest1>
-        <ONOScli1>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>2</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli1>
-
-        <ONOScli2>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>3</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli2>
-
-        <ONOScli3>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>4</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli3>
-
-        <ONOScli4>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli4>
-
-        <ONOScli5>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>6</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli5>
-
-        <ONOScli6>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>7</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli6>
-
-        <ONOScli7>
-            <host>localhost</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>OnosCliDriver</type>
-            <connect_order>8</connect_order>
-            <COMPONENTS> </COMPONENTS>
-        </ONOScli7>
-
-        <Mininet1>
-            <host>OCN</host>
-            <user>sdn</user>
-            <password>rocks</password>
-            <type>MininetCliDriver</type>
-            <connect_order>5</connect_order>
-            <COMPONENTS>
-            </COMPONENTS>
-        </Mininet1>
-
-    </COMPONENT>
-</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/__init__.py b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/__init__.py
+++ /dev/null
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/rerouteTopo.py b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/rerouteTopo.py
deleted file mode 100755
index 774f12f..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/rerouteTopo.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#!/usr/bin/python
-
-"""
-Custom topology for Mininet
-"""
-from mininet.topo import Topo
-from mininet.net import Mininet
-from mininet.node import Host, RemoteController
-from mininet.node import Node
-from mininet.link import TCLink
-from mininet.cli import CLI
-from mininet.log import setLogLevel
-from mininet.util import dumpNodeConnections
-from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
-
-class MyTopo( Topo ):
-
-    def __init__( self ):
-        # Initialize topology
-        Topo.__init__( self )
-
-        host1 = self.addHost('h1', ip='10.1.0.1/24')
-        host2 = self.addHost('h2', ip='10.1.0.2/24')
-        host3 = self.addHost('h3', ip='10.1.0.3/24')
-        host4 = self.addHost('h4', ip='10.1.0.4/24')
-        host5 = self.addHost('h5', ip='10.1.0.5/24')
-        host6 = self.addHost('h6', ip='10.1.0.6/24')
-        host7 = self.addHost('h7', ip='10.1.0.7/24')
-
-        s1 = self.addSwitch( 's1' )
-        s2 = self.addSwitch( 's2' )
-        s3 = self.addSwitch( 's3' )
-        s4 = self.addSwitch( 's4' )
-        s5 = self.addSwitch( 's5' )
-        s6 = self.addSwitch( 's6' )
-        s7 = self.addSwitch( 's7' )
-        s8 = self.addSwitch( 's8' )
-
-
-        self.addLink(s1, host1)
-        self.addLink(s2, host2)
-        self.addLink(s3, host3)
-        self.addLink(s4, host4)
-        self.addLink(s5, host5)
-        self.addLink(s6, host6)
-        self.addLink(s7, host7)
-
-
-
-        self.addLink(s1,s2)
-        self.addLink(s2,s3)
-        self.addLink(s3,s4)
-        self.addLink(s4,s5)
-        self.addLink(s5,s6)
-        self.addLink(s6,s7)
-        self.addLink(s4,s8)
-        self.addLink(s8,s5)
-
-        topos = { 'mytopo': ( lambda: MyTopo() ) }
-
-# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
-
-def setupNetwork():
-    "Create network"
-    topo = MyTopo()
-    network = Mininet(topo=topo, autoSetMacs=True, controller=None)
-    network.start()
-    CLI( network )
-    network.stop()
-
-if __name__ == '__main__':
-    setLogLevel('info')
-    #setLogLevel('debug')
-    setupNetwork()
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/startUp.py b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/startUp.py
deleted file mode 100644
index bf2a2b6..0000000
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/dependencies/startUp.py
+++ /dev/null
@@ -1,38 +0,0 @@
-"""
-    This wrapper function is use for starting up onos instance
-"""
-
-import time
-import os
-import json
-
-def onosBuild( main, gitBranch ):
-    """
-        This includes pulling ONOS and building it using maven install
-    """
-
-    buildResult = main.FALSE
-
-    # Git checkout a branch of ONOS
-    checkOutResult = main.ONOSbench.gitCheckout( gitBranch )
-    # Does the git pull on the branch that was checked out
-    if not checkOutResult:
-        main.log.warn( "Failed to checked out " + gitBranch +
-                                           " branch")
-    else:
-        main.log.info( "Successfully checked out " + gitBranch +
-                                           " branch")
-    gitPullResult = main.ONOSbench.gitPull()
-    if gitPullResult == main.ERROR:
-        main.log.error( "Error pulling git branch" )
-    else:
-        main.log.info( "Successfully pulled " + gitBranch + " branch" )
-
-    # Maven clean install
-    buildResult = main.ONOSbench.cleanInstall()
-
-    return buildResult
-
-
-
-
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
index e905e5a..55cef23 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
@@ -88,7 +88,7 @@
             commit = main.ONOSbench.getVersion()       ####
             commit = (commit.split(" "))[1]
 
-            temp = testONpath.replace("bin","") + "tests/SCPFswitchLat/dependencies/"
+            temp = testONpath.replace("bin","") + "tests/SCPF/SCPFswitchLat/dependencies/"
             main.ONOSbench.scp( main.Mininet1,
                                 temp + "topo-perf-1sw.py",
                                 main.Mininet1.home,
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py
index b516cc0..19ee08c 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py
@@ -55,6 +55,7 @@
         """
         from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
             Testcaselib as run
+        import time
         if not hasattr( main, 'apps' ):
             run.initTest( main )
         description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
@@ -69,6 +70,7 @@
         # switch failure
         switch = main.params[ 'kill' ][ 'switch' ]
         run.killSwitch( main, switch, switches='7', links='24' )
+        time.sleep( main.switchSleep )
         run.pingAll( main, "CASE2_Failure" )
         run.recoverSwitch( main, switch, switches='8', links='32' )
         run.checkFlows( main, minFlowCount=350 )
@@ -125,6 +127,7 @@
         """
         from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
             Testcaselib as run
+        import time
         if not hasattr( main, 'apps' ):
             run.initTest( main )
         description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
@@ -139,6 +142,7 @@
         # switch failure
         switch = main.params[ 'kill' ][ 'switch' ]
         run.killSwitch( main, switch, switches='7', links='24' )
+        time.sleep( main.switchSleep )
         run.pingAll( main, "CASE4_Failure" )
         run.recoverSwitch( main, switch, switches='8', links='32' )
         run.checkFlows( main, minFlowCount=350 )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json b/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json
index 8232036..867785a 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json
@@ -41,6 +41,24 @@
                 "location": "of:0000000000000001/2"
             }
         }
+    },
+    "apps": {
+        "org.onosproject.segmentrouting": {
+          "xconnect": {
+            "of:0000000000000001": [
+              {
+                "vlan": 5,
+                "ports": [3, 4],
+                "name": "OLT 1"
+              },
+              {
+                "vlan": 10,
+                "ports": [3, 5],
+                "name": "OLT 2"
+              }
+            ]
+          }
+        }
     }
 
 }
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/2x2.json b/TestON/tests/USECASE/SegmentRouting/dependencies/2x2.json
index a5ec00d..d4fa3fb 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/2x2.json
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/2x2.json
@@ -100,5 +100,23 @@
                 "location": "of:0000000000000002/4"
             }
         }
+    },
+    "apps": {
+        "org.onosproject.segmentrouting": {
+          "xconnect": {
+            "of:0000000000000001": [
+              {
+                "vlan": 5,
+                "ports": [5, 6],
+                "name": "OLT 1"
+              },
+              {
+                "vlan": 10,
+                "ports": [5, 7],
+                "name": "OLT 2"
+              }
+            ]
+          }
+        }
     }
 }
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/4x4.json b/TestON/tests/USECASE/SegmentRouting/dependencies/4x4.json
index 7442359..55f3225 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/4x4.json
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/4x4.json
@@ -196,5 +196,23 @@
                 "location": "of:0000000000000004/6"
             }
         }
+    },
+    "apps": {
+        "org.onosproject.segmentrouting": {
+          "xconnect": {
+            "of:0000000000000001": [
+              {
+                "vlan": 5,
+                "ports": [7, 8],
+                "name": "OLT 1"
+              },
+              {
+                "vlan": 10,
+                "ports": [7, 9],
+                "name": "OLT 2"
+              }
+            ]
+          }
+        }
     }
 }
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 8565930..c1efd93 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -84,7 +84,6 @@
             apps = main.apps + "," + main.diff

         else:

             main.log.error( "App list is empty" )

-        main.case( "Package and start ONOS using apps:" + apps )

         print "NODE COUNT = ", main.numCtrls

         print main.ONOSip

         tempOnosIp = [ ]

@@ -234,11 +233,21 @@
     @staticmethod

     def pingAll( main, tag="", dumpflows=True ):

         main.log.report( "Check full connectivity" )

-        main.step( "Check full connectivity %s" % tag )

-        pa = main.Mininet1.pingall( )

+        main.step("Check IP connectivity %s" %tag)

+        hosts = main.Mininet1.getHosts().keys()

+        vlan10 = [ '%s10' % s for s in [ 'olt', 'vsg' ] ]

+        vlan5 = [ '%s5' % s for s in [ 'olt', 'vsg' ] ]

+        IPHosts = [ host for host in hosts if host not in ( vlan10 + vlan5 ) ]

+        pa = main.Mininet1.pingallHosts(IPHosts)

         utilities.assert_equals( expect=main.TRUE, actual=pa,

-                                 onpass="Full connectivity successfully tested",

-                                 onfail="Full connectivity failed" )

+                                 onpass="IP connectivity successfully tested",

+                                 onfail="IP connectivity failed" )

+        main.step("Check VLAN  connectivity %s" %tag)

+        p1 = main.Mininet1.pingallHosts(vlan5)

+        p2 = main.Mininet1.pingallHosts(vlan10)

+        utilities.assert_equals( expect=main.TRUE, actual=p1&p2,

+                             onpass="Vlan connectivity successfully tested",

+                             onfail="Vlan connectivity failed" )

         if dumpflows:

             main.ONOSbench.dumpFlows( main.ONOSip[ main.active ],

                                       main.logdir, "flowsOn" + tag )

@@ -284,7 +293,7 @@
         result = False

         count = 0

         while True:

-            count += 0

+            count += 1

             main.Mininet1.link( END1=end1, END2=end2, OPTION="up" )

             main.Mininet1.link( END2=end1, END1=end2, OPTION="up" )

             main.log.info(

diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
index c890177..4f52689 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
@@ -5,7 +5,7 @@
 
 from mininet.net import Mininet
 from mininet.topo import Topo
-from mininet.node import RemoteController, UserSwitch, Host
+from mininet.node import RemoteController, UserSwitch, Host, OVSBridge
 from mininet.link import TCLink
 from mininet.log import setLogLevel
 from mininet.cli import CLI
@@ -23,7 +23,6 @@
                        help='number of hosts per leaf switch, default=2' )
     parser.add_option( '--onos', dest='onos', type='int', default=0,
                        help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on' )
-
     (options, args) = parser.parse_args( )
     return options, args
 
@@ -34,32 +33,42 @@
 class LeafAndSpine( Topo ):
     def __init__( self, spine=2, leaf=2, fanout=2, **opts ):
         "Create Leaf and Spine Topo."
-
         Topo.__init__( self, **opts )
-
         # Add spine switches
         spines = { }
+        leafs = { }
         for s in range( spine ):
             spines[ s ] = self.addSwitch( 'spine10%s' % (s + 1),
                                           dpid="00000000010%s" % (s + 1) )
         # Set link speeds to 100Mb/s
         linkopts = dict( bw=100 )
-
         # Add Leaf switches
         for ls in range( leaf ):
-            leafSwitch = self.addSwitch( 'leaf%s' % (ls + 1),
-                                         dpid="00000000000%s" % (1 + ls) )
+            leafs[ ls ] = self.addSwitch( 'leaf%s' % (ls + 1),
+                                          dpid="00000000000%s" % (1 + ls) )
             # Connect leaf to all spines
             for s in range( spine ):
                 switch = spines[ s ]
-                self.addLink( leafSwitch, switch, **linkopts )
+                self.addLink( leafs[ ls ], switch, **linkopts )
             # Add hosts under a leaf, fanout hosts per leaf switch
             for f in range( fanout ):
                 host = self.addHost( 'h%s' % (ls * fanout + f + 1),
                                      cls=IpHost,
                                      ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
                                      gateway='10.0.%s.254' % (ls + 1) )
-                self.addLink( host, leafSwitch, **linkopts )
+                self.addLink( host, leafs[ ls ], **linkopts )
+                # Add Xconnect simulation
+        br1 = self.addSwitch( 'br1', cls=OVSBridge )
+        self.addLink( br1, leafs[ 0 ], **linkopts )
+        for vid in [ 5, 10 ]:
+            olt = self.addHost( 'olt%s' % vid, cls=VLANHost, vlan=vid,
+                                ip="10.%s.0.1/24" % vid
+                                , mac="00:00:%02d:00:00:01" % vid )
+            vsg = self.addHost( 'vsg%s' % vid, cls=VLANHost, vlan=vid,
+                                ip="10.%s.0.2/24" % vid
+                                , mac="00:00:%02d:00:00:02" % vid )
+            self.addLink( olt, leafs[ 0 ], **linkopts )
+            self.addLink( vsg, br1, **linkopts )
 
 
 class IpHost( Host ):
@@ -74,6 +83,29 @@
         self.cmd( 'ip route add default via %s' % self.gateway )
 
 
+class VLANHost( Host ):
+    "Host connected to VLAN interface"
+
+    def config( self, vlan=100, **params ):
+        """Configure VLANHost according to (optional) parameters:
+           vlan: VLAN ID for default interface"""
+        r = super( VLANHost, self ).config( **params )
+        intf = self.defaultIntf( )
+        # remove IP from default, "physical" interface
+        self.cmd( 'ifconfig %s inet 0' % intf )
+        intf = self.defaultIntf( )
+        # create VLAN interface
+        self.cmd( 'vconfig add %s %d' % (intf, vlan) )
+        self.cmd( 'ifconfig %s.%d %s' % (intf, vlan, params[ 'ip' ]) )
+        # update the intf name and host's intf map
+        self.cmd( 'ifconfig %s.%d mtu 1480' % (intf, vlan) )
+        newName = '%s.%d' % (intf, vlan)
+        # update the (Mininet) interface to refer to VLAN interface name
+        intf.name = newName
+        # add VLAN interface to host's name to intf map
+        self.nameToIntf[ newName ] = intf
+
+
 def config( opts ):
     spine = opts.spine
     leaf = opts.leaf
@@ -83,9 +115,7 @@
         '127.0.0.1' ]
     topo = LeafAndSpine( spine=spine, leaf=leaf, fanout=fanout )
     net = Mininet( topo=topo, link=TCLink, build=False,
-                   switch=UserSwitch,
-                   controller=None,
-                   autoSetMacs=True )
+                   switch=UserSwitch, controller=None, autoSetMacs=True )
     i = 0
     for ip in controllers:
         net.addController( "c%s" % (i), controller=RemoteController, ip=ip )