Merge "[SDFAB-490] Add TAP output for TestON"
diff --git a/TestON/JenkinsFile/dependencies/branches.json b/TestON/JenkinsFile/dependencies/branches.json
index c00d94f..e03ba04 100644
--- a/TestON/JenkinsFile/dependencies/branches.json
+++ b/TestON/JenkinsFile/dependencies/branches.json
@@ -1,7 +1,7 @@
 {
     "latest_branches": {
         "onos-LTS1": "2.5",
-        "onos-LTS2": "2.2"
+        "onos-LTS2": "2.5"
     },
     "support_branches": {
         "onos-1.sb1": "1.12",
@@ -10,8 +10,9 @@
         "onos-1.sb4": "1.15",
         "onos-2.sb1": "2.0",
         "onos-2.sb2": "2.1",
-        "onos-2.sb3": "2.3",
-        "onos-2.sb4": "2.4",
-        "onos-2.sb5": "2.6"
+        "onos-2.sb3": "2.2",
+        "onos-2.sb4": "2.3",
+        "onos-2.sb5": "2.4",
+        "onos-2.sb6": "2.6"
     }
 }
diff --git a/TestON/drivers/common/api/controller/onosrestdriver.py b/TestON/drivers/common/api/controller/onosrestdriver.py
index c2ce59e..7027408 100755
--- a/TestON/drivers/common/api/controller/onosrestdriver.py
+++ b/TestON/drivers/common/api/controller/onosrestdriver.py
@@ -72,12 +72,14 @@
             A formatted string for printing or None on error
         """
         try:
+            if not jsonObject:
+                return None
             if isinstance( jsonObject, str ):
                 jsonObject = json.loads( jsonObject )
             return json.dumps( jsonObject, sort_keys=True,
                                indent=4, separators=( ',', ': ' ) )
         except ( TypeError, ValueError ):
-            main.log.exception( "Error parsing jsonObject" )
+            main.log.exception( "Error parsing jsonObject %s" % repr(jsonObject) )
             return None
 
     def send( self, url, ip = "DEFAULT", port = "DEFAULT", base="/onos/v1", method="GET",
diff --git a/TestON/drivers/common/cli/emulator/scapyclidriver.py b/TestON/drivers/common/cli/emulator/scapyclidriver.py
index db4a721..1e6d730 100644
--- a/TestON/drivers/common/cli/emulator/scapyclidriver.py
+++ b/TestON/drivers/common/cli/emulator/scapyclidriver.py
@@ -48,6 +48,7 @@
         self.scapyPrompt = ">>>"
         self.sudoRequired = True
         self.ifaceName = None
+        self.scapyPath = "scapy"
 
     def connect( self, **connectargs ):
         """
@@ -65,6 +66,8 @@
                     self.sudoRequired = False if self.options[ key ] == "false" else True
                 elif key == "ifaceName":
                     self.ifaceName = self.options[ key ]
+                elif key == "scapy_path":
+                    self.scapyPath = self.options[ key ]
             if self.ifaceName is None:
                 self.ifaceName = self.name + "-eth0"
 
@@ -144,13 +147,14 @@
             response = main.FALSE
         return response
 
-    def startScapy( self, mplsPath="", ifaceName=None ):
+    def startScapy( self, mplsPath="", ifaceName=None, enableGtp=False ):
         """
         Start the Scapy cli
         optional:
             mplsPath - The path where the MPLS class is located
             NOTE: This can be a relative path from the user's home dir
             ifaceName - the name of the default interface to use.
+            enableGtp - True if you want to generate GTP traffic
         """
         mplsLines = [ 'import imp',
                       'imp.load_source( "mplsClass", "{}mplsClass.py" )'.format( mplsPath ),
@@ -159,16 +163,19 @@
                       'bind_layers(MPLS, MPLS, bottom_of_label_stack = 0)',
                       'bind_layers(MPLS, IP)' ]
 
+        # TODO: add GTPPDUSessionContainer when scapy is updated
+        gtpLines = [ 'from scapy.contrib.gtp import GTP_U_Header']
+
         try:
             main.log.debug( self.name + ": Starting scapy" )
             if self.sudoRequired:
-                self.handle.sendline( "sudo scapy" )
+                self.handle.sendline( "sudo %s" % self.scapyPath )
             else:
-                self.handle.sendline( "scapy" )
+                self.handle.sendline( self.scapyPath )
             i = self.handle.expect( [ "not found", "password for", self.scapyPrompt ] )
             if i == 1:
                 main.log.debug( "Sudo asking for password" )
-                main.log.sendline( self.pwd )
+                self.handle.sendline( self.pwd )
                 i = self.handle.expect( [ "not found", self.scapyPrompt ] )
             if i == 0:
                 output = self.handle.before + self.handle.after
@@ -198,6 +205,13 @@
                     self.handle.expect( self.scapyPrompt )
                     response = self.cleanOutput( self.handle.before )
 
+            if enableGtp:
+                for line in gtpLines:
+                    main.log.debug( self.name + ": sending line: " + line )
+                    self.handle.sendline( line )
+                    self.handle.expect( self.scapyPrompt )
+                    response = self.cleanOutput( self.handle.before )
+
             # Set interface
             if ifaceName:
                 self.handle.sendline( 'conf.iface = "' + ifaceName + '"' )
