SRBridgingvlan tagged, untagged and native
Change-Id: I804e4808a7bd22e7662ae06e5d82c2cf03d3efc3
diff --git a/TestON/drivers/common/cli/emulator/scapyclidriver.py b/TestON/drivers/common/cli/emulator/scapyclidriver.py
index 1ff0d6f..db4a721 100644
--- a/TestON/drivers/common/cli/emulator/scapyclidriver.py
+++ b/TestON/drivers/common/cli/emulator/scapyclidriver.py
@@ -344,6 +344,46 @@
main.log.exception( self.name + ": Uncaught exception!" )
main.cleanAndExit()
+ def buildVLAN( self, **kwargs ):
+ """
+ Build a VLAN frame
+ """
+ try:
+ main.log.debug( self.name + ": Building VLAN Frame" )
+ # Set the IP frame
+ cmd = 'vlan = Dot1Q( '
+ options = []
+ for key, value in kwargs.iteritems():
+ if isinstance( value, str ):
+ value = '"' + value + '"'
+ 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
+ self.handle.sendline( "packet = ether/ip/vlan" )
+ 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 buildIPv6( self, **kwargs ):
"""
Build an IPv6 frame
diff --git a/TestON/drivers/common/cli/networkdriver.py b/TestON/drivers/common/cli/networkdriver.py
index 78f6464..6d46c1e 100755
--- a/TestON/drivers/common/cli/networkdriver.py
+++ b/TestON/drivers/common/cli/networkdriver.py
@@ -538,6 +538,7 @@
hostPair[ 0 ].addRoutes()
hostPair[ 0 ].buildEther( src=srcMac, dst=dstMac )
hostPair[ 0 ].buildIP( src=srcIPs[0], dst=dstIPs[0] )
+ hostPair[ 0 ].buildVLAN( vlan=[102, 103] )
hostPair[ 0 ].buildICMP( )
hostPair[ 0 ].sendPacket( iface=srcIface )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.py
index dfd9dc0..dc2fca0 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.py
@@ -193,6 +193,7 @@
topology='2x4',
onosNodes=3,
description="Bridging test between two untagged hosts on vlan-untagged port" )
+
def CASE9( self, main ):
"""
Tests connectivity between two untagged hosts
@@ -212,7 +213,7 @@
except ( NameError, AttributeError ):
main.funcs = SRBridgingTest()
main.funcs.runTest( main,
- test_idx=7,
+ test_idx=9,
topology='2x2 dual-linked',
onosNodes=3,
description="Bridging test between two untagged hosts on vlan-untagged port" )
@@ -417,6 +418,31 @@
description="Bridging test between two tagged hosts",
vlan=[ 10, 10, 20, 20 ] )
+ def CASE19( self, main ):
+ """
+ Tests connectivity between two tagged hosts
+ (Ports are configured as vlan-tagged)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=19,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two tagged hosts"
+ vlan=[ 10, 10, 20, 20 ] )
+
def CASE21( self, main ):
"""
Tests connectivity between two untagged hosts
@@ -609,6 +635,30 @@
onosNodes=3,
description="Bridging test between two untagged hosts on vlan-native port" )
+ def CASE29( self, main ):
+ """
+ Tests connectivity between two untagged hosts
+ (Ports are configured as vlan-native with vlan-tagged)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=29,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two untagged hosts on vlan-native port" )
+
def CASE31( self, main ):
"""
Tests connectivity between two untagged hosts
@@ -817,6 +867,31 @@
description="Bridging test between two untagged hosts, "
"one on vlan-untagged port and the other on vlan-native port" )
+ def CASE39( self, main ):
+ """
+ Tests connectivity between two untagged hosts
+ (Ports are configured as vlan-native and vlan-tagged, another with vlan-untagged)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=39,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two untagged hosts, "
+ "one on vlan-untagged port and the other on vlan-native port" )
+
def CASE41( self, main ):
"""
Tests connectivity between untagged host and tagged host
@@ -1025,6 +1100,32 @@
description="Bridging test between untagged host and tagged host",
vlan=[ 0, 10, 0, 20 ] )
+ def CASE49( self, main ):
+ """
+ Tests connectivity between untagged host and tagged host
+ (Ports are configured as vlan-untagged and
+ vlan-tagged with same vlan-id, respectively)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=49,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two untagged hostand tagged host",
+ vlan=[ 102, 103 ] )
+
def CASE51( self, main ):
"""
Tests connectivity between two untagged hosts with different vlan id
@@ -1217,6 +1318,30 @@
onosNodes=3,
description="Bridging test between two untagged hosts with different vlan id" )
+ def CASE59( self, main ):
+ """
+ Tests connectivity between two untagged hosts with different vlan id
+ (Ports are configured as vlan-untagged 10 and 20, respectively)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=59,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two untagged hosts with different vlan-id" )
+
def CASE61( self, main ):
"""
Tests connectivity between two tagged hosts with different vlan id
@@ -1417,6 +1542,31 @@
description="Bridging test between two tagged hosts with different vlan id",
vlan=[ 10, 20, 30, 40 ] )
+ def CASE69( self, main ):
+ """
+ Tests connectivity between two tagged hosts with different vlan id
+ (Ports are configured as vlan-tagged 10 and 20, respectively)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=69,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between two tagged hosts with different vlan id",
+ vlan=[ 10, 20, 30, 40 ] )
+
def CASE71( self, main ):
"""
Tests connectivity between untagged and tagged hosts with different vlan id
@@ -1616,3 +1766,28 @@
onosNodes=3,
description="Bridging test between untagged and tagged hosts with different vlan id",
vlan=[ 0, 20, 0, 40 ] )
+
+ def CASE79( self, main ):
+ """
+ Tests connectivity between untagged and tagged hosts with different vlan id
+ (Ports are configured as vlan-untagged 10 and vlan-tagged 20, respectively)
+
+ Sets up 3 ONOS instances
+ Start 2x2 leaf-spine topology
+ Pingall
+ """
+ try:
+ from tests.USECASE.SegmentRouting.SRBridging.dependencies.SRBridgingTest import SRBridgingTest
+ except ImportError:
+ main.log.error( "SRBridgingTest not found. Exiting the test" )
+ main.cleanAndExit()
+ try:
+ main.funcs
+ except ( NameError, AttributeError ):
+ main.funcs = SRBridgingTest()
+ main.funcs.runTest( main,
+ test_idx=79,
+ topology='2x2 dual-linked',
+ onosNodes=3,
+ description="Bridging test between untagged and tagged hosts with different vlan idt",
+ vlan=[ 0, 20, 0, 40 ] )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
index 6ab0e2d..bfb61b7 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
@@ -16,8 +16,8 @@
<karaf_password>rocks</karaf_password>
<node_username>sdn</node_username>
<node_password>rocks</node_password>
- <karafPrompt_username></karafPrompt_username>
- <karafPrompt_password></karafPrompt_password>
+ <karafPrompt_username>karaf</karafPrompt_username>
+ <karafPrompt_password>karaf</karafPrompt_password>
<web_user></web_user>
<web_pass></web_pass>
<rest_port></rest_port>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical
index 74b8689..9f7e105 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.2x2.physical
@@ -15,6 +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>
+ <karafPrompt_username>karaf</karafPrompt_username>
+ <karafPrompt_password>karaf</karafPrompt_password>
<web_user>karaf</web_user>
<web_pass>karaf</web_pass>
<rest_port></rest_port>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
index 1ffa9c2..4e5e5fb 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/SRBridgingTest.py
@@ -55,19 +55,20 @@
if self.topo[ topology ][ 'dual-homed' ]:
links += ( leaves - 1 ) * 2
- main.cfgName = 'CASE%01d%01d' % ( test_idx / 10, ( ( test_idx - 1 ) % 10 ) % 4 + 1 )
+ main.cfgName = 'CASE%01d%01d' % ( test_idx / 10, test_idx % 10 )
+ print (main.cfgName, "Testcase : CASE 09")
main.Cluster.setRunningNode( onosNodes )
run.installOnos( main, skipPackage=skipPackage, cliSleep=5 )
- if main.useBmv2:
- switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', '' )
- if switchPrefix is None or "None":
- switchPrefix = ''
- # Translate configuration file from OVS-OFDPA to BMv2 driver
- translator.bmv2ToOfdpa( main ) # Try to cleanup if switching between switch types
- translator.ofdpaToBmv2( main, switchPrefix=switchPrefix )
- else:
- translator.bmv2ToOfdpa( main )
if not main.persistentSetup:
+ if main.useBmv2:
+ switchPrefix = main.params[ 'DEPENDENCY' ].get( 'switchPrefix', '' )
+ if switchPrefix is None or "None":
+ switchPrefix = ''
+ # Translate configuration file from OVS-OFDPA to BMv2 driver
+ translator.bmv2ToOfdpa( main ) # Try to cleanup if switching between switch types
+ translator.ofdpaToBmv2( main, switchPrefix=switchPrefix )
+ else:
+ translator.bmv2ToOfdpa( main )
suf = main.params.get( 'jsonFileSuffix', None)
if suf:
run.loadJson( main, suffix=suf )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE05.chart
similarity index 98%
rename from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
rename to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE05.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE05.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE06.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE06.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE06.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE07.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE07.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE07.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE08.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE08.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE08.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE15.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE15.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE15.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE16.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE16.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE16.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE17.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE17.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE17.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE18.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE18.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE18.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE19.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE25.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE25.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE25.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE26.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE26.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE26.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE27.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE27.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE27.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE28.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE28.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE28.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE29.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE29.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE29.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE35.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE35.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE35.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE36.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE36.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE36.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE37.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE37.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE37.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE38.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE38.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE38.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE39.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE39.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE39.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE45.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE45.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE45.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE46.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE46.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE46.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE47.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE47.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE47.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE48.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE48.chart
new file mode 100644
index 0000000..38f0a1b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE48.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "True",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "True",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE49.chart
similarity index 98%
copy from TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
copy to TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE49.chart
index 4438f56..f1fe795 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE01.chart
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE49.chart
@@ -1,4 +1,4 @@
{
"leaf1": {"expect": "True",
"hosts":["h1", "h2"]}
-}
\ No newline at end of file
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE55.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE55.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE55.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE56.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE56.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE56.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE57.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE57.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE57.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE58.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE58.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE58.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE59.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE59.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE59.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE65.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE65.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE65.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE66.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE66.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE66.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE67.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE67.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE67.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE68.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE68.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE68.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE69.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE69.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE69.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE75.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE75.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE75.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE76.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE76.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE76.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE77.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE77.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE77.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE78.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE78.chart
new file mode 100644
index 0000000..8cc036a
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE78.chart
@@ -0,0 +1,6 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]},
+ "leaf2": {"expect": "False",
+ "hosts":["h3", "h4"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE79.chart b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE79.chart
new file mode 100644
index 0000000..7643003
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/chart/CASE79.chart
@@ -0,0 +1,4 @@
+{
+ "leaf1": {"expect": "False",
+ "hosts":["h1", "h2"]}
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg
new file mode 100644
index 0000000..3300a4b
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE09.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-untagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "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
new file mode 100644
index 0000000..352ba54
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE19.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-tagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "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
new file mode 100644
index 0000000..9f97e82
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE29.cfg
@@ -0,0 +1,24 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-native":103
+ "vlan-tagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-native":103
+ "vlan-untagged":102
+ }
+ ]
+ }
+ }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE39.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE39.cfg
new file mode 100644
index 0000000..6948335
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE39.cfg
@@ -0,0 +1,25 @@
+"ports":{
+ "device:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-native":103,
+ "vlan-tagged":[
+ 102
+ ]
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-untagged":103
+ }
+ ]
+ }
+ }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE49.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE49.cfg
new file mode 100644
index 0000000..89ceb77
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE49.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-untagged":102
+ }
+ ]
+ },
+ "decive:leaf1/56":
+{ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-tagged":103
+ }
+ ]
+ }
+ }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE59.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE59.cfg
new file mode 100644
index 0000000..8c462ce
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE59.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-untagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-untagged":103
+ }
+ ]
+ }
+ }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE69.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE69.cfg
new file mode 100644
index 0000000..352ba54
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE69.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-tagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-tagged":103
+ }
+ ]
+ }
+ }
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE79.cfg b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE79.cfg
new file mode 100644
index 0000000..b3b04f2
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/dependencies/netcfg/CASE79.cfg
@@ -0,0 +1,22 @@
+"ports":{
+ "decive:leaf1/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.1/24"
+ ],
+ "vlan-untagged":102
+ }
+ ]
+ },
+ "device:leaf2/56":{
+ "interfaces":[
+ {
+ "ips":[
+ "192.168.103.2/24"
+ ],
+ "vlan-tagged":103
+ }
+ ]
+ }
+ }