@@ -232,6 +246,62 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
+
+    def buildGTP( self, ipVersion=4, **kwargs ):
+        """
+        Build a GTP frame.
+
+        Will create a frame class with the given options. If a field is
+        left blank it will default to the below value unless it is
+        overwritten by the next frame.
+        Default frame:
+        ###[ GTP_U_Header ]###
+          gtp_type=g_pdu
+
+        Returns main.TRUE or main.FALSE on error
+        """
+
+        try:
+            main.log.debug( self.name + ": Building GTP Frame" )
+            # Set the UDP frame
+            cmd = 'gtp = GTP_U_Header( '
+            options = []
+            for key, value in kwargs.iteritems():
+                options.append( str( key ) + "=" + str( value ) )
+            cmd += ", ".join( options )
+            cmd += ' )'
+            self.handle.sendline( cmd )
+            self.handle.expect( self.scapyPrompt )
+            response = self.cleanOutput( self.handle.before )
+            if "Traceback" in response:
+                # KeyError, SyntaxError, ...
+                main.log.error( "Error in sending command: " + response )
+                return main.FALSE
+            if str( ipVersion ) is '4':
+                self.handle.sendline( "packet = ether/ip/udp/gtp" )
+            elif str( ipVersion ) is '6':
+                self.handle.sendline( "packet = ether/ipv6/udp/gtp" )
+            else:
+                main.log.error( "Unrecognized option for ipVersion, given " +
+                                repr( ipVersion ) )
+                return main.FALSE
+            self.handle.expect( self.scapyPrompt )
+            response = self.cleanOutput( self.handle.before )
+            if "Traceback" in response:
+                # KeyError, SyntaxError, ...
+                main.log.error( "Error in sending command: " + response )
+                return main.FALSE
+            return main.TRUE
+        except pexpect.TIMEOUT:
+            main.log.exception( self.name + ": Command timed out" )
+            return main.FALSE
+        except pexpect.EOF:
+            main.log.exception( self.name + ": connection closed." )
+            main.cleanAndExit()
+        except Exception:
+            main.log.exception( self.name + ": Uncaught exception!" )
+            main.cleanAndExit()
+
     def buildEther( self, **kwargs ):
         """
         Build an Ethernet frame
@@ -283,10 +353,13 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def buildIP( self, **kwargs ):
+    def buildIP( self, vlan=False, overGtp=False, **kwargs ):
         """
         Build an IP frame
 
+        If overGtp is True, it creates an inner IPv4 frame. The outer IP header
+        must be IPv4.
+
         Will create a frame class with the given options. If a field is
         left blank it will default to the below value unless it is
         overwritten by the next frame.
@@ -311,7 +384,10 @@
         try:
             main.log.debug( self.name + ": Building IP Frame" )
             # Set the IP frame
-            cmd = 'ip = IP( '
+            if overGtp:
+                cmd = 'inner_ip = IP( '
+            else:
+                cmd = 'ip = IP( '
             options = []
             for key, value in kwargs.iteritems():
                 if isinstance( value, str ):
@@ -326,7 +402,16 @@
                 # KeyError, SyntaxError, ...
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
-            self.handle.sendline( "packet = ether/ip" )
+            if vlan:
+                if overGtp:
+                    self.handle.sendline( "packet = ether/vlan/ip/udp/gtp/inner_ip" )
+                else:
+                    self.handle.sendline( "packet = ether/vlan/ip" )
+            else:
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ip/udp/gtp/inner_ip" )
+                else:
+                    self.handle.sendline( "packet = ether/ip" )
             self.handle.expect( self.scapyPrompt )
             response = self.cleanOutput( self.handle.before )
             if "Traceback" in response:
@@ -366,7 +451,7 @@
                 # KeyError, SyntaxError, ...
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
-            self.handle.sendline( "packet = ether/ip/vlan" )
+            self.handle.sendline( "packet = ether/vlan" )
             self.handle.expect( self.scapyPrompt )
             response = self.cleanOutput( self.handle.before )
             if "Traceback" in response:
@@ -384,10 +469,13 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def buildIPv6( self, **kwargs ):
+    def buildIPv6( self, vlan=False, overGtp=False, **kwargs ):
         """
         Build an IPv6 frame
 
+        If overGtp is True, it creates an inner IPv6 frame. The outer ip header
+        must be IPv6.
+
         Will create a frame class with the given options. If a field is
         left blank it will default to the below value unless it is
         overwritten by the next frame.
@@ -407,7 +495,10 @@
         try:
             main.log.debug( self.name + ": Building IPv6 Frame" )
             # Set the IPv6 frame
-            cmd = 'ipv6 = IPv6( '
+            if overGtp:
+                cmd = 'inner_ipv6 = IPv6( '
+            else:
+                cmd = 'ipv6 = IPv6( '
             options = []
             for key, value in kwargs.iteritems():
                 if isinstance( value, str ):
@@ -422,7 +513,16 @@
                 # KeyError, SyntaxError, ...
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
-            self.handle.sendline( "packet = ether/ipv6" )
+            if vlan:
+                if overGtp:
+                    self.handle.sendline( "packet = ether/vlan/ipv6/udp/gtp/inner_ipv6" )
+                else:
+                    self.handle.sendline( "packet = ether/vlan/ipv6" )
+            else:
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ipv6/udp/gtp/inner_ipv6" )
+                else:
+                    self.handle.sendline( "packet = ether/ipv6" )
             self.handle.expect( self.scapyPrompt )
             response = self.cleanOutput( self.handle.before )
             if "Traceback" in response:
@@ -440,10 +540,13 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def buildTCP( self, ipVersion=4, **kwargs ):
+    def buildTCP( self, ipVersion=4, overGtp=False, **kwargs ):
         """
         Build an TCP frame
 
+        If overGtp is True, it creates an inner TCP frame, in this case ipVersion
+        signals the IP version of both outer and inner headers.
+
         Will create a frame class with the given options. If a field is
         left blank it will default to the below value unless it is
         overwritten by the next frame.
@@ -474,7 +577,10 @@
         try:
             main.log.debug( self.name + ": Building TCP" )
             # Set the TCP frame
-            cmd = 'tcp = TCP( '
+            if overGtp:
+                cmd = 'inner_tcp = TCP( '
+            else:
+                cmd = 'tcp = TCP( '
             options = []
             for key, value in kwargs.iteritems():
                 options.append( str( key ) + "=" + str( value ) )
@@ -488,9 +594,15 @@
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
             if str( ipVersion ) is '4':
-                self.handle.sendline( "packet = ether/ip/tcp" )
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ip/udp/gtp/inner_ip/inner_tcp" )
+                else:
+                    self.handle.sendline( "packet = ether/ip/tcp" )
             elif str( ipVersion ) is '6':
-                self.handle.sendline( "packet = ether/ipv6/tcp" )
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ipv6/udp/gtp/inner_ipv6/inner_tcp" )
+                else:
+                    self.handle.sendline( "packet = ether/ipv6/tcp" )
             else:
                 main.log.error( "Unrecognized option for ipVersion, given " +
                                 repr( ipVersion ) )
@@ -512,10 +624,13 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def buildUDP( self, ipVersion=4, **kwargs ):
+    def buildUDP( self, ipVersion=4, overGtp=False, **kwargs ):
         """
         Build an UDP frame
 
+        If overGtp is True, it creates an inner UDP frame, in this case ipVersion
+        signals the IP version of both outer and inner headers.
+
         Will create a frame class with the given options. If a field is
         left blank it will default to the below value unless it is
         overwritten by the next frame.
@@ -539,7 +654,10 @@
         try:
             main.log.debug( self.name + ": Building UDP Frame" )
             # Set the UDP frame
-            cmd = 'udp = UDP( '
+            if overGtp:
+                cmd = 'inner_udp = UDP( '
+            else:
+                cmd = 'udp = UDP( '
             options = []
             for key, value in kwargs.iteritems():
                 options.append( str( key ) + "=" + str( value ) )
@@ -553,9 +671,15 @@
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
             if str( ipVersion ) is '4':
-                self.handle.sendline( "packet = ether/ip/udp" )
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ip/udp/gtp/inner_ip/inner_udp" )
+                else:
+                    self.handle.sendline( "packet = ether/ip/udp" )
             elif str( ipVersion ) is '6':
-                self.handle.sendline( "packet = ether/ipv6/udp" )
+                if overGtp:
+                    self.handle.sendline( "packet = ether/ipv6/udp/gtp/inner_ipv6/inner_udp" )
+                else:
+                    self.handle.sendline( "packet = ether/ipv6/udp" )
             else:
                 main.log.error( "Unrecognized option for ipVersion, given " +
                                 repr( ipVersion ) )
@@ -704,7 +828,7 @@
             main.log.exception( self.name + ": Uncaught exception!" )
             main.cleanAndExit()
 
-    def buildICMP( self, ipVersion=4, **kwargs ):
+    def buildICMP( self, ipVersion=4, vlan=False, **kwargs ):
         """
         Build an ICMP frame
 
@@ -750,14 +874,20 @@
                 # KeyError, SyntaxError, ...
                 main.log.error( "Error in sending command: " + response )
                 return main.FALSE
-
-            if str( ipVersion ) is '4':
-                self.handle.sendline( "packet = ether/ip/icmp" )
-            elif str( ipVersion ) is '6':
-                self.handle.sendline( "packet = ether/ipv6/icmp6" )
+            if vlan:
+                if str( ipVersion ) is '4':
+                    self.handle.sendline( "packet = ether/vlan/ip/icmp" )
+                elif str( ipVersion ) is '6':
+                    self.handle.sendline( "packet = ether/vlan/ipv6/icmp6" )
             else:
-                main.log.error( "Unrecognized option for ipVersion, given " +
+                if str( ipVersion ) is '4':
+                    self.handle.sendline( "packet = ether/ip/icmp" )
+                elif str( ipVersion ) is '6':
+                    self.handle.sendline( "packet = ether/ipv6/icmp6" )
+                else:
+                    main.log.error( "Unrecognized option for ipVersion, given " +
                                 repr( ipVersion ) )
+
                 return main.FALSE
             self.handle.expect( self.scapyPrompt )
             response = self.cleanOutput( self.handle.before )
@@ -873,7 +1003,7 @@
             self.handle.expect( self.scapyPrompt )
             response = self.handle.before + self.handle.after
             self.cleanOutput( response )
-            cmd = 'pkts = sniff(count = %s, filter = "%s", prn=lambda p: p.summary() )' % ( sniffCount, pktFilter )
+            cmd = 'pkts = sniff(count = %s, iface="%s", filter = "%s", prn=lambda p: p.summary() )' % ( sniffCount, ifaceName, pktFilter )
             main.log.info( self.name + ": Starting filter on " + self.name + ' > ' + cmd )
             self.handle.sendline( cmd )
             response = self.clearBuffer()
diff --git a/TestON/drivers/common/cli/hostdriver.py b/TestON/drivers/common/cli/hostdriver.py
index ba8b1b9..a4ab31c 100644
--- a/TestON/drivers/common/cli/hostdriver.py
+++ b/TestON/drivers/common/cli/hostdriver.py
@@ -58,7 +58,7 @@
                                       'isUp': True,
                                       'mac': self.options[ 'mac' ],
                                       'dhcp': self.options.get( 'dhcp', "False" ),
-                                      'name': self.options.get( 'interfaceName', None ) } )
+                                      'name': self.options.get( 'ifaceName', None ) } )
 
             try:
                 if os.getenv( str( self.ip_address ) ) is not None:
diff --git a/TestON/drivers/common/cli/networkdriver.py b/TestON/drivers/common/cli/networkdriver.py
index 6b02e09..b1dfd78 100755
--- a/TestON/drivers/common/cli/networkdriver.py
+++ b/TestON/drivers/common/cli/networkdriver.py
@@ -529,17 +529,28 @@
                     main.log.debug( "Pinging from " + str( hostPair[ 0 ].shortName ) + " to " + str( hostPair[ 1 ].shortName ) )
                     srcIPs = hostPair[ 0 ].interfaces[0].get( 'ips' )
                     dstIPs = hostPair[ 1 ].interfaces[0].get( 'ips' )
+                    srcVLANs = hostPair[0].interfaces[0].get( 'vlan' )
+                    if srcVLANs:
+                        VLAN = srcVLANs[0]
+                    else:
+                        VLAN=None
+                    dstVLANs = hostPair[1].interfaces[0].get( 'vlan' )
                     # Use scapy to send and recieve packets
                     hostPair[ 1 ].startScapy( ifaceName=dstIface )
                     hostPair[ 1 ].addRoutes()
-                    hostPair[ 1 ].startFilter( ifaceName=dstIface, pktFilter="ether src host %s and ip src host %s" % ( srcMac, srcIPs[0] ) )
-
+                    filters = []
+                    if srcMac:
+                        filters.append( "ether src host %s" % srcMac )
+                    if srcIPs[0]:
+                        filters.append( "ip src host %s" % srcIPs[0] )
+                    hostPair[ 1 ].startFilter( ifaceName=dstIface, pktFilter=" and ".join(filters) )
                     hostPair[ 0 ].startScapy( ifaceName=srcIface )
                     hostPair[ 0 ].addRoutes()
                     hostPair[ 0 ].buildEther( src=srcMac, dst=dstMac )
+                    if VLAN:
+                        hostPair[ 0 ].buildVLAN( vlan=VLAN )
                     hostPair[ 0 ].buildIP( src=srcIPs[0], dst=dstIPs[0] )
-                    hostPair[ 0 ].buildVLAN( vlan=[102, 103] )
-                    hostPair[ 0 ].buildICMP( )
+                    hostPair[ 0 ].buildICMP( vlan=VLAN )
                     hostPair[ 0 ].sendPacket( iface=srcIface )
 
                     waiting = not hostPair[ 1 ].checkFilter()
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tucson
similarity index 78%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tucson
index 51490de..67b0d48 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tucson
@@ -1,8 +1,8 @@
 <PARAMS>
-    <testcases>9,19,29,39,49,59,69,79</testcases>
+    <testcases>6</testcases>
 
     <GRAPH>
-        <nodeCluster>QA-Pod</nodeCluster>
+        <nodeCluster>pairedleaves</nodeCluster>
         <builds>20</builds>
         <jobName>SRBridging-tofino</jobName>
         <branch>master</branch>
@@ -33,35 +33,6 @@
         <namespace>tost</namespace>
     </kubernetes>
 
-    <PERF>
-        <traffic_host>Host1</traffic_host>
-        <pcap_host>ng40vm</pcap_host>
-        <pcap_cmd_arguments>-t e -F pcap -s 100 </pcap_cmd_arguments>
-        <iterations>1</iterations>
-        <topo>
-            <leaf1>
-                <ports>260 268 276 284</ports>
-                <note>eNB</note>
-            </leaf1>
-            <leaf2>
-                <ports>132 140 148 156</ports>
-                <note>upstream</note>
-            </leaf2>
-            <spine1>
-                <ports>132 140 148 156</ports>
-                <note>spine</note>
-            </spine1>
-            <spine2>
-                <ports>132 140 148 156</ports>
-                <note>spine</note>
-            </spine2>
-        </topo>
-    </PERF>
-
-
-
-
-
     <ENV>
         <cellName>productionCell</cellName>
         <cellApps>drivers,fpm,lldpprovider,hostprovider,netcfghostprovider,drivers.bmv2,pipelines.fabric,org.stratumproject.fabric-tna,drivers.barefoot,segmentrouting,t3</cellApps>
@@ -118,8 +89,8 @@
     </SLEEP>
 
     <TOPO>
-        <switchNum>4</switchNum>
-        <linkNum>16</linkNum>
+        <switchNum>2</switchNum>
+        <linkNum>2</linkNum>
     </TOPO>
 
     <ALARM>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
index e67e354..251f1ea 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x1.physical
@@ -55,7 +55,7 @@
                 <shortName>h1</shortName>
                 <port1>0</port1>
                 <link1>SwitchLeaf1</link1>
-                <interfaceName>ens6f0</interfaceName>
+                <ifaceName>ens6f0</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.102.1</network>
@@ -80,7 +80,7 @@
                 <shortName>h2</shortName>
                 <port1>0</port1>
                 <link1>SwitchLeaf1</link1>
-                <interfaceName>ens6f1</interfaceName>
+                <ifaceName>ens6f1</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.102.1</network>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson
new file mode 100644
index 0000000..61ff208
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.0x2.tucson
@@ -0,0 +1,186 @@
+<TOPOLOGY>
+    <COMPONENT>
+        <ONOScell>
+            <host>localhost</host>  # ONOS "bench" machine
+            <user>jenkins</user>
+            <password></password>
+            <type>OnosClusterDriver</type>
+            <connect_order>1</connect_order>
+            <home>~/onos</home>   # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
+            <COMPONENTS>
+                <kubeConfig>~/.kube/dev-pairedleaves-tucson</kubeConfig>  # If set, will attempt to use this file for setting up port-forwarding
+                <useDocker>True</useDocker>  # Whether to use docker for ONOS nodes
+                <docker_prompt>\$</docker_prompt>
+                <cluster_name></cluster_name>  # Used as a prefix for cluster components. Defaults to 'ONOS'
+                <diff_clihost>True</diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
+                <karaf_username>karaf</karaf_username>
+                <karaf_password>karaf</karaf_password>
+                <karafPrompt_username>karaf</karafPrompt_username>
+                <karafPrompt_password>karaf</karafPrompt_password>
+                <web_user>karaf</web_user>
+                <web_pass>karaf</web_pass>
+                <rest_port></rest_port>
+                <prompt></prompt>  # TODO: we technically need a few of these, one per component
+                <onos_home>~/onos/</onos_home>  # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
+                <nodes> 3 </nodes>  # number of nodes in the cluster
+            </COMPONENTS>
+        </ONOScell>
+
+        <Leaf1>
+            <host>10.76.28.70</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>StratumOSSwitchDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+                <shortName>leaf1</shortName>
+                <port1>1</port1>
+                <link1>Host1</link1>
+                <onosConfigPath></onosConfigPath>
+                <onosConfigFile></onosConfigFile>
+            </COMPONENTS>
+        </Leaf1>
+
+        <Leaf2>
+            <host>10.76.28.71</host>
+            <user>root</user>
+            <password>onl</password>
+            <type>StratumOSSwitchDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+                <shortName>leaf2</shortName>
+                <port1>2</port1>
+                <link1>Host2</link1>
+                <onosConfigPath></onosConfigPath>
+                <onosConfigFile></onosConfigFile>
+            </COMPONENTS>
+        </Leaf2>
+
+        <Compute1>
+            <host>10.76.28.74</host>
+            <user>jenkins</user>
+            <password></password>
+            <type>HostDriver</type>
+            <connect_order>6</connect_order>
+            <jump_host></jump_host>
+            <COMPONENTS>
+                <mac></mac>
+                <inband>false</inband>
+                <dhcp>True</dhcp>
+                <ip>10.32.11.2</ip>
+                <shortName>h1</shortName>
+                <port1></port1>
+                <link1></link1>
+                <ifaceName>pairbond</ifaceName>
+                <scapy_path>/usr/bin/scapy</scapy_path>
+                <routes>
+                    <route1>
+                        <network>10.32.11.126</network>
+                        <netmask>25</netmask>
+                        <gw>10.32.11.126</gw>
+                        <interface>pairbond</interface>
+                    </route1>
+                </routes>
+                <sudo_required>true</sudo_required>
+            </COMPONENTS>
+        </Compute1>
+
+        <Compute2>
+            <host>10.76.28.72</host>
+            <user>jenkins</user>
+            <password></password>
+            <type>HostDriver</type>
+            <connect_order>7</connect_order>
+            <jump_host></jump_host>
+            <COMPONENTS>
+                <mac></mac>
+                <inband>false</inband>
+                <dhcp>True</dhcp>
+                <ip>10.32.11.3</ip>
+                <shortName>h2</shortName>
+                <port1></port1>
+                <link1></link1>
+                <ifaceName>pairbond</ifaceName>
+                <scapy_path>/usr/bin/scapy</scapy_path>
+                <routes>
+                    <route1>
+                        <network>10.32.11.126</network>
+                        <netmask>25</netmask>
+                        <gw>10.32.11.126</gw>
+                        <interface>pairbond</interface>
+                    </route1>
+                </routes>
+                <sudo_required>true</sudo_required>
+            </COMPONENTS>
+        </Compute2>
+
+        <Compute3>
+            <host>10.76.28.68</host>
+            <user>jenkins</user>
+            <password></password>
+            <type>HostDriver</type>
+            <connect_order>8</connect_order>
+            <jump_host></jump_host>
+            <COMPONENTS>
+                <mac></mac>
+                <inband>false</inband>
+                <dhcp>True</dhcp>
+                <ip>10.32.11.194</ip>
+                <shortName>h3</shortName>
+                <port1></port1>
+                <link1></link1>
+                <ifaceName>eno2</ifaceName>
+                <scapy_path>/usr/bin/scapy</scapy_path>
+                <routes>
+                    <route1>
+                        <network>10.32.11.254</network>
+                        <netmask>26</netmask>
+                        <gw>10.32.11.254</gw>
+                        <interface>26</interface>
+                    </route1>
+                </routes>
+                <sudo_required>true</sudo_required>
+            </COMPONENTS>
+        </Compute3>
+
+        <ManagmentServer>
+            <host>10.76.28.66</host>
+            <user>jenkins</user>
+            <password></password>
+            <type>HostDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+                <mac></mac>
+                <inband>false</inband>
+                <dhcp>True</dhcp>
+                <ip>10.32.11.1</ip>
+                <shortName>mgmt</shortName>
+                <port1></port1>
+                <link1></link1>
+                <ifaceName>pairbond</ifaceName>
+                <scapy_path>/usr/bin/scapy</scapy_path>
+                <routes>
+                    <route1>
+                        <network>10.32.11.126</network>
+                        <netmask>25</netmask>
+                        <gw>10.32.11.126</gw>
+                        <interface>pairbond</interface>
+                    </route1>
+                </routes>
+                <sudo_required>true</sudo_required>
+
+            </COMPONENTS>
+        </ManagmentServer>
+
+        <NetworkBench>
+            <host>10.76.28.66</host>
+            <user>jenkins</user>
+            <password></password>
+            <type>NetworkDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+            </COMPONENTS>
+        </NetworkBench>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
index 458a4a7..e2b175f 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
@@ -34,7 +34,6 @@
         self.switchNames[ '2x2' ] = [ "leaf1", "leaf2", "spine101", "spine102" ]
         main.switchType = "ovs"
 
-
     def runTest( self, main, test_idx, topology, onosNodes, description, vlan = [] ):
         try:
             skipPackage = False
@@ -90,7 +89,6 @@
                     main.log.info( "Using %s switch" % main.switchType )
 
                 run.startMininet( main, 'trellis_fabric.py', args=mininet_args )
-
             else:
                 # Run the test with physical devices
                 run.connectToPhysicalNetwork( main, hostDiscovery=False )  # We don't want to do host discovery in the pod
@@ -112,6 +110,7 @@
                 leaf_dpid = [ "of:%016d" % ( ls + 1 ) for ls in range( self.topo[ topology ][ 'leaves' ] ) ]
             for dpid in leaf_dpid:
                 run.checkFlowsByDpid( main, dpid, self.topo[ topology ][ 'minFlow-Stratum' if main.useBmv2 else 'minFlow-OvS' ], sleep=5 )
+            run.populateHostsVlan( main, main.Network.hosts.keys()  )
             run.verifyTopology( main, switches, links, onosNodes )
             run.pingAll( main )
         except Exception as e:
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE09.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE09.chart
index f52bad8..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE09.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE09.chart
@@ -1,4 +1,4 @@
 {
   "leaf1": {"expect": "True",
-    "hosts":["h1", "ng40"]}
+    "hosts":["h1", "h2"]}
 }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
index f1fe795..f52bad8 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
@@ -1,4 +1,4 @@
 {
   "leaf1": {"expect": "True",
-    "hosts":["h1", "h2"]}
+    "hosts":["h1", "ng40"]}
 }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE06.json.tucson b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE06.json.tucson
new file mode 100644
index 0000000..a10a0ca
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/json/CASE06.json.tucson
@@ -0,0 +1,48 @@
+{
+"ports":{
+        "device:leaf1/56":{
+            "interfaces":[
+                {
+                    "ips":[
+                        "10.32.11.126/25"
+                    ],
+                    "vlan-untagged":111,
+                    "name": "compute-1-1"
+                }
+            ]
+        },
+        "device:leaf2/56":{
+            "interfaces":[
+                {
+                    "ips":[
+                        "10.32.11.126/25"
+                    ],
+                    "vlan-untagged":111,
+                    "name": "compute-1-2"
+                }
+            ]
+        },
+        "device:leaf1/40": {
+            "interfaces": [
+              {
+                "ips": [
+                  "10.32.11.126/25"
+                ],
+                "vlan-untagged": 111,
+                "name": "compute-2-1"
+              }
+            ]
+          },
+          "device:leaf2/40": {
+            "interfaces": [
+              {
+                "ips": [
+                  "10.32.11.126/25"
+                ],
+                "vlan-untagged": 111,
+                "name": "compute-2-2"
+              }
+            ]
+          }
+    }
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE06.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE06.cfg
new file mode 100644
index 0000000..a10a0ca
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE06.cfg
@@ -0,0 +1,48 @@
+{
+"ports":{
+        "device:leaf1/56":{
+            "interfaces":[
+                {
+                    "ips":[
+                        "10.32.11.126/25"
+                    ],
+                    "vlan-untagged":111,
+                    "name": "compute-1-1"
+                }
+            ]
+        },
+        "device:leaf2/56":{
+            "interfaces":[
+                {
+                    "ips":[
+                        "10.32.11.126/25"
+                    ],
+                    "vlan-untagged":111,
+                    "name": "compute-1-2"
+                }
+            ]
+        },
+        "device:leaf1/40": {
+            "interfaces": [
+              {
+                "ips": [
+                  "10.32.11.126/25"
+                ],
+                "vlan-untagged": 111,
+                "name": "compute-2-1"
+              }
+            ]
+          },
+          "device:leaf2/40": {
+            "interfaces": [
+              {
+                "ips": [
+                  "10.32.11.126/25"
+                ],
+                "vlan-untagged": 111,
+                "name": "compute-2-2"
+              }
+            ]
+          }
+    }
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg
index ced0429..4cb68f0 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg
@@ -6,7 +6,7 @@
                     "ips":[
                         "192.168.103.1/24"
                     ],
-                    "vlan-untagged":102
+                    "vlan-untagged":[102]
                 }
             ]
         },
@@ -16,7 +16,7 @@
                     "ips":[
                         "192.168.103.2/24"
                     ],
-                    "vlan-untagged":102
+                    "vlan-untagged":[102]
                 }
             ]
         }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE19.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE19.cfg
index 7fe7a67..d5c73e0 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE19.cfg
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE19.cfg
@@ -6,7 +6,7 @@
                     "ips":[
                         "192.168.103.1/24"
                     ],
-                    "vlan-tagged":102
+                    "vlan-tagged":[102]
                 }
             ]
         },
@@ -16,7 +16,7 @@
                     "ips":[
                         "192.168.103.2/24"
                     ],
-                    "vlan-tagged":103
+                    "vlan-tagged":[103]
                 }
             ]
         }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE29.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE29.cfg
index c09601a..b09226c 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE29.cfg
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE29.cfg
@@ -6,8 +6,8 @@
                     "ips":[
                         "192.168.103.1/24"
                     ],
-                    "vlan-native":103
-                    "vlan-tagged":102
+                    "vlan-native":[103]
+                    "vlan-tagged":[102]
                 }
             ]
         },
@@ -17,8 +17,8 @@
                     "ips":[
                         "192.168.103.2/24"
                     ],
-                    "vlan-native":103
-                    "vlan-untagged":102
+                    "vlan-native":[103]
+                    "vlan-untagged":[102]
                 }
             ]
         }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.params.tofino
similarity index 97%
rename from TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
rename to TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.params.tofino
index 51490de..48d8d67 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.params.tofino
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.params.tofino
@@ -1,10 +1,10 @@
 <PARAMS>
-    <testcases>9,19,29,39,49,59,69,79</testcases>
+    <testcases>13,23</testcases>
 
     <GRAPH>
         <nodeCluster>QA-Pod</nodeCluster>
         <builds>20</builds>
-        <jobName>SRBridging-tofino</jobName>
+        <jobName>SRDynamicConf-tofino</jobName>
         <branch>master</branch>
     </GRAPH>
 
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.py b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.py
index 78e25c2..d36c9bb 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.py
@@ -76,11 +76,15 @@
         Pingall
         """
         from tests.USECASE.SegmentRouting.SRDynamicConf.dependencies.SRDynamicConfTest import SRDynamicConfTest
-        SRDynamicConfTest.runTest( main,
+        try:
+            test=SRDynamicConfTest()
+            test.runTest( main,
                                    testIndex=13,
                                    topology='2x2',
                                    onosNodes=3,
                                    description='Changing port configuration from untagged 10 to tagged 10' )
+        except Exception:
+            main.log.exception("debug")
 
     def CASE14( self, main ):
         """
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo.2x2.physical
similarity index 92%
rename from TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical
rename to TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo.2x2.physical
index e4a823b..24d5f51 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo.2x2.physical
@@ -2,8 +2,8 @@
     <COMPONENT>
         <ONOScell>
             <host>localhost</host>  # ONOS "bench" machine
-            <user>sdn</user>
-            <password>rocks</password>
+            <user>sid</user>
+            <password>sid</password>
             <type>OnosClusterDriver</type>
             <connect_order>1</connect_order>
             <home></home>   # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
@@ -15,8 +15,8 @@
                 <diff_clihost>True</diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
                 <karaf_username>karaf</karaf_username>
                 <karaf_password>karaf</karaf_password>
-                <node_username>sdn</node_username>
-                <node_password>rocks</node_password>
+                <node_username>sid</node_username>
+                <node_password>sid</node_password>
                 <karafPrompt_username>karaf</karafPrompt_username>
                 <karafPrompt_password>karaf</karafPrompt_password>
                 <web_user>karaf</web_user>
@@ -101,12 +101,12 @@
                 <shortName>h1</shortName>
                 <port1>0</port1>
                 <link1>Leaf1</link1>
-                <interfaceName>ens6f0</interfaceName>
+                <ifaceName>ens6f0</ifaceName>
                 <routes>
                     <route1>
-                        <network>192.168.101.1</network>
+                        <network>192.168.103.1</network>
                         <netmask>24</netmask>
-                        <gw>192.168.103.1</gw>
+                        <gw>192.168.102.1</gw>
                         <interface></interface>
                     </route1>
                 </routes>
@@ -126,10 +126,10 @@
                 <shortName>h2</shortName>
                 <port1>0</port1>
                 <link1>Leaf1</link1>
-                <interfaceName>ens6f1</interfaceName>
+                <ifaceName>ens6f1</ifaceName>
                 <routes>
                     <route1>
-                        <network>192.168.101.1</network>
+                        <network>192.168.102.1</network>
                         <netmask>24</netmask>
                         <gw>192.168.103.1</gw>
                         <interface></interface>
@@ -151,7 +151,7 @@
                 <shortName>ng40</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>ens9</interfaceName>
+                <ifaceName>ens9</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.101.1</network>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/SRDynamicConfTest.py b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/SRDynamicConfTest.py
index f58e4f8..7388172 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/SRDynamicConfTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/SRDynamicConfTest.py
@@ -18,6 +18,7 @@
     You should have received a copy of the GNU General Public License
     along with TestON.  If not, see <http://www.gnu.org/licenses/>.
 """
+from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
 
 import tests.USECASE.SegmentRouting.dependencies.cfgtranslator as translator
 
@@ -26,8 +27,7 @@
         self.default = ''
         self.topo = run.getTopo()
 
-    @staticmethod
-    def runTest( main, testIndex, topology, onosNodes, description, vlan=( 0, 0, 0, 0 ) ):
+    def runTest( self, main, testIndex, topology, onosNodes, description, vlan=( 0, 0, 0, 0 ) ):
         '''
         Tests connectivity for each test case.
         Configuration files:
@@ -51,7 +51,6 @@
             portNum = self.topo[ topology ][ 'description' ]
             defaultIntf = 'bond0' if dualHomed else 'eth0'
 
-            from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
             if not hasattr( main, 'apps' ):
                 init = True
                 run.initTest( main )
@@ -78,38 +77,41 @@
                 translator.bmv2ToOfdpa( main )
             if not main.persistentSetup:
                 run.loadJson( main )
-            run.loadChart( main )
 
             # Provide topology-specific interface configuration
             import json
-            try:
-                intfCfg = "%s%s%s.json" % ( main.configPath, main.forJson, TAG )
-                if main.useBmv2:
-                    # Translate configuration file from OVS-OFDPA to BMv2 driver
-                    translator.bmv2ToOfdpa( main, intfCfg )  # Try to cleanup if switching between switch types
-                    switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
-                    translator.ofdpaToBmv2( main, switchPrefix=switchPrefix, cfgFile=intfCfg )
-                else:
-                    translator.bmv2ToOfdpa( main, intfCfg )
-                with open( intfCfg ) as cfg:
-                    main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
-            except IOError:
-                # Load default interface configuration
-                defaultIntfCfg = "%s%s%s_ports.json" % ( main.configPath, main.forJson, topology )
-                if main.useBmv2:
-                    # Translate configuration file from OVS-OFDPA to BMv2 driver
-                    translator.bmv2ToOfdpa( main, defaultIntfCfg )  # Try to cleanup if switching between switch types
-                    switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
-                    translator.ofdpaToBmv2( main, switchPrefix=switchPrefix, cfgFile=defaultIntfCfg )
-                else:
-                    translator.bmv2ToOfdpa( main, defaultIntfCfg )
-                with open( defaultIntfCfg ) as cfg:
-                    main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
+            if not main.persistentSetup:
+                try:
+                    intfCfg = "%s%s%s.json" % ( main.configPath, main.forJson, TAG )
+                    if main.useBmv2:
+                        # Translate configuration file from OVS-OFDPA to BMv2 driver
+                        translator.bmv2ToOfdpa( main, intfCfg )  # Try to cleanup if switching between switch types
+                        switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
+                        translator.ofdpaToBmv2( main, switchPrefix=switchPrefix, cfgFile=intfCfg )
+                    else:
+                        translator.bmv2ToOfdpa( main, intfCfg )
+                    with open( intfCfg ) as cfg:
+                        main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
+                except IOError:
+                    # Load default interface configuration
+                    defaultIntfCfg = "%s%s%s_ports.json" % ( main.configPath, main.forJson, topology )
+                    if main.useBmv2:
+                        # Translate configuration file from OVS-OFDPA to BMv2 driver
+                        translator.bmv2ToOfdpa( main, defaultIntfCfg )  # Try to cleanup if switching between switch types
+                        switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', "bmv2" )
+                        translator.ofdpaToBmv2( main, switchPrefix=switchPrefix, cfgFile=defaultIntfCfg )
+                    else:
+                        translator.bmv2ToOfdpa( main, defaultIntfCfg )
+                    with open( defaultIntfCfg ) as cfg:
+                        main.Cluster.active( 0 ).REST.setNetCfg( json.load( cfg ) )
 
             try:
-                with open( "%s%sCASE%d.chart" % (main.configPath, main.forChart, testIndex / 10 * 10) ) as chart:
+                suffix='qa'
+                main.log.debug("%s%sCASE%d.chart%s" % (main.configPath, main.forChart, testIndex / 10 * 10, suffix ))
+                with open( "%s%sCASE%d.chart.%s" % (main.configPath, main.forChart, testIndex / 10 * 10, suffix ) ) as chart:
                     main.pingChart = json.load( chart )
             except IOError:
+                main.log.debug("default_chart")
                 # Load default chart
                 with open( "%s%sdefault.chart" % (main.configPath, main.forChart) ) as chart:
                     main.pingChart = json.load( chart )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/chart/CASE10.chart.qa b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/chart/CASE10.chart.qa
new file mode 100644
index 0000000..f1fe795
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/dependencies/chart/CASE10.chart.qa
@@ -0,0 +1,4 @@
+{
+  "leaf1": {"expect": "True",
+    "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.2x2.physical b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.2x2.physical
index e9f18ee..17cb204 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.2x2.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.2x2.physical
@@ -101,7 +101,7 @@
                 <shortName>h1</shortName>
                 <port1>0</port1>
                 <link1>Leaf1</link1>
-                <interfaceName>ens6f0</interfaceName>
+                <ifaceName>ens6f0</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.101.1</network>
@@ -126,7 +126,7 @@
                 <shortName>h2</shortName>
                 <port1>0</port1>
                 <link1>Leaf1</link1>
-                <interfaceName>ens6f1</interfaceName>
+                <ifaceName>ens6f1</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.101.1</network>
@@ -151,7 +151,7 @@
                 <shortName>ng40</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>ens8</interfaceName>
+                <ifaceName>ens8</ifaceName>
                 <routes>
                     <route1>
                         <network>192.168.101.1</network>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
index f50b327..2f4c8f2 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRStaging.topo
@@ -113,7 +113,7 @@
                 <shortName>h1</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>fabr52</interfaceName>
+                <ifaceName>fabr52</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -141,7 +141,7 @@
                 <shortName>h2</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>fabr52</interfaceName>
+                <ifaceName>fabr52</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -169,7 +169,7 @@
                 <shortName>h3</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>fabr52</interfaceName>
+                <ifaceName>fabr52</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -195,7 +195,7 @@
                 <shortName>ng40</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>ens8</interfaceName>
+                <ifaceName>ens8</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
index 609d479..40bf030 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRStaging/SRpairedLeaves/SRpairedLeaves.topo
@@ -77,7 +77,7 @@
                 <shortName>h1</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>pairbond</interfaceName>
+                <ifaceName>pairbond</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -105,7 +105,7 @@
                 <shortName>h2</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>pairbond</interfaceName>
+                <ifaceName>pairbond</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -133,7 +133,7 @@
                 <shortName>h3</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>eno2</interfaceName>
+                <ifaceName>eno2</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
@@ -160,7 +160,7 @@
                 <shortName>mgmt</shortName>
                 <port1></port1>
                 <link1></link1>
-                <interfaceName>pairbond</interfaceName>
+                <ifaceName>pairbond</ifaceName>
                 <routes>
                     <route1>
                         <network></network>
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 3541ef0..78be8ac 100644
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -226,7 +226,7 @@
 
                 currentJSON = json.loads( currentJSON )
                 if currentJSON['interfaces'][0]['ips'] != deviceCfg['interfaces'][0]['ips']:
-                    currentJSON['interfaces'][0]['ips'] == deviceCfg['interfaces'][0]['ips']
+                    currentJSON['interfaces'][0]['ips'] = deviceCfg['interfaces'][0]['ips']
                     data = { 'interfaces': currentJSON['interfaces'] }
                     A = main.Cluster.active( 0 ).REST.setNetCfg(  data , subjectClass = "ports", subjectKey = device )
                     returnValue = returnValue and A
@@ -873,7 +873,7 @@
                             if len( vlans ) == 0:
                                 main.log.debug( "Could not find vlan setting for %s" % hostname )
                 vlans = set( vlans )
-                hostComponent.interfaces[0][ 'vlan' ] = vlans
+                hostComponent.interfaces[0][ 'vlan' ] = list( vlans )
                 main.log.debug( repr( hostComponent.interfaces[0] ) )
                 main.log.debug( repr( hostComponent.interfaces[0].get( 'vlan' ) ) )
             except ValueError: