Merge "ONOS-2504 Subnet Post/update/delete"
diff --git a/TestON/config/teston.cfg b/TestON/config/teston.cfg
index c7442f6..b255f45 100644
--- a/TestON/config/teston.cfg
+++ b/TestON/config/teston.cfg
@@ -11,9 +11,5 @@
<class>Logger</class>
</logger>
- <responseparser>
- <file>core/jsonparser.py</file>
- <class>JsonParser</class>
- </responseparser>
</config>
diff --git a/TestON/core/dicttoobject.py b/TestON/core/dicttoobject.py
deleted file mode 100644
index 13c2aa6..0000000
--- a/TestON/core/dicttoobject.py
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env python
-
-class DictToObject( dict ):
- def __init__( self, data = None ):
- super( DictToObject, self ).__init__()
- if data:
- self.__update( data, {} )
-
- def __update( self, data, did ):
- dataid = id(data)
- did[ dataid ] = self
-
- for k in data:
- dkid = id(data[k])
- if did.has_key(dkid):
- self[k] = did[dkid]
- elif isinstance( data[k], DictToObject ):
- self[k] = data[k]
- elif isinstance( data[k], dict ):
- obj = DictToObject()
- obj.__update( data[k], did )
- self[k] = obj
- obj = None
- else:
- self[k] = data[k]
-
- def __getattr__( self, key ):
- return self.get( key, None )
-
- def __setattr__( self, key, value ):
- if isinstance(value,dict):
- self[key] = DictToObject( value )
- else:
- self[key] = value
-
- def update( self, *args ):
- for obj in args:
- for k in obj:
- if isinstance(obj[k],dict):
- self[k] = DictToObject( obj[k] )
- else:
- self[k] = obj[k]
- return self
-
- def merge( self, *args ):
- for obj in args:
- for k in obj:
- if self.has_key(k):
- if isinstance(self[k],list) and isinstance(obj[k],list):
- self[k] += obj[k]
- elif isinstance(self[k],list):
- self[k].append( obj[k] )
- elif isinstance(obj[k],list):
- self[k] = [self[k]] + obj[k]
- elif isinstance(self[k],DictToObject) and isinstance(obj[k],Object):
- self[k].merge( obj[k] )
- elif isinstance(self[k],DictToObject) and isinstance(obj[k],dict):
- self[k].merge( obj[k] )
- else:
- self[k] = [ self[k], obj[k] ]
- else:
- if isinstance(obj[k],dict):
- self[k] = DictToObject( obj[k] )
- else:
- self[k] = obj[k]
- return self
-
diff --git a/TestON/core/iniparser.py b/TestON/core/iniparser.py
deleted file mode 100644
index c416b4f..0000000
--- a/TestON/core/iniparser.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#/usr/bin/env python
-'''
-Created on 07-Jan-2013
-
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
- TestON is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- TestON is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-
-'''
-
-import re
-from configobj import ConfigObj
-class iniparser:
- '''
- Manages authoring, parsing and execution of the test. Sub components are
- Test-Topology parser
- Module that parses the test from plain English and topology
- from a specification file and prepares for execution.
- Test sequencer
- Module that executes the tests case by case,
- step by step adding ability for step by step pause and debug later.
- Object loader
- Module that connects and loads all the component connection objects
- for access in the test
- '''
- def __init__(self) :
- self.default = ''
-
- def parse(self,fileName):
- '''
- This will parse the params or topo or cfg file and return content in the file as Dictionary
- '''
- self.fileName = fileName
- matchFileName = re.match(r'(.*)\.(params|topo)',self.fileName,re.M|re.I)
- if matchFileName:
- try :
- parsedInfo = ConfigObj(self.fileName)
- return parsedInfo
- except Exception:
- print "There is no such file to parse "+fileName
- else:
- return 0
-
- def parseParams(self,paramsPath):
- '''
- It will take the params file path and will return the params dictionary
- '''
-
- paramsPath = re.sub("\.","/",paramsPath)
- paramsPath = re.sub("tests|examples","",paramsPath)
- #print main.tests_path+"/"+paramsPath+".params"
- params = self.parse(main.tests_path+paramsPath+".params")
- paramsAsString = str(params)
- return eval(paramsAsString)
-
- def parseTopology(self,topologyPath):
- '''
- It will take topology file path and will return topology dictionary
- '''
- topologyPath = re.sub("\.","/",topologyPath)
- topologyPath = re.sub("tests|examples","",topologyPath)
- topology = self.parse(main.tests_path+"/"+topologyPath+".topo")
- topoAsString = str(topology)
- return eval(topoAsString)
-
diff --git a/TestON/core/jsonparser.py b/TestON/core/jsonparser.py
deleted file mode 100644
index c33a9b0..0000000
--- a/TestON/core/jsonparser.py
+++ /dev/null
@@ -1,55 +0,0 @@
-#/usr/bin/env python
-'''
-Created on 07-Jan-2013
-
-@author: Raghav Kashyap(raghavkashyap@paxterrasolutions.com)
-
- TestON is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- TestON is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
-
- You should have received a copy of the GNU General Public License
- along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-
-'''
-
-import json
-class JsonParser:
- '''
- Module that parses the response Json to Dictionary and Vice versa.
- '''
- def __init__(self) :
- self.default = ''
-
- def response_parse(self,json_response):
- '''
- This will parse the json formatted string and return content as Dictionary
- '''
- response_dict = {}
- try :
- response_dict = json.loads(json_response)
- except Exception:
- main.log.error("Json Parser is unable to parse the string")
- return response_dict
-
- '''
-
- def dict_json(self,response_dict):
-
- # This will parse the Python Dictionary and return content as Json string.
-
- json_response = {}
- try :
- json_response = json.dumps(response_dict)
- except Exception:
- main.log.error("Json Parser is unable to parse the string")
- return json_response
- '''
diff --git a/TestON/core/xmlparser.py b/TestON/core/xmlparser.py
index fea0ce9..e2cfb1d 100644
--- a/TestON/core/xmlparser.py
+++ b/TestON/core/xmlparser.py
@@ -39,10 +39,10 @@
try :
parsedInfo = xmldict.xml_to_dict(xml)
return parsedInfo
- except Exception:
- print "There is no such file to parse " + fileName
+ except Exception as e:
+ print "Error parsing file " + fileName + ": " + e.message
else :
- print "file name is not correct"
+ print "File name is not correct"
def parseParams(self,paramsPath):
'''
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 89a2611..a3ddc2a 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -427,30 +427,33 @@
# List of hosts to ping other than itself
pingList = hostList[ :listIndex ] + \
hostList[ ( listIndex + 1 ): ]
-
for temp in pingList:
# Current host pings all other hosts specified
pingCmd = str( host ) + cmd + str( temp )
self.handle.sendline( pingCmd )
- i = self.handle.expect( [ pingCmd, pexpect.TIMEOUT ] )
- j = self.handle.expect( [ "mininet>", pexpect.TIMEOUT ] )
+ self.handle.expect( "mininet>" )
response = self.handle.before
if re.search( ',\s0\%\spacket\sloss', response ):
main.log.info( str( host ) + " -> " + str( temp ) )
else:
- main.log.info(
+ main.log.warn(
str( host ) + " -> X (" + str( temp ) + ") "
" Destination Unreachable" )
# One of the host to host pair is unreachable
isReachable = main.FALSE
-
return isReachable
-
+ except pexpect.TIMEOUT:
+ main.log.exception( self.name + ": TIMEOUT exception" )
+ return main.FALSE
except pexpect.EOF:
main.log.error( self.name + ": EOF exception found" )
main.log.error( self.name + ": " + self.handle.before )
main.cleanup()
main.exit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
def pingIpv6Hosts(self, hostList, prefix='1000::'):
"""
@@ -474,25 +477,32 @@
for temp in pingList:
# Current host pings all other hosts specified
pingCmd = str( host ) + cmd + prefix + str( temp[1:] )
- i = self.handle.expect( [ pingCmd, pexpect.TIMEOUT ] )
- j = self.handle.expect( [ "mininet>", pexpect.TIMEOUT ] )
+ self.handle.sendline( pingCmd )
+ self.handle.expect( "mininet>" )
response = self.handle.before
if re.search( ',\s0\%\spacket\sloss', response ):
- main.log.info( str( host ) + " -> " + str( temp ) )
+ main.log.info( str( host ) + " -> " + prefix + str( temp[1:] ) )
else:
main.log.info(
- str( host ) + " -> X (" + str( temp ) + ") "
+ str( host ) + " -> X (" + prefix + str( temp[1:] ) + ") "
" Destination Unreachable" )
main.log.error( "Response from Mininet: " + str( response ) )
# One of the host to host pair is unreachable
isReachable = main.FALSE
return isReachable
+ except pexpect.TIMEOUT:
+ main.log.exception( self.name + ": TIMEOUT exception" )
+ return main.FALSE
except pexpect.EOF:
main.log.error( self.name + ": EOF exception found" )
main.log.error( self.name + ": " + self.handle.before )
main.cleanup()
main.exit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
def pingHost( self, **pingParams ):
"""
@@ -1699,7 +1709,7 @@
response = main.FALSE
return response
- def arping( self, host="", ip="10.128.20.211", ethDevice="" ):
+ def arping( self, srcHost="", dstHost="10.128.20.211", ethDevice="" ):
"""
Description:
Sends arp message from mininet host for hosts discovery
@@ -1711,15 +1721,24 @@
"""
if ethDevice:
ethDevice = '-I ' + ethDevice + ' '
- cmd = " py " + host + ".cmd(\"arping -c 1 " + ethDevice + ip + "\")"
+ cmd = srcHost + " arping -c1 " + ethDevice + dstHost
try:
- main.log.warn( "Sending: " + cmd )
+ main.log.info( "Sending: " + cmd )
self.handle.sendline( cmd )
- response = self.handle.before
- self.handle.sendline( "" )
- self.handle.expect( "mininet>" )
- return main.TRUE
-
+ i = self.handle.expect( [ "mininet>", "arping: " ] )
+ if i == 0:
+ return main.TRUE
+ elif i == 1:
+ response = self.handle.before + self.handle.after
+ self.handle.expect( "mininet>" )
+ response += self.handle.before + self.handle.after
+ main.log.warn( "Error sending arping, output was: " +
+ response )
+ return main.FALSE
+ except pexpect.TIMEOUT:
+ main.log.error( self.name + ": TIMEOUT exception found" )
+ main.log.warn( self.handle.before )
+ return main.FALSE
except pexpect.EOF:
main.log.error( self.name + ": EOF exception found" )
main.log.error( self.name + ": " + self.handle.before )
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index e8e5d64..b33a5a9 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -1761,6 +1761,32 @@
main.cleanup()
main.exit()
+ def ipv4RouteNumber( self ):
+ """
+ NOTE: This method should be used after installing application:
+ onos-app-sdnip
+ Description:
+ Obtain the total IPv4 routes number in the system
+ """
+ try:
+ cmdStr = "routes -s -j"
+ handle = self.sendline( cmdStr )
+ jsonResult = json.loads( handle )
+ return jsonResult['totalRoutes4']
+
+ except TypeError:
+ main.log.exception( self.name + ": Object not as expected" )
+ return None
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ main.cleanup()
+ main.exit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
+
def intents( self, jsonFormat=True ):
"""
Optional:
@@ -1787,6 +1813,31 @@
main.cleanup()
main.exit()
+ def m2SIntentInstalledNumber( self ):
+ """
+ Description:
+ Obtain the number of multiple point to single point intents
+ installed
+ """
+ try:
+ cmdStr = "intents -s -j"
+ handle = self.sendline( cmdStr )
+ jsonResult = json.loads( handle )
+ return jsonResult['multiPointToSinglePoint']['installed']
+
+ except TypeError:
+ main.log.exception( self.name + ": Object not as expected" )
+ return None
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ main.cleanup()
+ main.exit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanup()
+ main.exit()
+
def getIntentState(self, intentsId, intentsJson=None):
"""
Check intent state.
diff --git a/TestON/install.sh b/TestON/install.sh
index 73a3147..fbbd5a5 100755
--- a/TestON/install.sh
+++ b/TestON/install.sh
@@ -63,10 +63,10 @@
echo "Installing TestON dependencies"
if [ "$DIST" = "Fedora" ]; then
# Fedora may have vlan enabled by default. Still need to confirm and update later
- $install python-pip build-essential python-dev pep8
+ $install python-pip build-essential python-dev pep8 arping
$pipinstall pexpect==3.2 configobj==4.7.2 numpy
else
- $install python-pip build-essential python-dev pep8 vlan
+ $install python-pip build-essential python-dev pep8 vlan arping
$pipinstall pexpect==3.2 configobj==4.7.2 numpy
fi
diff --git a/TestON/tests/CHOtest/CHOtest.params b/TestON/tests/CHOtest/CHOtest.params
index fe54e05..875a727 100644
--- a/TestON/tests/CHOtest/CHOtest.params
+++ b/TestON/tests/CHOtest/CHOtest.params
@@ -1,18 +1,25 @@
<PARAMS>
- # 1,20,3,[40,5,60,70,80,10,90,71,81,10,93,10]*50,21,3,[41,5,61,72,82,10,91,73,83,10,94,10]*50,22,3,[42,5,62,10,92,10,95,10,98,10]*50
+ # 1,20,3,[40,5,140,60,160,70,170,80,180,10,5,90,190,71,171,81,181,10,5]*50,21,3,[41,5,141,61,161,72,172,82,182,10,5,91,191,73,173,83,183,10,5]*50,22,3,[42,5,142,62,162,73,174,84,184,10,5,92,192,75,175,85,185,10,5]*50
# 1. Starts ONOS cluster with 5 nodes
# 20. Starts Att Topology
# 21. Starts Chordal Topology
# 22. Starts Spine-Leaf Topology
# 3. Checks the consistency of ONOS and Mininet's topologies
# 4X. Reactive forwarding | host discovery
+ # 14X. IPv6 Reative forwarding | host discovery
# 5. ONOS Topology verification
# 6X. host intents
+ # 16X. IPv6 ping across host intents
# 7X. Bring random links down( Unique for each topology)
+ # 17X. IPv6 ping after link down
# 8X. Bring random links back up
- # 9X Point,Multi-single,Single-Multi Intents
+ # 18X. IPv6 ping after link backs up
+ # 9X. Point,Multi-single,Single-Multi Intents
+ # 19X. IPv6 ping across Point,Multi-single,Single-Multi Intents
- <testcases>1,20,3,[40,5,60,70,80,10,90,71,81,10]*50,21,3,[41,5,61,72,82,10,91,73,83,10]*50,22,3,[42,5,62,74,84,10,92,10]*50</testcases>
+<testcases>
+1,20,3,[40,5,140,60,160,70,170,80,180,10,5,90,190,71,171,81,181,10,5]*50,21,3,[41,5,141,61,161,72,172,82,182,10,5,91,191,73,173,83,183,10,5]*50,22,3,[42,5,142,62,162,74,174,84,184,10,5,92,192,75,175,85,185,10,5]*50
+</testcases>
<GIT>
#autoPull 'on' or 'off'
@@ -26,7 +33,7 @@
</CTRL>
<TOPO1>
- <topo>topoAtt.py</topo>
+ <topo>topoAttIpv6.py</topo>
<numSwitches>25</numSwitches>
<numHosts>25</numHosts>
<numLinks>114</numLinks>
@@ -34,7 +41,7 @@
</TOPO1>
<TOPO2>
- <topo>topoChordal.py</topo>
+ <topo>topoChordalIpv6.py</topo>
<numSwitches>25</numSwitches>
<numHosts>25</numHosts>
<numLinks>600</numLinks>
@@ -42,7 +49,7 @@
</TOPO2>
<TOPO3>
- <topo>topoSpine.py</topo>
+ <topo>topoSpineIpv6.py</topo>
<numSwitches>78</numSwitches>
<numHosts>68</numHosts>
<numLinks>284</numLinks>
diff --git a/TestON/tests/CHOtest/CHOtest.py b/TestON/tests/CHOtest/CHOtest.py
index 6e58b68..8e9b609 100644
--- a/TestON/tests/CHOtest/CHOtest.py
+++ b/TestON/tests/CHOtest/CHOtest.py
@@ -143,8 +143,16 @@
else:
main.log.info("Successful CLI startup")
startCliResult = main.TRUE
- case1Result = installResult and uninstallResult and statusResult and startCliResult
- time.sleep(30)
+
+ main.step( "Set IPv6 cfg parameters for Neighbor Discovery" )
+ cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.proxyarp.ProxyArp", "ipv6NeighborDiscovery", "true" )
+ cfgResult2 = main.CLIs[0].setCfg( "org.onosproject.provider.host.impl.HostLocationProvider", "ipv6NeighborDiscovery", "true" )
+ cfgResult = cfgResult1 and cfgResult2
+ utilities.assert_equals( expect=main.TRUE, actual=cfgResult,
+ onpass="ipv6NeighborDiscovery cfg is set to true",
+ onfail="Failed to cfg set ipv6NeighborDiscovery" )
+
+ case1Result = installResult and uninstallResult and statusResult and startCliResult and cfgResult
main.log.info("Time for connecting to CLI: %2f seconds" %(time2-time1))
utilities.assert_equals( expect=main.TRUE, actual=case1Result,
onpass="Set up test environment PASS",
@@ -510,38 +518,14 @@
" seconds" )
if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode successful" )
else:
- main.log.report( "Pingall Test in Reactive mode failed" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode failed" )
- main.step( "Disable Reactive forwarding" )
-
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
-
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- # Waiting for reative flows to be cleared.
- time.sleep( 30 )
- case40Result = installResult and uninstallResult and ping_result
+ case40Result = appCheck and ping_result
utilities.assert_equals( expect=main.TRUE, actual=case40Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
+ onpass="Reactive Mode IPv4 Pingall test PASS",
+ onfail="Reactive Mode IPv4 Pingall test FAIL" )
def CASE41( self, main ):
"""
@@ -590,38 +574,14 @@
" seconds" )
if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode successful" )
else:
- main.log.report( "Pingall Test in Reactive mode failed" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode failed" )
- main.step( "Disable Reactive forwarding" )
-
- main.log.info( "Uninstall reactive forwarding app" )
- appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
- pool = []
- for cli in main.CLIs:
- t = main.Thread( target=cli.appToIDCheck,
- name="appToIDCheck-" + str( i ),
- args=[] )
- pool.append( t )
- t.start()
-
- for t in pool:
- t.join()
- appCheck = appCheck and t.result
- utilities.assert_equals( expect=main.TRUE, actual=appCheck,
- onpass="App Ids seem to be correct",
- onfail="Something is wrong with app Ids" )
- if appCheck != main.TRUE:
- main.log.warn( main.CLIs[0].apps() )
- main.log.warn( main.CLIs[0].appIDs() )
-
- # Waiting for reative flows to be cleared.
- time.sleep( 30 )
- case41Result = installResult and uninstallResult and ping_result
+ case41Result = appCheck and ping_result
utilities.assert_equals( expect=main.TRUE, actual=case41Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
+ onpass="Reactive Mode IPv4 Pingall test PASS",
+ onfail="Reactive Mode IPv4 Pingall test FAIL" )
def CASE42( self, main ):
"""
@@ -670,13 +630,55 @@
" seconds" )
if ping_result == main.TRUE:
- main.log.report( "Pingall Test in Reactive mode successful" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode successful" )
else:
- main.log.report( "Pingall Test in Reactive mode failed" )
+ main.log.report( "IPv4 Pingall Test in Reactive mode failed" )
+
+ case42Result = appCheck and ping_result
+ utilities.assert_equals( expect=main.TRUE, actual=case42Result,
+ onpass="Reactive Mode IPv4 Pingall test PASS",
+ onfail="Reactive Mode IPv4 Pingall test FAIL" )
+
+ def CASE140( self, main ):
+ """
+ Verify IPv6 Reactive forwarding (Att Topology)
+ """
+ import re
+ import copy
+ import time
+ main.log.report( "Verify IPv6 Reactive forwarding (Att Topology)" )
+ main.log.report( "______________________________________________" )
+ main.case( "Enable IPv6 Reactive forwarding and Verify ping all" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+
+ main.step( "Set IPv6 cfg parameters for Reactive forwarding" )
+ cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true" )
+ cfgResult2 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true" )
+ cfgResult = cfgResult1 and cfgResult2
+ utilities.assert_equals( expect=main.TRUE, actual=cfgResult,
+ onpass="Reactive mode ipv6Fowarding cfg is set to true",
+ onfail="Failed to cfg set Reactive mode ipv6Fowarding" )
+
+ main.step( "Verify IPv6 Pingall" )
+ ping_result = main.FALSE
+ time1 = time.time()
+ ping_result = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+
+ if ping_result == main.TRUE:
+ main.log.report( "IPv6 Pingall Test in Reactive mode successful" )
+ else:
+ main.log.report( "IPv6 Pingall Test in Reactive mode failed" )
main.step( "Disable Reactive forwarding" )
main.log.info( "Uninstall reactive forwarding app" )
+ appCheck = main.TRUE
appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
pool = []
for cli in main.CLIs:
@@ -698,10 +700,142 @@
# Waiting for reative flows to be cleared.
time.sleep( 30 )
- case42Result = installResult and uninstallResult and ping_result
- utilities.assert_equals( expect=main.TRUE, actual=case42Result,
- onpass="Reactive Mode Pingall test PASS",
- onfail="Reactive Mode Pingall test FAIL" )
+ case140Result = appCheck and cfgResult and ping_result
+ utilities.assert_equals( expect=main.TRUE, actual=case140Result,
+ onpass="Reactive Mode IPv6 Pingall test PASS",
+ onfail="Reactive Mode IPv6 Pingall test FAIL" )
+
+ def CASE141( self, main ):
+ """
+ Verify IPv6 Reactive forwarding (Chordal Topology)
+ """
+ import re
+ import copy
+ import time
+ main.log.report( "Verify IPv6 Reactive forwarding (Chordal Topology)" )
+ main.log.report( "______________________________________________" )
+ main.case( "Enable IPv6 Reactive forwarding and Verify ping all" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+
+ main.step( "Set IPv6 cfg parameters for Reactive forwarding" )
+ cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true" )
+ cfgResult2 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true" )
+ cfgResult = cfgResult1 and cfgResult2
+ utilities.assert_equals( expect=main.TRUE, actual=cfgResult,
+ onpass="Reactive mode ipv6Fowarding cfg is set to true",
+ onfail="Failed to cfg set Reactive mode ipv6Fowarding" )
+
+ main.step( "Verify IPv6 Pingall" )
+ ping_result = main.FALSE
+ time1 = time.time()
+ ping_result = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+
+ if ping_result == main.TRUE:
+ main.log.report( "IPv6 Pingall Test in Reactive mode successful" )
+ else:
+ main.log.report( "IPv6 Pingall Test in Reactive mode failed" )
+
+ main.step( "Disable Reactive forwarding" )
+
+ main.log.info( "Uninstall reactive forwarding app" )
+ appCheck = main.TRUE
+ appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
+ pool = []
+ for cli in main.CLIs:
+ t = main.Thread( target=cli.appToIDCheck,
+ name="appToIDCheck-" + str( i ),
+ args=[] )
+ pool.append( t )
+ t.start()
+
+ for t in pool:
+ t.join()
+ appCheck = appCheck and t.result
+ utilities.assert_equals( expect=main.TRUE, actual=appCheck,
+ onpass="App Ids seem to be correct",
+ onfail="Something is wrong with app Ids" )
+ if appCheck != main.TRUE:
+ main.log.warn( main.CLIs[0].apps() )
+ main.log.warn( main.CLIs[0].appIDs() )
+
+ # Waiting for reative flows to be cleared.
+ time.sleep( 30 )
+ case140Result = appCheck and cfgResult and ping_result
+ utilities.assert_equals( expect=main.TRUE, actual=case140Result,
+ onpass="Reactive Mode IPv6 Pingall test PASS",
+ onfail="Reactive Mode IPv6 Pingall test FAIL" )
+
+ def CASE142( self, main ):
+ """
+ Verify IPv6 Reactive forwarding (Spine Topology)
+ """
+ import re
+ import copy
+ import time
+ main.log.report( "Verify IPv6 Reactive forwarding (Spine Topology)" )
+ main.log.report( "______________________________________________" )
+ main.case( "Enable IPv6 Reactive forwarding and Verify ping all" )
+ # Spine topology do not have hosts h1-h10
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ main.step( "Set IPv6 cfg parameters for Reactive forwarding" )
+ cfgResult1 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "ipv6Forwarding", "true" )
+ cfgResult2 = main.CLIs[0].setCfg( "org.onosproject.fwd.ReactiveForwarding", "matchIpv6Address", "true" )
+ cfgResult = cfgResult1 and cfgResult2
+ utilities.assert_equals( expect=main.TRUE, actual=cfgResult,
+ onpass="Reactive mode ipv6Fowarding cfg is set to true",
+ onfail="Failed to cfg set Reactive mode ipv6Fowarding" )
+
+ main.step( "Verify IPv6 Pingall" )
+ ping_result = main.FALSE
+ time1 = time.time()
+ ping_result = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+
+ if ping_result == main.TRUE:
+ main.log.report( "IPv6 Pingall Test in Reactive mode successful" )
+ else:
+ main.log.report( "IPv6 Pingall Test in Reactive mode failed" )
+
+ main.step( "Disable Reactive forwarding" )
+
+ main.log.info( "Uninstall reactive forwarding app" )
+ appCheck = main.TRUE
+ appResults = appResults and main.CLIs[0].deactivateApp( "org.onosproject.fwd" )
+ pool = []
+ for cli in main.CLIs:
+ t = main.Thread( target=cli.appToIDCheck,
+ name="appToIDCheck-" + str( i ),
+ args=[] )
+ pool.append( t )
+ t.start()
+
+ for t in pool:
+ t.join()
+ appCheck = appCheck and t.result
+ utilities.assert_equals( expect=main.TRUE, actual=appCheck,
+ onpass="App Ids seem to be correct",
+ onfail="Something is wrong with app Ids" )
+ if appCheck != main.TRUE:
+ main.log.warn( main.CLIs[0].apps() )
+ main.log.warn( main.CLIs[0].appIDs() )
+
+ # Waiting for reative flows to be cleared.
+ time.sleep( 30 )
+ case142Result = appCheck and cfgResult and ping_result
+ utilities.assert_equals( expect=main.TRUE, actual=case142Result,
+ onpass="Reactive Mode IPv6 Pingall test PASS",
+ onfail="Reactive Mode IPv6 Pingall test FAIL" )
def CASE5( self, main ):
"""
@@ -995,6 +1129,99 @@
onpass="Install 2278 Host Intents and Ping All test PASS",
onfail="Install 2278 Host Intents and Ping All test FAIL" )
+ def CASE160( self ):
+ """
+ Verify IPv6 ping across 300 host intents (Att Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 300 host intents (Att Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 300 host intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case160Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case160Result,
+ onpass="IPv6 Ping across 300 host intents test PASS",
+ onfail="IPv6 Ping across 300 host intents test FAIL" )
+
+ def CASE161( self ):
+ """
+ Verify IPv6 ping across 600 host intents (Chordal Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 600 host intents (Chordal Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 600 host intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case161Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case161Result,
+ onpass="IPv6 Ping across 600 host intents test PASS",
+ onfail="IPv6 Ping across 600 host intents test FAIL" )
+
+ def CASE162( self ):
+ """
+ Verify IPv6 ping across 2278 host intents (Spine Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 2278 host intents (Spine Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 600 host intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case162Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case162Result,
+ onpass="IPv6 Ping across 600 host intents test PASS",
+ onfail="IPv6 Ping across 600 host intents test FAIL" )
+
def CASE70( self, main ):
"""
Randomly bring some core links down and verify ping all ( Host Intents-Att Topo)
@@ -1535,7 +1762,7 @@
main.log.report( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
main.log.report( "___________________________________________________________________________" )
-
+ main.log.case( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
linkIndex = range(4)
linkIndexS9 = random.sample(linkIndex,1)[0]
linkIndex.remove(linkIndexS9)
@@ -1639,6 +1866,502 @@
onpass="Link Up Test PASS",
onfail="Link Up Test FAIL" )
+ def CASE75( self, main ):
+ """
+ Randomly bring some core links down and verify ping all ( Point Intents-Spine Topo)
+ """
+ import random
+ main.randomLink1 = []
+ main.randomLink2 = []
+ main.randomLink3 = []
+ main.randomLink4 = []
+ link1End1 = main.params[ 'SPINECORELINKS' ][ 'linkS9' ]
+ link1End2top = main.params[ 'SPINECORELINKS' ][ 'linkS9top' ].split( ',' )
+ link1End2bot = main.params[ 'SPINECORELINKS' ][ 'linkS9bot' ].split( ',' )
+ link2End1 = main.params[ 'SPINECORELINKS' ][ 'linkS10' ]
+ link2End2top = main.params[ 'SPINECORELINKS' ][ 'linkS10top' ].split( ',' )
+ link2End2bot = main.params[ 'SPINECORELINKS' ][ 'linkS10bot' ].split( ',' )
+ link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
+ main.pingTimeout = 400
+
+ main.log.report( "Bring some core links down and verify ping all (Point Intents-Spine Topo)" )
+ main.log.report( "___________________________________________________________________________" )
+ main.case( "Bring some core links down and verify ping all (Point Intents-Spine Topo)" )
+ linkIndex = range(4)
+ linkIndexS9 = random.sample(linkIndex,1)[0]
+ linkIndex.remove(linkIndexS9)
+ linkIndexS10 = random.sample(linkIndex,1)[0]
+ main.randomLink1 = link1End2top[linkIndexS9]
+ main.randomLink2 = link2End2top[linkIndexS10]
+ main.randomLink3 = random.sample(link1End2bot,1)[0]
+ main.randomLink4 = random.sample(link2End2bot,1)[0]
+
+ # Work around for link state propagation delay. Added some sleep time.
+ # main.Mininet1.link( END1=link1End1, END2=main.randomLink1, OPTION="down" )
+ # main.Mininet1.link( END1=link2End1, END2=main.randomLink2, OPTION="down" )
+ main.Mininet1.link( END1=link1End1, END2=main.randomLink3, OPTION="down" )
+ time.sleep( link_sleep )
+ main.Mininet1.link( END1=link2End1, END2=main.randomLink4, OPTION="down" )
+ time.sleep( link_sleep )
+
+ topology_output = main.ONOScli1.topology()
+ linkDown = main.ONOSbench.checkStatus(
+ topology_output, main.numMNswitches, str(
+ int( main.numMNlinks ) - 8 ))
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=linkDown,
+ onpass="Link Down discovered properly",
+ onfail="Link down was not discovered in " +
+ str( link_sleep ) +
+ " seconds" )
+
+ main.step( "Verify Ping across all hosts" )
+ pingResultLinkDown = main.FALSE
+ time1 = time.time()
+ pingResultLinkDown = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkDown,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ caseResult75 = linkDown and pingResultLinkDown
+ utilities.assert_equals( expect=main.TRUE, actual=caseResult75,
+ onpass="Random Link cut Test PASS",
+ onfail="Random Link cut Test FAIL" )
+
+ def CASE85( self, main ):
+ """
+ Bring the core links up that are down and verify ping all ( Point Intents-Spine Topo )
+ """
+ import random
+ link1End1 = main.params[ 'SPINECORELINKS' ][ 'linkS9' ]
+ link2End1 = main.params[ 'SPINECORELINKS' ][ 'linkS10' ]
+ link_sleep = int( main.params[ 'timers' ][ 'LinkDiscovery' ] )
+ main.log.report(
+ "Bring the core links up that are down and verify ping all (Point Intents-Spine Topo" )
+ main.log.report(
+ "__________________________________________________________________" )
+ main.case(
+ "Point intents - Bring the core links up that are down and verify ping all" )
+
+ # Work around for link state propagation delay. Added some sleep time.
+ # main.Mininet1.link( END1=link1End1, END2=main.randomLink1, OPTION="up" )
+ # main.Mininet1.link( END1=link2End1, END2=main.randomLink2, OPTION="up" )
+ main.Mininet1.link( END1=link1End1, END2=main.randomLink3, OPTION="up" )
+ time.sleep( link_sleep )
+ main.Mininet1.link( END1=link2End1, END2=main.randomLink4, OPTION="up" )
+ time.sleep( link_sleep )
+
+ topology_output = main.ONOScli1.topology()
+ linkUp = main.ONOSbench.checkStatus(
+ topology_output,
+ main.numMNswitches,
+ str( main.numMNlinks ) )
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=linkUp,
+ onpass="Link up discovered properly",
+ onfail="Link up was not discovered in " +
+ str( link_sleep ) +
+ " seconds" )
+
+ main.step( "Verify Ping across all hosts" )
+ pingResultLinkUp = main.FALSE
+ time1 = time.time()
+ pingResultLinkUp = main.Mininet1.pingall(timeout=main.pingTimeout,shortCircuit=False,acceptableFailed=5)
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResultLinkUp,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ caseResult85 = linkUp and pingResultLinkUp
+ utilities.assert_equals( expect=main.TRUE, actual=caseResult85,
+ onpass="Link Up Test PASS",
+ onfail="Link Up Test FAIL" )
+
+ def CASE170( self ):
+ """
+ IPv6 ping all with some core links down( Host Intents-Att Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Host Intents-Att Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Host Intents-Att Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case170Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case170Result,
+ onpass="IPv6 Ping across 300 host intents test PASS",
+ onfail="IPv6 Ping across 300 host intents test FAIL" )
+
+ def CASE180( self ):
+ """
+ IPv6 ping all with after core links back up( Host Intents-Att Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Host Intents-Att Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Host Intents-Att Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case180Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case180Result,
+ onpass="IPv6 Ping across 300 host intents test PASS",
+ onfail="IPv6 Ping across 300 host intents test FAIL" )
+
+ def CASE171( self ):
+ """
+ IPv6 ping all with some core links down( Point Intents-Att Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Point Intents-Att Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Point Intents-Att Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case171Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case171Result,
+ onpass="IPv6 Ping across 600 point intents test PASS",
+ onfail="IPv6 Ping across 600 point intents test FAIL" )
+
+ def CASE181( self ):
+ """
+ IPv6 ping all with after core links back up( Point Intents-Att Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Point Intents-Att Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Point Intents-Att Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case181Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case181Result,
+ onpass="IPv6 Ping across 600 Point intents test PASS",
+ onfail="IPv6 Ping across 600 Point intents test FAIL" )
+
+ def CASE172( self ):
+ """
+ IPv6 ping all with some core links down( Host Intents-Chordal Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Host Intents-Chordal Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Host Intents-Chordal Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case172Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case172Result,
+ onpass="IPv6 Ping across 300 host intents test PASS",
+ onfail="IPv6 Ping across 300 host intents test FAIL" )
+
+ def CASE182( self ):
+ """
+ IPv6 ping all with after core links back up( Host Intents-Chordal Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Host Intents-Chordal Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Host Intents-Chordal Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case182Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case182Result,
+ onpass="IPv6 Ping across 300 host intents test PASS",
+ onfail="IPv6 Ping across 300 host intents test FAIL" )
+
+ def CASE173( self ):
+ """
+ IPv6 ping all with some core links down( Point Intents-Chordal Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Point Intents-Chordal Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Point Intents-Chordal Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case173Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case173Result,
+ onpass="IPv6 Ping across 600 point intents test PASS",
+ onfail="IPv6 Ping across 600 point intents test FAIL" )
+
+ def CASE183( self ):
+ """
+ IPv6 ping all with after core links back up( Point Intents-Chordal Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Point Intents-Chordal Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Point Intents-Chordal Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case183Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case183Result,
+ onpass="IPv6 Ping across 600 Point intents test PASS",
+ onfail="IPv6 Ping across 600 Point intents test FAIL" )
+
+ def CASE174( self ):
+ """
+ IPv6 ping all with some core links down( Host Intents-Spine Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Host Intents-Spine Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Host Intents-Spine Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case174Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case174Result,
+ onpass="IPv6 Ping across 2278 host intents test PASS",
+ onfail="IPv6 Ping across 2278 host intents test FAIL" )
+
+ def CASE184( self ):
+ """
+ IPv6 ping all with after core links back up( Host Intents-Spine Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Host Intents-Spine Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Host Intents-Spine Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case184Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case184Result,
+ onpass="IPv6 Ping across 2278 host intents test PASS",
+ onfail="IPv6 Ping across 2278 host intents test FAIL" )
+
+ def CASE175( self ):
+ """
+ IPv6 ping all with some core links down( Point Intents-Spine Topo)
+ """
+ main.log.report( "IPv6 ping all with some core links down( Point Intents-Spine Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with some core links down( Point Intents-Spine Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case175Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case175Result,
+ onpass="IPv6 Ping across 4556 point intents test PASS",
+ onfail="IPv6 Ping across 4556 point intents test FAIL" )
+
+ def CASE185( self ):
+ """
+ IPv6 ping all with after core links back up( Point Intents-Spine Topo)
+ """
+ main.log.report( "IPv6 ping all with after core links back up( Point Intents-Spine Topo )" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all with after core links back up( Point Intents-Spine Topo )" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case183Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case183Result,
+ onpass="IPv6 Ping across 4556 Point intents test PASS",
+ onfail="IPv6 Ping across 4556 Point intents test FAIL" )
+
def CASE90( self ):
"""
Install 600 point intents and verify ping all (Att Topology)
@@ -1662,7 +2385,7 @@
t = main.Thread( target=cli.addPointIntent,
threadID=main.threadID,
name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4",main.MACsDict.get(deviceCombos[i][0]),main.MACsDict.get(deviceCombos[i][1])])
+ args=[deviceCombos[i][0],deviceCombos[i][1],1,1,'',main.MACsDict.get(deviceCombos[i][0]),main.MACsDict.get(deviceCombos[i][1])])
pool.append(t)
t.start()
i = i + 1
@@ -1724,7 +2447,7 @@
t = main.Thread( target=cli.addPointIntent,
threadID=main.threadID,
name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4","",main.MACsDict.get(deviceCombos[i][1])])
+ args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"","",main.MACsDict.get(deviceCombos[i][1])])
pool.append(t)
#time.sleep(1)
t.start()
@@ -1790,7 +2513,7 @@
t = main.Thread( target=cli.addPointIntent,
threadID=main.threadID,
name="addPointIntent",
- args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"IPV4","",main.MACsDict.get(deviceCombos[i][1])])
+ args=[deviceCombos[i][0],deviceCombos[i][1],1,1,"","",main.MACsDict.get(deviceCombos[i][1])])
pool.append(t)
#time.sleep(1)
t.start()
@@ -1856,7 +2579,7 @@
t = main.Thread( target=cli.addMultipointToSinglepointIntent,
threadID=main.threadID,
name="addMultipointToSinglepointIntent",
- args =[ingressDeviceList,egressDevice,portIngressList,'1','IPV4','',main.MACsDict.get(egressDevice)])
+ args =[ingressDeviceList,egressDevice,portIngressList,'1','','',main.MACsDict.get(egressDevice)])
pool.append(t)
#time.sleep(1)
t.start()
@@ -1931,7 +2654,7 @@
t = main.Thread( target=cli.addMultipointToSinglepointIntent,
threadID=main.threadID,
name="addMultipointToSinglepointIntent",
- args =[ingressDeviceList,egressDevice,portIngressList,'1','IPV4','',main.MACsDict.get(egressDevice)])
+ args =[ingressDeviceList,egressDevice,portIngressList,'1','','',main.MACsDict.get(egressDevice)])
pool.append(t)
#time.sleep(1)
t.start()
@@ -1988,7 +2711,7 @@
t = main.Thread( target=cli.addSinglepointToMultipointIntent,
threadID=main.threadID,
name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',main.MACsDict.get(ingressDevice)])
+ args =[ingressDevice,egressDeviceList,'1',portEgressList,'',main.MACsDict.get(ingressDevice)])
pool.append(t)
#time.sleep(1)
t.start()
@@ -2043,7 +2766,7 @@
t = main.Thread( target=cli.addSinglepointToMultipointIntent,
threadID=main.threadID,
name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',main.MACsDict.get(ingressDevice),''])
+ args =[ingressDevice,egressDeviceList,'1',portEgressList,'',main.MACsDict.get(ingressDevice),''])
pool.append(t)
#time.sleep(1)
t.start()
@@ -2105,7 +2828,7 @@
t = main.Thread( target=cli.addSinglepointToMultipointIntent,
threadID=main.threadID,
name="addSinglepointToMultipointIntent",
- args =[ingressDevice,egressDeviceList,'1',portEgressList,'IPV4',MACsDictCopy.get(ingressDevice),''])
+ args =[ingressDevice,egressDeviceList,'1',portEgressList,'',MACsDictCopy.get(ingressDevice),''])
pool.append(t)
#time.sleep(1)
t.start()
@@ -2135,6 +2858,99 @@
onpass="Install 25 single to multi point Intents and Ping All test PASS",
onfail="Install 25 single to multi point Intents and Ping All test FAIL" )
+ def CASE190( self ):
+ """
+ Verify IPv6 ping across 600 Point intents (Att Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 600 Point intents (Att Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 600 Point intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case160Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case160Result,
+ onpass="IPv6 Ping across 600 Point intents test PASS",
+ onfail="IPv6 Ping across 600 Point intents test FAIL" )
+
+ def CASE191( self ):
+ """
+ Verify IPv6 ping across 600 Point intents (Chordal Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 600 Point intents (Chordal Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 600 Point intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 1)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case191Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case191Result,
+ onpass="IPv6 Ping across 600 Point intents test PASS",
+ onfail="IPv6 Ping across 600 Point intents test FAIL" )
+
+ def CASE192( self ):
+ """
+ Verify IPv6 ping across 4556 Point intents (Spine Topology)
+ """
+ main.log.report( "Verify IPv6 ping across 4556 Point intents (Spine Topology)" )
+ main.log.report( "_________________________________________________" )
+ import itertools
+ import time
+ main.case( "IPv6 ping all 600 Point intents" )
+ main.step( "Verify IPv6 Ping across all hosts" )
+ hostList = [ ('h'+ str(x + 11)) for x in range (main.numMNhosts) ]
+ pingResult = main.FALSE
+ time1 = time.time()
+ pingResult = main.Mininet1.pingIpv6Hosts( hostList, prefix='1000::' )
+ time2 = time.time()
+ timeDiff = round( ( time2 - time1 ), 2 )
+ main.log.report(
+ "Time taken for IPv6 Ping All: " +
+ str( timeDiff ) +
+ " seconds" )
+ utilities.assert_equals( expect=main.TRUE, actual=pingResult,
+ onpass="PING ALL PASS",
+ onfail="PING ALL FAIL" )
+
+ case192Result = pingResult
+ utilities.assert_equals(
+ expect=main.TRUE,
+ actual=case192Result,
+ onpass="IPv6 Ping across 600 Point intents test PASS",
+ onfail="IPv6 Ping across 600 Point intents test FAIL" )
+
def CASE10( self ):
import time
import re
diff --git a/TestON/tests/CHOtest/Dependencies/topoAttIpv6.py b/TestON/tests/CHOtest/Dependencies/topoAttIpv6.py
new file mode 100755
index 0000000..c5ca4c7
--- /dev/null
+++ b/TestON/tests/CHOtest/Dependencies/topoAttIpv6.py
@@ -0,0 +1,190 @@
+#!/usr/bin/python
+
+"""
+Custom topology for Mininet
+"""
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.node import Host, RemoteController
+from mininet.node import Node
+from mininet.node import CPULimitedHost
+from mininet.link import TCLink
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.util import dumpNodeConnections
+from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
+
+class dualStackHost( Host ):
+ def config( self, v6Addr='1000:1/64', **params ):
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+ return r
+
+class attTopo( Topo ):
+
+ def __init__( self, **opts ):
+ "Create a topology."
+
+ # Initialize Topology
+ Topo.__init__( self, **opts )
+
+ # add nodes, switches first...
+ NY54 = self.addSwitch( 's1' )
+ CMBR = self.addSwitch( 's2' )
+ CHCG = self.addSwitch( 's3' )
+ CLEV = self.addSwitch( 's4' )
+ RLGH = self.addSwitch( 's5' )
+ ATLN = self.addSwitch( 's6' )
+ PHLA = self.addSwitch( 's7' )
+ WASH = self.addSwitch( 's8' )
+ NSVL = self.addSwitch( 's9' )
+ STLS = self.addSwitch( 's10' )
+ NWOR = self.addSwitch( 's11' )
+ HSTN = self.addSwitch( 's12' )
+ SNAN = self.addSwitch( 's13' )
+ DLLS = self.addSwitch( 's14' )
+ ORLD = self.addSwitch( 's15' )
+ DNVR = self.addSwitch( 's16' )
+ KSCY = self.addSwitch( 's17' )
+ SNFN = self.addSwitch( 's18' )
+ SCRM = self.addSwitch( 's19' )
+ PTLD = self.addSwitch( 's20' )
+ STTL = self.addSwitch( 's21' )
+ SLKC = self.addSwitch( 's22' )
+ LA03 = self.addSwitch( 's23' )
+ SNDG = self.addSwitch( 's24' )
+ PHNX = self.addSwitch( 's25' )
+
+ # ... and now hosts
+ NY54_host = self.addHost( 'h1', ip='10.1.0.1/24', cls=dualStackHost, v6Addr='1000::1/64' )
+ CMBR_host = self.addHost( 'h2', ip='10.1.0.2/24', cls=dualStackHost, v6Addr='1000::2/64' )
+ CHCG_host = self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='1000::3/64' )
+ CLEV_host = self.addHost( 'h4', ip='10.1.0.4/24', cls=dualStackHost, v6Addr='1000::4/64' )
+ RLGH_host = self.addHost( 'h5', ip='10.1.0.5/24', cls=dualStackHost, v6Addr='1000::5/64' )
+ ATLN_host = self.addHost( 'h6', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='1000::6/64' )
+ PHLA_host = self.addHost( 'h7', ip='10.1.0.7/24', cls=dualStackHost, v6Addr='1000::7/64' )
+ WASH_host = self.addHost( 'h8', ip='10.1.0.8/24', cls=dualStackHost, v6Addr='1000::8/64' )
+ NSVL_host = self.addHost( 'h9', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='1000::9/64' )
+ STLS_host = self.addHost( 'h10', ip='10.1.0.10/24', cls=dualStackHost, v6Addr='1000::10/64' )
+ NWOR_host = self.addHost( 'h11', ip='10.1.0.11/24', cls=dualStackHost, v6Addr='1000::11/64' )
+ HSTN_host = self.addHost( 'h12', ip='10.1.0.12/24', cls=dualStackHost, v6Addr='1000::12/64' )
+ SNAN_host = self.addHost( 'h13', ip='10.1.0.13/24', cls=dualStackHost, v6Addr='1000::13/64' )
+ DLLS_host = self.addHost( 'h14', ip='10.1.0.14/24', cls=dualStackHost, v6Addr='1000::14/64' )
+ ORLD_host = self.addHost( 'h15', ip='10.1.0.15/24', cls=dualStackHost, v6Addr='1000::15/64' )
+ DNVR_host = self.addHost( 'h16', ip='10.1.0.16/24', cls=dualStackHost, v6Addr='1000::16/64' )
+ KSCY_host = self.addHost( 'h17', ip='10.1.0.17/24', cls=dualStackHost, v6Addr='1000::17/64' )
+ SNFN_host = self.addHost( 'h18', ip='10.1.0.18/24', cls=dualStackHost, v6Addr='1000::18/64' )
+ SCRM_host = self.addHost( 'h19', ip='10.1.0.19/24', cls=dualStackHost, v6Addr='1000::19/64' )
+ PTLD_host = self.addHost( 'h20', ip='10.1.0.20/24', cls=dualStackHost, v6Addr='1000::20/64' )
+ STTL_host = self.addHost( 'h21', ip='10.1.0.21/24', cls=dualStackHost, v6Addr='1000::21/64' )
+ SLKC_host = self.addHost( 'h22', ip='10.1.0.22/24', cls=dualStackHost, v6Addr='1000::22/64' )
+ LA03_host = self.addHost( 'h23', ip='10.1.0.23/24', cls=dualStackHost, v6Addr='1000::23/64' )
+ SNDG_host = self.addHost( 'h24', ip='10.1.0.24/24', cls=dualStackHost, v6Addr='1000::24/64' )
+ PHNX_host = self.addHost( 'h25', ip='10.1.0.25/24', cls=dualStackHost, v6Addr='1000::25/64' )
+
+ # add edges between switch and corresponding host
+ self.addLink( NY54 , NY54_host )
+ self.addLink( CMBR , CMBR_host )
+ self.addLink( CHCG , CHCG_host )
+ self.addLink( CLEV , CLEV_host )
+ self.addLink( RLGH , RLGH_host )
+ self.addLink( ATLN , ATLN_host )
+ self.addLink( PHLA , PHLA_host )
+ self.addLink( WASH , WASH_host )
+ self.addLink( NSVL , NSVL_host )
+ self.addLink( STLS , STLS_host )
+ self.addLink( NWOR , NWOR_host )
+ self.addLink( HSTN , HSTN_host )
+ self.addLink( SNAN , SNAN_host )
+ self.addLink( DLLS , DLLS_host )
+ self.addLink( ORLD , ORLD_host )
+ self.addLink( DNVR , DNVR_host )
+ self.addLink( KSCY , KSCY_host )
+ self.addLink( SNFN , SNFN_host )
+ self.addLink( SCRM , SCRM_host )
+ self.addLink( PTLD , PTLD_host )
+ self.addLink( STTL , STTL_host )
+ self.addLink( SLKC , SLKC_host )
+ self.addLink( LA03 , LA03_host )
+ self.addLink( SNDG , SNDG_host )
+ self.addLink( PHNX , PHNX_host )
+
+ # add edges between switches
+ self.addLink( NY54 , CMBR, bw=10, delay='0.979030824185ms')
+ self.addLink( NY54 , CHCG, bw=10, delay='0.806374975652ms')
+ self.addLink( NY54 , PHLA, bw=10, delay='0.686192970166ms')
+ self.addLink( NY54 , WASH, bw=10, delay='0.605826192092ms')
+ self.addLink( CMBR , PHLA, bw=10, delay='1.4018238197ms')
+ self.addLink( CHCG , CLEV, bw=10, delay='0.232315346482ms')
+ self.addLink( CHCG , PHLA, bw=10, delay='1.07297714274ms')
+ self.addLink( CHCG , STLS, bw=10, delay='1.12827896944ms')
+ self.addLink( CHCG , DNVR, bw=10, delay='1.35964770335ms')
+ self.addLink( CHCG , KSCY, bw=10, delay='1.5199778541ms')
+ self.addLink( CHCG , SNFN, bw=10, delay='0.620743405435ms')
+ self.addLink( CHCG , STTL, bw=10, delay='0.93027212534ms')
+ self.addLink( CHCG , SLKC, bw=10, delay='0.735621751348ms')
+ self.addLink( CLEV , NSVL, bw=10, delay='0.523419372248ms')
+ self.addLink( CLEV , STLS, bw=10, delay='1.00360290845ms')
+ self.addLink( CLEV , PHLA, bw=10, delay='0.882912133249ms')
+ self.addLink( RLGH , ATLN, bw=10, delay='1.1644489729ms')
+ self.addLink( RLGH , WASH, bw=10, delay='1.48176810502ms')
+ self.addLink( ATLN , WASH, bw=10, delay='0.557636936322ms')
+ self.addLink( ATLN , NSVL, bw=10, delay='1.32869749865ms')
+ self.addLink( ATLN , STLS, bw=10, delay='0.767705554748ms')
+ self.addLink( ATLN , DLLS, bw=10, delay='0.544782086448ms')
+ self.addLink( ATLN , ORLD, bw=10, delay='1.46119152532ms')
+ self.addLink( PHLA , WASH, bw=10, delay='0.372209320106ms')
+ self.addLink( NSVL , STLS, bw=10, delay='1.43250491305ms')
+ self.addLink( NSVL , DLLS, bw=10, delay='1.67698215288ms')
+ self.addLink( STLS , DLLS, bw=10, delay='0.256389964194ms')
+ self.addLink( STLS , KSCY, bw=10, delay='0.395511571791ms')
+ self.addLink( STLS , LA03, bw=10, delay='0.257085227363ms')
+ self.addLink( NWOR , HSTN, bw=10, delay='0.0952906633914ms')
+ self.addLink( NWOR , DLLS, bw=10, delay='1.60231329739ms')
+ self.addLink( NWOR , ORLD, bw=10, delay='0.692731063896ms')
+ self.addLink( HSTN , SNAN, bw=10, delay='0.284150653798ms')
+ self.addLink( HSTN , DLLS, bw=10, delay='1.65690128332ms')
+ self.addLink( HSTN , ORLD, bw=10, delay='0.731886304782ms')
+ self.addLink( SNAN , PHNX, bw=10, delay='1.34258627257ms')
+ self.addLink( SNAN , DLLS, bw=10, delay='1.50063532341ms')
+ self.addLink( DLLS , DNVR, bw=10, delay='0.251471593235ms')
+ self.addLink( DLLS , KSCY, bw=10, delay='0.18026026737ms')
+ self.addLink( DLLS , SNFN, bw=10, delay='0.74304274592ms')
+ self.addLink( DLLS , LA03, bw=10, delay='0.506439293357ms')
+ self.addLink( DNVR , KSCY, bw=10, delay='0.223328790403ms')
+ self.addLink( DNVR , SNFN, bw=10, delay='0.889017541903ms')
+ self.addLink( DNVR , SLKC, bw=10, delay='0.631898982721ms')
+ self.addLink( KSCY , SNFN, bw=10, delay='0.922778522233ms')
+ self.addLink( SNFN , SCRM, bw=10, delay='0.630352278097ms')
+ self.addLink( SNFN , PTLD, bw=10, delay='0.828572513655ms')
+ self.addLink( SNFN , STTL, bw=10, delay='1.54076081649ms')
+ self.addLink( SNFN , SLKC, bw=10, delay='0.621507502625ms')
+ self.addLink( SNFN , LA03, bw=10, delay='0.602936230151ms')
+ self.addLink( SCRM , SLKC, bw=10, delay='0.461350343644ms')
+ self.addLink( PTLD , STTL, bw=10, delay='1.17591515181ms')
+ self.addLink( SLKC , LA03, bw=10, delay='0.243225267023ms')
+ self.addLink( LA03 , SNDG, bw=10, delay='0.681264950821ms')
+ self.addLink( LA03 , PHNX, bw=10, delay='0.343709457969ms')
+ self.addLink( LA03 , PHNX, bw=10, delay='0.343709457969ms')
+ self.addLink( SNDG , PHNX, bw=10, delay='0.345064487693ms')
+
+topos = { 'att': ( lambda: attTopo() ) }
+
+# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
+
+def setupNetwork():
+ "Create network"
+ topo = attTopo()
+ #if controller_ip == '':
+ #controller_ip = '10.0.2.2';
+ # controller_ip = '127.0.0.1';
+ network = Mininet(topo=topo, link=TCLink, autoSetMacs=True, controller=None)
+ network.start()
+ CLI( network )
+ network.stop()
+
+if __name__ == '__main__':
+ setLogLevel('info')
+ #setLogLevel('debug')
+ setupNetwork()
diff --git a/TestON/tests/CHOtest/Dependencies/topoChordalIpv6.py b/TestON/tests/CHOtest/Dependencies/topoChordalIpv6.py
new file mode 100755
index 0000000..64b0405
--- /dev/null
+++ b/TestON/tests/CHOtest/Dependencies/topoChordalIpv6.py
@@ -0,0 +1,429 @@
+#!/usr/bin/python
+"""
+"""
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.node import Host, RemoteController
+from mininet.node import Node
+from mininet.node import CPULimitedHost
+from mininet.link import TCLink
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.util import dumpNodeConnections
+from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
+
+class dualStackHost( Host ):
+ def config( self, v6Addr='1000:1/64', **params ):
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+ return r
+
+class chordalTopo( Topo ):
+
+ def __init__( self, **opts ):
+ "Create a topology."
+
+ # Initialize Topology
+ Topo.__init__( self, **opts )
+
+ # add nodes, switches first...
+ s1 = self.addSwitch( 's1' )
+ s2 = self.addSwitch( 's2' )
+ s3 = self.addSwitch( 's3' )
+ s4 = self.addSwitch( 's4' )
+ s5 = self.addSwitch( 's5' )
+ s6 = self.addSwitch( 's6' )
+ s7 = self.addSwitch( 's7' )
+ s8 = self.addSwitch( 's8' )
+ s9 = self.addSwitch( 's9' )
+ s10 = self.addSwitch( 's10' )
+ s11 = self.addSwitch( 's11' )
+ s12 = self.addSwitch( 's12' )
+ s13 = self.addSwitch( 's13' )
+ s14 = self.addSwitch( 's14' )
+ s15 = self.addSwitch( 's15' )
+ s16 = self.addSwitch( 's16' )
+ s17 = self.addSwitch( 's17' )
+ s18 = self.addSwitch( 's18' )
+ s19 = self.addSwitch( 's19' )
+ s20 = self.addSwitch( 's20' )
+ s21 = self.addSwitch( 's21' )
+ s22 = self.addSwitch( 's22' )
+ s23 = self.addSwitch( 's23' )
+ s24 = self.addSwitch( 's24' )
+ s25 = self.addSwitch( 's25' )
+
+ # ... and now hosts
+ s1_host = self.addHost( 'h1', ip='10.1.0.1/24', cls=dualStackHost, v6Addr='1000::1/64' )
+ s2_host = self.addHost( 'h2', ip='10.1.0.2/24', cls=dualStackHost, v6Addr='1000::2/64' )
+ s3_host = self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='1000::3/64' )
+ s4_host = self.addHost( 'h4', ip='10.1.0.4/24', cls=dualStackHost, v6Addr='1000::4/64' )
+ s5_host = self.addHost( 'h5', ip='10.1.0.5/24', cls=dualStackHost, v6Addr='1000::5/64' )
+ s6_host = self.addHost( 'h6', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='1000::6/64' )
+ s7_host = self.addHost( 'h7', ip='10.1.0.7/24', cls=dualStackHost, v6Addr='1000::7/64' )
+ s8_host = self.addHost( 'h8', ip='10.1.0.8/24', cls=dualStackHost, v6Addr='1000::8/64' )
+ s9_host = self.addHost( 'h9', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='1000::9/64' )
+ s10_host = self.addHost( 'h10', ip='10.1.0.10/24', cls=dualStackHost, v6Addr='1000::10/64' )
+ s11_host = self.addHost( 'h11', ip='10.1.0.11/24', cls=dualStackHost, v6Addr='1000::11/64' )
+ s12_host = self.addHost( 'h12', ip='10.1.0.12/24', cls=dualStackHost, v6Addr='1000::12/64' )
+ s13_host = self.addHost( 'h13', ip='10.1.0.13/24', cls=dualStackHost, v6Addr='1000::13/64' )
+ s14_host = self.addHost( 'h14', ip='10.1.0.14/24', cls=dualStackHost, v6Addr='1000::14/64' )
+ s15_host = self.addHost( 'h15', ip='10.1.0.15/24', cls=dualStackHost, v6Addr='1000::15/64' )
+ s16_host = self.addHost( 'h16', ip='10.1.0.16/24', cls=dualStackHost, v6Addr='1000::16/64' )
+ s17_host = self.addHost( 'h17', ip='10.1.0.17/24', cls=dualStackHost, v6Addr='1000::17/64' )
+ s18_host = self.addHost( 'h18', ip='10.1.0.18/24', cls=dualStackHost, v6Addr='1000::18/64' )
+ s19_host = self.addHost( 'h19', ip='10.1.0.19/24', cls=dualStackHost, v6Addr='1000::19/64' )
+ s20_host = self.addHost( 'h20', ip='10.1.0.20/24', cls=dualStackHost, v6Addr='1000::20/64' )
+ s21_host = self.addHost( 'h21', ip='10.1.0.21/24', cls=dualStackHost, v6Addr='1000::21/64' )
+ s22_host = self.addHost( 'h22', ip='10.1.0.22/24', cls=dualStackHost, v6Addr='1000::22/64' )
+ s23_host = self.addHost( 'h23', ip='10.1.0.23/24', cls=dualStackHost, v6Addr='1000::23/64' )
+ s24_host = self.addHost( 'h24', ip='10.1.0.24/24', cls=dualStackHost, v6Addr='1000::24/64' )
+ s25_host = self.addHost( 'h25', ip='10.1.0.25/24', cls=dualStackHost, v6Addr='1000::25/64' )
+
+ # add edges between switch and corresponding host
+ self.addLink( s1 , s1_host )
+ self.addLink( s2 , s2_host )
+ self.addLink( s3 , s3_host )
+ self.addLink( s4 , s4_host )
+ self.addLink( s5 , s5_host )
+ self.addLink( s6 , s6_host )
+ self.addLink( s7 , s7_host )
+ self.addLink( s8 , s8_host )
+ self.addLink( s9 , s9_host )
+ self.addLink( s10 , s10_host )
+ self.addLink( s11 , s11_host )
+ self.addLink( s12 , s12_host )
+ self.addLink( s13 , s13_host )
+ self.addLink( s14 , s14_host )
+ self.addLink( s15 , s15_host )
+ self.addLink( s16 , s16_host )
+ self.addLink( s17 , s17_host )
+ self.addLink( s18 , s18_host )
+ self.addLink( s19 , s19_host )
+ self.addLink( s20 , s20_host )
+ self.addLink( s21 , s21_host )
+ self.addLink( s22 , s22_host )
+ self.addLink( s23 , s23_host )
+ self.addLink( s24 , s24_host )
+ self.addLink( s25 , s25_host )
+ self.addLink(s1, s2)
+ self.addLink(s1, s3)
+ self.addLink(s1, s4)
+ self.addLink(s1, s5)
+ self.addLink(s1, s6)
+ self.addLink(s1, s7)
+ self.addLink(s1, s8)
+ self.addLink(s1, s9)
+ self.addLink(s1, s10)
+ self.addLink(s1, s11)
+ self.addLink(s1, s12)
+ self.addLink(s1, s13)
+ self.addLink(s1, s14)
+ self.addLink(s1, s15)
+ self.addLink(s1, s16)
+ self.addLink(s1, s17)
+ self.addLink(s1, s18)
+ self.addLink(s1, s19)
+ self.addLink(s1, s20)
+ self.addLink(s1, s21)
+ self.addLink(s1, s22)
+ self.addLink(s1, s23)
+ self.addLink(s1, s24)
+ self.addLink(s1, s25)
+ self.addLink(s2, s3)
+ self.addLink(s2, s4)
+ self.addLink(s2, s5)
+ self.addLink(s2, s6)
+ self.addLink(s2, s7)
+ self.addLink(s2, s8)
+ self.addLink(s2, s9)
+ self.addLink(s2, s10)
+ self.addLink(s2, s11)
+ self.addLink(s2, s12)
+ self.addLink(s2, s13)
+ self.addLink(s2, s14)
+ self.addLink(s2, s15)
+ self.addLink(s2, s16)
+ self.addLink(s2, s17)
+ self.addLink(s2, s18)
+ self.addLink(s2, s19)
+ self.addLink(s2, s20)
+ self.addLink(s2, s21)
+ self.addLink(s2, s22)
+ self.addLink(s2, s23)
+ self.addLink(s2, s24)
+ self.addLink(s2, s25)
+ self.addLink(s3, s4)
+ self.addLink(s3, s5)
+ self.addLink(s3, s6)
+ self.addLink(s3, s7)
+ self.addLink(s3, s8)
+ self.addLink(s3, s9)
+ self.addLink(s3, s10)
+ self.addLink(s3, s11)
+ self.addLink(s3, s12)
+ self.addLink(s3, s13)
+ self.addLink(s3, s14)
+ self.addLink(s3, s15)
+ self.addLink(s3, s16)
+ self.addLink(s3, s17)
+ self.addLink(s3, s18)
+ self.addLink(s3, s19)
+ self.addLink(s3, s20)
+ self.addLink(s3, s21)
+ self.addLink(s3, s22)
+ self.addLink(s3, s23)
+ self.addLink(s3, s24)
+ self.addLink(s3, s25)
+ self.addLink(s4, s5)
+ self.addLink(s4, s6)
+ self.addLink(s4, s7)
+ self.addLink(s4, s8)
+ self.addLink(s4, s9)
+ self.addLink(s4, s10)
+ self.addLink(s4, s11)
+ self.addLink(s4, s12)
+ self.addLink(s4, s13)
+ self.addLink(s4, s14)
+ self.addLink(s4, s15)
+ self.addLink(s4, s16)
+ self.addLink(s4, s17)
+ self.addLink(s4, s18)
+ self.addLink(s4, s19)
+ self.addLink(s4, s20)
+ self.addLink(s4, s21)
+ self.addLink(s4, s22)
+ self.addLink(s4, s23)
+ self.addLink(s4, s24)
+ self.addLink(s4, s25)
+ self.addLink(s5, s6)
+ self.addLink(s5, s7)
+ self.addLink(s5, s8)
+ self.addLink(s5, s9)
+ self.addLink(s5, s10)
+ self.addLink(s5, s11)
+ self.addLink(s5, s12)
+ self.addLink(s5, s13)
+ self.addLink(s5, s14)
+ self.addLink(s5, s15)
+ self.addLink(s5, s16)
+ self.addLink(s5, s17)
+ self.addLink(s5, s18)
+ self.addLink(s5, s19)
+ self.addLink(s5, s20)
+ self.addLink(s5, s21)
+ self.addLink(s5, s22)
+ self.addLink(s5, s23)
+ self.addLink(s5, s24)
+ self.addLink(s5, s25)
+ self.addLink(s6, s7)
+ self.addLink(s6, s8)
+ self.addLink(s6, s9)
+ self.addLink(s6, s10)
+ self.addLink(s6, s11)
+ self.addLink(s6, s12)
+ self.addLink(s6, s13)
+ self.addLink(s6, s14)
+ self.addLink(s6, s15)
+ self.addLink(s6, s16)
+ self.addLink(s6, s17)
+ self.addLink(s6, s18)
+ self.addLink(s6, s19)
+ self.addLink(s6, s20)
+ self.addLink(s6, s21)
+ self.addLink(s6, s22)
+ self.addLink(s6, s23)
+ self.addLink(s6, s24)
+ self.addLink(s6, s25)
+ self.addLink(s7, s8)
+ self.addLink(s7, s9)
+ self.addLink(s7, s10)
+ self.addLink(s7, s11)
+ self.addLink(s7, s12)
+ self.addLink(s7, s13)
+ self.addLink(s7, s14)
+ self.addLink(s7, s15)
+ self.addLink(s7, s16)
+ self.addLink(s7, s17)
+ self.addLink(s7, s18)
+ self.addLink(s7, s19)
+ self.addLink(s7, s20)
+ self.addLink(s7, s21)
+ self.addLink(s7, s22)
+ self.addLink(s7, s23)
+ self.addLink(s7, s24)
+ self.addLink(s7, s25)
+ self.addLink(s8, s9)
+ self.addLink(s8, s10)
+ self.addLink(s8, s11)
+ self.addLink(s8, s12)
+ self.addLink(s8, s13)
+ self.addLink(s8, s14)
+ self.addLink(s8, s15)
+ self.addLink(s8, s16)
+ self.addLink(s8, s17)
+ self.addLink(s8, s18)
+ self.addLink(s8, s19)
+ self.addLink(s8, s20)
+ self.addLink(s8, s21)
+ self.addLink(s8, s22)
+ self.addLink(s8, s23)
+ self.addLink(s8, s24)
+ self.addLink(s8, s25)
+ self.addLink(s9, s10)
+ self.addLink(s9, s11)
+ self.addLink(s9, s12)
+ self.addLink(s9, s13)
+ self.addLink(s9, s14)
+ self.addLink(s9, s15)
+ self.addLink(s9, s16)
+ self.addLink(s9, s17)
+ self.addLink(s9, s18)
+ self.addLink(s9, s19)
+ self.addLink(s9, s20)
+ self.addLink(s9, s21)
+ self.addLink(s9, s22)
+ self.addLink(s9, s23)
+ self.addLink(s9, s24)
+ self.addLink(s9, s25)
+ self.addLink(s10, s11)
+ self.addLink(s10, s12)
+ self.addLink(s10, s13)
+ self.addLink(s10, s14)
+ self.addLink(s10, s15)
+ self.addLink(s10, s16)
+ self.addLink(s10, s17)
+ self.addLink(s10, s18)
+ self.addLink(s10, s19)
+ self.addLink(s10, s20)
+ self.addLink(s10, s21)
+ self.addLink(s10, s22)
+ self.addLink(s10, s23)
+ self.addLink(s10, s24)
+ self.addLink(s10, s25)
+ self.addLink(s11, s12)
+ self.addLink(s11, s13)
+ self.addLink(s11, s14)
+ self.addLink(s11, s15)
+ self.addLink(s11, s16)
+ self.addLink(s11, s17)
+ self.addLink(s11, s18)
+ self.addLink(s11, s19)
+ self.addLink(s11, s20)
+ self.addLink(s11, s21)
+ self.addLink(s11, s22)
+ self.addLink(s11, s23)
+ self.addLink(s11, s24)
+ self.addLink(s11, s25)
+ self.addLink(s12, s13)
+ self.addLink(s12, s14)
+ self.addLink(s12, s15)
+ self.addLink(s12, s16)
+ self.addLink(s12, s17)
+ self.addLink(s12, s18)
+ self.addLink(s12, s19)
+ self.addLink(s12, s20)
+ self.addLink(s12, s21)
+ self.addLink(s12, s22)
+ self.addLink(s12, s23)
+ self.addLink(s12, s24)
+ self.addLink(s12, s25)
+ self.addLink(s13, s14)
+ self.addLink(s13, s15)
+ self.addLink(s13, s16)
+ self.addLink(s13, s17)
+ self.addLink(s13, s18)
+ self.addLink(s13, s19)
+ self.addLink(s13, s20)
+ self.addLink(s13, s21)
+ self.addLink(s13, s22)
+ self.addLink(s13, s23)
+ self.addLink(s13, s24)
+ self.addLink(s13, s25)
+ self.addLink(s14, s15)
+ self.addLink(s14, s16)
+ self.addLink(s14, s17)
+ self.addLink(s14, s18)
+ self.addLink(s14, s19)
+ self.addLink(s14, s20)
+ self.addLink(s14, s21)
+ self.addLink(s14, s22)
+ self.addLink(s14, s23)
+ self.addLink(s14, s24)
+ self.addLink(s14, s25)
+ self.addLink(s15, s16)
+ self.addLink(s15, s17)
+ self.addLink(s15, s18)
+ self.addLink(s15, s19)
+ self.addLink(s15, s20)
+ self.addLink(s15, s21)
+ self.addLink(s15, s22)
+ self.addLink(s15, s23)
+ self.addLink(s15, s24)
+ self.addLink(s15, s25)
+ self.addLink(s16, s17)
+ self.addLink(s16, s18)
+ self.addLink(s16, s19)
+ self.addLink(s16, s20)
+ self.addLink(s16, s21)
+ self.addLink(s16, s22)
+ self.addLink(s16, s23)
+ self.addLink(s16, s24)
+ self.addLink(s16, s25)
+ self.addLink(s17, s18)
+ self.addLink(s17, s19)
+ self.addLink(s17, s20)
+ self.addLink(s17, s21)
+ self.addLink(s17, s22)
+ self.addLink(s17, s23)
+ self.addLink(s17, s24)
+ self.addLink(s17, s25)
+ self.addLink(s18, s19)
+ self.addLink(s18, s20)
+ self.addLink(s18, s21)
+ self.addLink(s18, s22)
+ self.addLink(s18, s23)
+ self.addLink(s18, s24)
+ self.addLink(s18, s25)
+ self.addLink(s19, s20)
+ self.addLink(s19, s21)
+ self.addLink(s19, s22)
+ self.addLink(s19, s23)
+ self.addLink(s19, s24)
+ self.addLink(s19, s25)
+ self.addLink(s20, s21)
+ self.addLink(s20, s22)
+ self.addLink(s20, s23)
+ self.addLink(s20, s24)
+ self.addLink(s20, s25)
+ self.addLink(s21, s22)
+ self.addLink(s21, s23)
+ self.addLink(s21, s24)
+ self.addLink(s21, s25)
+ self.addLink(s22, s23)
+ self.addLink(s22, s24)
+ self.addLink(s22, s25)
+ self.addLink(s23, s24)
+ self.addLink(s23, s25)
+ self.addLink(s24, s25)
+
+topos = { 'chordal': ( lambda: chordalTopo() ) }
+
+# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
+
+def setupNetwork():
+ "Create network"
+ topo = chordalTopo()
+ #if controller_ip == '':
+ #controller_ip = '10.0.2.2';
+ # controller_ip = '127.0.0.1';
+ network = Mininet(topo=topo, switch=OVSSwitch,autoSetMacs=True, controller=None)
+ network.start()
+ CLI( network )
+ network.stop()
+
+if __name__ == '__main__':
+ setLogLevel('info')
+ #setLogLevel('debug')
+ setupNetwork()
diff --git a/TestON/tests/CHOtest/Dependencies/topoSpineIpv6.py b/TestON/tests/CHOtest/Dependencies/topoSpineIpv6.py
new file mode 100755
index 0000000..689adb3
--- /dev/null
+++ b/TestON/tests/CHOtest/Dependencies/topoSpineIpv6.py
@@ -0,0 +1,440 @@
+#!/usr/bin/python
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.node import Host, RemoteController
+from mininet.node import Node
+from mininet.node import CPULimitedHost
+from mininet.link import TCLink
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.util import dumpNodeConnections
+from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
+
+class dualStackHost( Host ):
+ def config( self, v6Addr='1000:1/64', **params ):
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+ return r
+
+class spineTopo( Topo ):
+
+ def __init__( self, **opts ):
+ "Create a topology."
+
+ # Initialize Topology
+ Topo.__init__( self, **opts )
+
+ # add nodes, Leaf switches
+ s1 = self.addSwitch( 's1' )
+ s2 = self.addSwitch( 's2' )
+ s3 = self.addSwitch( 's3' )
+ s4 = self.addSwitch( 's4' )
+ s5 = self.addSwitch( 's5' )
+ s6 = self.addSwitch( 's6' )
+ s7 = self.addSwitch( 's7' )
+ s8 = self.addSwitch( 's8' )
+ s9 = self.addSwitch( 's9' )
+ s10 = self.addSwitch( 's10' )
+ s11 = self.addSwitch( 's11' )
+ s12 = self.addSwitch( 's12' )
+ s13 = self.addSwitch( 's13' )
+ s14 = self.addSwitch( 's14' )
+
+ # add nodes, Spine switches first...
+ s15 = self.addSwitch( 's15' )
+ s16 = self.addSwitch( 's16' )
+ s17 = self.addSwitch( 's17' )
+ s18 = self.addSwitch( 's18' )
+ s19 = self.addSwitch( 's19' )
+ s20 = self.addSwitch( 's20' )
+ s21 = self.addSwitch( 's21' )
+ s22 = self.addSwitch( 's22' )
+ s23 = self.addSwitch( 's23' )
+ s24 = self.addSwitch( 's24' )
+ s25 = self.addSwitch( 's25' )
+ s26 = self.addSwitch( 's26' )
+ s27 = self.addSwitch( 's27' )
+ s28 = self.addSwitch( 's28' )
+ s29 = self.addSwitch( 's29' )
+ s30 = self.addSwitch( 's30' )
+ s31 = self.addSwitch( 's31' )
+ s32 = self.addSwitch( 's32' )
+ s33 = self.addSwitch( 's33' )
+ s34 = self.addSwitch( 's34' )
+ s35 = self.addSwitch( 's35' )
+ s36 = self.addSwitch( 's36' )
+ s37 = self.addSwitch( 's37' )
+ s38 = self.addSwitch( 's38' )
+ s39 = self.addSwitch( 's39' )
+ s40 = self.addSwitch( 's40' )
+ s41 = self.addSwitch( 's41' )
+ s42 = self.addSwitch( 's42' )
+ s43 = self.addSwitch( 's43' )
+ s44 = self.addSwitch( 's44' )
+ s45 = self.addSwitch( 's45' )
+ s46 = self.addSwitch( 's46' )
+ s47 = self.addSwitch( 's47' )
+ s48 = self.addSwitch( 's48' )
+ s49 = self.addSwitch( 's49' )
+ s50 = self.addSwitch( 's50' )
+ s51 = self.addSwitch( 's51' )
+ s52 = self.addSwitch( 's52' )
+ s53 = self.addSwitch( 's53' )
+ s54 = self.addSwitch( 's54' )
+ s55 = self.addSwitch( 's55' )
+ s56 = self.addSwitch( 's56' )
+ s57 = self.addSwitch( 's57' )
+ s58 = self.addSwitch( 's58' )
+ s59 = self.addSwitch( 's59' )
+ s60 = self.addSwitch( 's60' )
+ s61 = self.addSwitch( 's61' )
+ s62 = self.addSwitch( 's62' )
+ s63 = self.addSwitch( 's63' )
+ s64 = self.addSwitch( 's64' )
+ s65 = self.addSwitch( 's65' )
+ s66 = self.addSwitch( 's66' )
+ s67 = self.addSwitch( 's67' )
+ s68 = self.addSwitch( 's68' )
+ s69 = self.addSwitch( 's69' )
+ s70 = self.addSwitch( 's70' )
+ s71 = self.addSwitch( 's71' )
+ s72 = self.addSwitch( 's72' )
+ s73 = self.addSwitch( 's73' )
+ s74 = self.addSwitch( 's74' )
+ s75 = self.addSwitch( 's75' )
+ s76 = self.addSwitch( 's76' )
+ s77 = self.addSwitch( 's77' )
+ s78 = self.addSwitch( 's78' )
+
+ # ... and now hosts
+ # s1_host = self.addHost( 'h1', ip='10.1.0.1/24', cls=dualStackHost, v6Addr='1000::1/64' )
+ # s2_host = self.addHost( 'h2', ip='10.1.0.2/24', cls=dualStackHost, v6Addr='1000::2/64' )
+ # s3_host = self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='1000::3/64' )
+ # s4_host = self.addHost( 'h4', ip='10.1.0.4/24', cls=dualStackHost, v6Addr='1000::4/64' )
+ # s5_host = self.addHost( 'h5', ip='10.1.0.5/24', cls=dualStackHost, v6Addr='1000::5/64' )
+ # s6_host = self.addHost( 'h6', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='1000::6/64' )
+ # s7_host = self.addHost( 'h7', ip='10.1.0.7/24', cls=dualStackHost, v6Addr='1000::7/64' )
+ # s8_host = self.addHost( 'h8', ip='10.1.0.8/24', cls=dualStackHost, v6Addr='1000::8/64' )
+ # s9_host = self.addHost( 'h9', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='1000::9/64' )
+ # s10_host = self.addHost( 'h10', ip='10.1.0.10/24', cls=dualStackHost, v6Addr='1000::10/64' )
+ s11_host = self.addHost( 'h11', ip='10.1.0.11/24', cls=dualStackHost, v6Addr='1000::11/64' )
+ s12_host = self.addHost( 'h12', ip='10.1.0.12/24', cls=dualStackHost, v6Addr='1000::12/64' )
+ s13_host = self.addHost( 'h13', ip='10.1.0.13/24', cls=dualStackHost, v6Addr='1000::13/64' )
+ s14_host = self.addHost( 'h14', ip='10.1.0.14/24', cls=dualStackHost, v6Addr='1000::14/64' )
+ s15_host = self.addHost( 'h15', ip='10.1.0.15/24', cls=dualStackHost, v6Addr='1000::15/64' )
+ s16_host = self.addHost( 'h16', ip='10.1.0.16/24', cls=dualStackHost, v6Addr='1000::16/64' )
+ s17_host = self.addHost( 'h17', ip='10.1.0.17/24', cls=dualStackHost, v6Addr='1000::17/64' )
+ s18_host = self.addHost( 'h18', ip='10.1.0.18/24', cls=dualStackHost, v6Addr='1000::18/64' )
+ s19_host = self.addHost( 'h19', ip='10.1.0.19/24', cls=dualStackHost, v6Addr='1000::19/64' )
+ s20_host = self.addHost( 'h20', ip='10.1.0.20/24', cls=dualStackHost, v6Addr='1000::20/64' )
+ s21_host = self.addHost( 'h21', ip='10.1.0.21/24', cls=dualStackHost, v6Addr='1000::21/64' )
+ s22_host = self.addHost( 'h22', ip='10.1.0.22/24', cls=dualStackHost, v6Addr='1000::22/64' )
+ s23_host = self.addHost( 'h23', ip='10.1.0.23/24', cls=dualStackHost, v6Addr='1000::23/64' )
+ s24_host = self.addHost( 'h24', ip='10.1.0.24/24', cls=dualStackHost, v6Addr='1000::24/64' )
+ s25_host = self.addHost( 'h25', ip='10.1.0.25/24', cls=dualStackHost, v6Addr='1000::25/64' )
+ s26_host = self.addHost( 'h26', ip='10.1.0.26/24', cls=dualStackHost, v6Addr='1000::26/64' )
+ s27_host = self.addHost( 'h27', ip='10.1.0.27/24', cls=dualStackHost, v6Addr='1000::27/64' )
+ s28_host = self.addHost( 'h28', ip='10.1.0.28/24', cls=dualStackHost, v6Addr='1000::28/64' )
+ s29_host = self.addHost( 'h29', ip='10.1.0.29/24', cls=dualStackHost, v6Addr='1000::29/64' )
+ s30_host = self.addHost( 'h30', ip='10.1.0.30/24', cls=dualStackHost, v6Addr='1000::30/64' )
+ s31_host = self.addHost( 'h31', ip='10.1.0.31/24', cls=dualStackHost, v6Addr='1000::31/64' )
+ s32_host = self.addHost( 'h32', ip='10.1.0.32/24', cls=dualStackHost, v6Addr='1000::32/64' )
+ s33_host = self.addHost( 'h33', ip='10.1.0.33/24', cls=dualStackHost, v6Addr='1000::33/64' )
+ s34_host = self.addHost( 'h34', ip='10.1.0.34/24', cls=dualStackHost, v6Addr='1000::34/64' )
+ s35_host = self.addHost( 'h35', ip='10.1.0.35/24', cls=dualStackHost, v6Addr='1000::35/64' )
+ s36_host = self.addHost( 'h36', ip='10.1.0.36/24', cls=dualStackHost, v6Addr='1000::36/64' )
+ s37_host = self.addHost( 'h37', ip='10.1.0.37/24', cls=dualStackHost, v6Addr='1000::37/64' )
+ s38_host = self.addHost( 'h38', ip='10.1.0.38/24', cls=dualStackHost, v6Addr='1000::38/64' )
+ s39_host = self.addHost( 'h39', ip='10.1.0.39/24', cls=dualStackHost, v6Addr='1000::39/64' )
+ s40_host = self.addHost( 'h40', ip='10.1.0.40/24', cls=dualStackHost, v6Addr='1000::40/64' )
+ s41_host = self.addHost( 'h41', ip='10.1.0.41/24', cls=dualStackHost, v6Addr='1000::41/64' )
+ s42_host = self.addHost( 'h42', ip='10.1.0.42/24', cls=dualStackHost, v6Addr='1000::42/64' )
+ s43_host = self.addHost( 'h43', ip='10.1.0.43/24', cls=dualStackHost, v6Addr='1000::43/64' )
+ s44_host = self.addHost( 'h44', ip='10.1.0.44/24', cls=dualStackHost, v6Addr='1000::44/64' )
+ s45_host = self.addHost( 'h45', ip='10.1.0.45/24', cls=dualStackHost, v6Addr='1000::45/64' )
+ s46_host = self.addHost( 'h46', ip='10.1.0.46/24', cls=dualStackHost, v6Addr='1000::46/64' )
+ s47_host = self.addHost( 'h47', ip='10.1.0.47/24', cls=dualStackHost, v6Addr='1000::47/64' )
+ s48_host = self.addHost( 'h48', ip='10.1.0.48/24', cls=dualStackHost, v6Addr='1000::48/64' )
+ s49_host = self.addHost( 'h49', ip='10.1.0.49/24', cls=dualStackHost, v6Addr='1000::49/64' )
+ s50_host = self.addHost( 'h50', ip='10.1.0.50/24', cls=dualStackHost, v6Addr='1000::50/64' )
+ s51_host = self.addHost( 'h51', ip='10.1.0.51/24', cls=dualStackHost, v6Addr='1000::51/64' )
+ s52_host = self.addHost( 'h52', ip='10.1.0.52/24', cls=dualStackHost, v6Addr='1000::52/64' )
+ s53_host = self.addHost( 'h53', ip='10.1.0.53/24', cls=dualStackHost, v6Addr='1000::53/64' )
+ s54_host = self.addHost( 'h54', ip='10.1.0.54/24', cls=dualStackHost, v6Addr='1000::54/64' )
+ s55_host = self.addHost( 'h55', ip='10.1.0.55/24', cls=dualStackHost, v6Addr='1000::55/64' )
+ s56_host = self.addHost( 'h56', ip='10.1.0.56/24', cls=dualStackHost, v6Addr='1000::56/64' )
+ s57_host = self.addHost( 'h57', ip='10.1.0.57/24', cls=dualStackHost, v6Addr='1000::57/64' )
+ s58_host = self.addHost( 'h58', ip='10.1.0.58/24', cls=dualStackHost, v6Addr='1000::58/64' )
+ s59_host = self.addHost( 'h59', ip='10.1.0.59/24', cls=dualStackHost, v6Addr='1000::59/64' )
+ s60_host = self.addHost( 'h60', ip='10.1.0.60/24', cls=dualStackHost, v6Addr='1000::60/64' )
+ s61_host = self.addHost( 'h61', ip='10.1.0.61/24', cls=dualStackHost, v6Addr='1000::61/64' )
+ s62_host = self.addHost( 'h62', ip='10.1.0.62/24', cls=dualStackHost, v6Addr='1000::62/64' )
+ s63_host = self.addHost( 'h63', ip='10.1.0.63/24', cls=dualStackHost, v6Addr='1000::63/64' )
+ s64_host = self.addHost( 'h64', ip='10.1.0.64/24', cls=dualStackHost, v6Addr='1000::64/64' )
+ s65_host = self.addHost( 'h65', ip='10.1.0.65/24', cls=dualStackHost, v6Addr='1000::65/64' )
+ s66_host = self.addHost( 'h66', ip='10.1.0.66/24', cls=dualStackHost, v6Addr='1000::66/64' )
+ s67_host = self.addHost( 'h67', ip='10.1.0.67/24', cls=dualStackHost, v6Addr='1000::67/64' )
+ s68_host = self.addHost( 'h68', ip='10.1.0.68/24', cls=dualStackHost, v6Addr='1000::68/64' )
+ s69_host = self.addHost( 'h69', ip='10.1.0.69/24', cls=dualStackHost, v6Addr='1000::69/64' )
+ s70_host = self.addHost( 'h70', ip='10.1.0.70/24', cls=dualStackHost, v6Addr='1000::70/64' )
+ s71_host = self.addHost( 'h71', ip='10.1.0.71/24', cls=dualStackHost, v6Addr='1000::71/64' )
+ s72_host = self.addHost( 'h72', ip='10.1.0.72/24', cls=dualStackHost, v6Addr='1000::72/64' )
+ s73_host = self.addHost( 'h73', ip='10.1.0.73/24', cls=dualStackHost, v6Addr='1000::73/64' )
+ s74_host = self.addHost( 'h74', ip='10.1.0.74/24', cls=dualStackHost, v6Addr='1000::74/64' )
+ s75_host = self.addHost( 'h75', ip='10.1.0.75/24', cls=dualStackHost, v6Addr='1000::75/64' )
+ s76_host = self.addHost( 'h76', ip='10.1.0.76/24', cls=dualStackHost, v6Addr='1000::76/64' )
+ s77_host = self.addHost( 'h77', ip='10.1.0.77/24', cls=dualStackHost, v6Addr='1000::77/64' )
+ s78_host = self.addHost( 'h78', ip='10.1.0.78/24', cls=dualStackHost, v6Addr='1000::78/64' )
+
+ # add edges between switch and corresponding host
+ #self.addLink( s1 , s1_host )
+ #self.addLink( s2 , s2_host )
+ #self.addLink( s3 , s3_host )
+ #self.addLink( s4 , s4_host )
+ #self.addLink( s5 , s5_host )
+ #self.addLink( s6 , s6_host )
+ #self.addLink( s7 , s7_host )
+ #self.addLink( s8 , s8_host )
+ #self.addLink( s9 , s9_host )
+ #self.addLink( s10 , s10_host )
+ self.addLink( s11 , s11_host )
+ self.addLink( s12 , s12_host )
+ self.addLink( s13 , s13_host )
+ self.addLink( s14 , s14_host )
+ self.addLink( s15 , s15_host )
+ self.addLink( s16 , s16_host )
+ self.addLink( s17 , s17_host )
+ self.addLink( s18 , s18_host )
+ self.addLink( s19 , s19_host )
+ self.addLink( s20 , s20_host )
+ self.addLink( s21 , s21_host )
+ self.addLink( s22 , s22_host )
+ self.addLink( s23 , s23_host )
+ self.addLink( s24 , s24_host )
+ self.addLink( s25 , s25_host )
+ self.addLink( s26 , s26_host )
+ self.addLink( s27 , s27_host )
+ self.addLink( s28 , s28_host )
+ self.addLink( s29 , s29_host )
+ self.addLink( s30 , s30_host )
+ self.addLink( s31 , s31_host )
+ self.addLink( s32 , s32_host )
+ self.addLink( s33 , s33_host )
+ self.addLink( s34 , s34_host )
+ self.addLink( s35 , s35_host )
+ self.addLink( s36 , s36_host )
+ self.addLink( s37 , s37_host )
+ self.addLink( s38 , s38_host )
+ self.addLink( s39 , s39_host )
+ self.addLink( s40 , s40_host )
+ self.addLink( s41 , s41_host )
+ self.addLink( s42 , s42_host )
+ self.addLink( s43 , s43_host )
+ self.addLink( s44 , s44_host )
+ self.addLink( s45 , s45_host )
+ self.addLink( s46 , s46_host )
+ self.addLink( s47 , s47_host )
+ self.addLink( s48 , s48_host )
+ self.addLink( s49 , s49_host )
+ self.addLink( s50 , s50_host )
+ self.addLink( s51 , s51_host )
+ self.addLink( s52 , s52_host )
+ self.addLink( s53 , s53_host )
+ self.addLink( s54 , s54_host )
+ self.addLink( s55 , s55_host )
+ self.addLink( s56 , s56_host )
+ self.addLink( s57 , s57_host )
+ self.addLink( s58 , s58_host )
+ self.addLink( s59 , s59_host )
+ self.addLink( s60 , s60_host )
+ self.addLink( s61 , s61_host )
+ self.addLink( s62 , s62_host )
+ self.addLink( s63 , s63_host )
+ self.addLink( s64 , s64_host )
+ self.addLink( s65 , s65_host )
+ self.addLink( s66 , s66_host )
+ self.addLink( s67 , s67_host )
+ self.addLink( s68 , s68_host )
+ self.addLink( s69 , s69_host )
+ self.addLink( s70 , s70_host )
+ self.addLink( s71 , s71_host )
+ self.addLink( s72 , s72_host )
+ self.addLink( s73 , s73_host )
+ self.addLink( s74 , s74_host )
+ self.addLink( s75 , s75_host )
+ self.addLink( s76 , s76_host )
+ self.addLink( s77 , s77_host )
+ self.addLink( s78 , s78_host )
+
+ #info( '*** Add Leaf links\n')
+ self.addLink(s1, s9)
+ self.addLink(s2, s10)
+ self.addLink(s3, s9)
+ self.addLink(s4, s10)
+ self.addLink(s5, s9)
+ self.addLink(s6, s10)
+ self.addLink(s7, s9)
+ self.addLink(s8, s10)
+ self.addLink(s9, s11)
+ self.addLink(s9, s12)
+ self.addLink(s10, s13)
+ self.addLink(s10, s14)
+ self.addLink(s11, s12)
+ self.addLink(s13, s14)
+
+ #info( '*** Add Spine-1 links\n')
+ self.addLink(s15, s1)
+ self.addLink(s15, s2)
+ self.addLink(s16, s1)
+ self.addLink(s16, s2)
+ self.addLink(s17, s1)
+ self.addLink(s17, s2)
+ self.addLink(s18, s1)
+ self.addLink(s18, s2)
+ self.addLink(s19, s1)
+ self.addLink(s19, s2)
+ self.addLink(s20, s1)
+ self.addLink(s20, s2)
+ self.addLink(s21, s1)
+ self.addLink(s21, s2)
+ self.addLink(s22, s1)
+ self.addLink(s22, s2)
+ self.addLink(s23, s1)
+ self.addLink(s23, s2)
+ self.addLink(s24, s1)
+ self.addLink(s24, s2)
+ self.addLink(s25, s1)
+ self.addLink(s25, s2)
+ self.addLink(s26, s1)
+ self.addLink(s26, s2)
+ self.addLink(s27, s1)
+ self.addLink(s27, s2)
+ self.addLink(s28, s1)
+ self.addLink(s28, s2)
+ self.addLink(s29, s1)
+ self.addLink(s29, s2)
+ self.addLink(s30, s1)
+ self.addLink(s30, s2)
+
+ #info( '*** Add Spine-2 links\n')
+ self.addLink(s31, s3)
+ self.addLink(s31, s4)
+ self.addLink(s32, s3)
+ self.addLink(s32, s4)
+ self.addLink(s33, s3)
+ self.addLink(s33, s4)
+ self.addLink(s34, s3)
+ self.addLink(s34, s4)
+ self.addLink(s35, s3)
+ self.addLink(s35, s4)
+ self.addLink(s36, s3)
+ self.addLink(s36, s4)
+ self.addLink(s37, s3)
+ self.addLink(s37, s4)
+ self.addLink(s38, s3)
+ self.addLink(s38, s4)
+ self.addLink(s39, s3)
+ self.addLink(s39, s4)
+ self.addLink(s40, s3)
+ self.addLink(s40, s4)
+ self.addLink(s41, s3)
+ self.addLink(s41, s4)
+ self.addLink(s42, s3)
+ self.addLink(s42, s4)
+ self.addLink(s43, s3)
+ self.addLink(s43, s4)
+ self.addLink(s44, s3)
+ self.addLink(s44, s4)
+ self.addLink(s45, s3)
+ self.addLink(s45, s4)
+ self.addLink(s46, s3)
+ self.addLink(s46, s4)
+
+ #info( '*** Add Spine-3 links\n')
+ self.addLink(s47, s5)
+ self.addLink(s47, s6)
+ self.addLink(s48, s5)
+ self.addLink(s48, s6)
+ self.addLink(s49, s5)
+ self.addLink(s49, s6)
+ self.addLink(s50, s5)
+ self.addLink(s50, s6)
+ self.addLink(s51, s5)
+ self.addLink(s51, s6)
+ self.addLink(s52, s5)
+ self.addLink(s52, s6)
+ self.addLink(s53, s5)
+ self.addLink(s53, s6)
+ self.addLink(s54, s5)
+ self.addLink(s54, s6)
+ self.addLink(s55, s5)
+ self.addLink(s55, s6)
+ self.addLink(s56, s5)
+ self.addLink(s56, s6)
+ self.addLink(s57, s5)
+ self.addLink(s57, s6)
+ self.addLink(s58, s5)
+ self.addLink(s58, s6)
+ self.addLink(s59, s5)
+ self.addLink(s59, s6)
+ self.addLink(s60, s5)
+ self.addLink(s60, s6)
+ self.addLink(s61, s5)
+ self.addLink(s61, s6)
+ self.addLink(s62, s5)
+ self.addLink(s62, s6)
+
+ #info( '*** Add Spine-4 links\n')
+ self.addLink(s63, s7)
+ self.addLink(s63, s8)
+ self.addLink(s64, s7)
+ self.addLink(s64, s8)
+ self.addLink(s65, s7)
+ self.addLink(s65, s8)
+ self.addLink(s66, s7)
+ self.addLink(s66, s8)
+ self.addLink(s67, s7)
+ self.addLink(s67, s8)
+ self.addLink(s68, s7)
+ self.addLink(s68, s8)
+ self.addLink(s69, s7)
+ self.addLink(s69, s8)
+ self.addLink(s70, s7)
+ self.addLink(s70, s8)
+ self.addLink(s71, s7)
+ self.addLink(s71, s8)
+ self.addLink(s72, s7)
+ self.addLink(s72, s8)
+ self.addLink(s73, s7)
+ self.addLink(s73, s8)
+ self.addLink(s74, s7)
+ self.addLink(s74, s8)
+ self.addLink(s75, s7)
+ self.addLink(s75, s8)
+ self.addLink(s76, s7)
+ self.addLink(s76, s8)
+ self.addLink(s77, s7)
+ self.addLink(s77, s8)
+ self.addLink(s78, s7)
+ self.addLink(s78, s8)
+
+topos = { 'spine': ( lambda: spineTopo() ) }
+
+# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
+
+def setupNetwork():
+ "Create network"
+ topo = spineTopo()
+ #if controller_ip == '':
+ #controller_ip = '10.0.2.2';
+ # controller_ip = '127.0.0.1';
+ network = Mininet(topo=topo, switch=OVSSwitch, link=TCLink, autoSetMacs = True, controller=None)
+ network.start()
+ CLI( network )
+ network.stop()
+
+if __name__ == '__main__':
+ setLogLevel('info')
+ #setLogLevel('debug')
+ setupNetwork()
diff --git a/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py b/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
index b1a5d9d..ff886a2 100644
--- a/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
+++ b/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
@@ -118,8 +118,8 @@
# Discover hosts using arping incase pingall discovery failed
main.log.info( itemName + ": Discover host using arping" )
- main.Mininet1.arping( host=host1 )
- main.Mininet1.arping( host=host2 )
+ main.Mininet1.arping( srcHost=host1, dstHost=host2 )
+ main.Mininet1.arping( srcHost=host2, dstHost=host1 )
host1 = main.CLIs[ 0 ].getHost( mac=h1Mac )
host2 = main.CLIs[ 0 ].getHost( mac=h2Mac )
@@ -1137,10 +1137,8 @@
def pingallHosts( main, hostList ):
# Ping all host in the hosts list variable
- print "Pinging : ", hostList
- pingResult = main.TRUE
- pingResult = main.Mininet1.pingallHosts( hostList )
- return pingResult
+ main.log.info( "Pinging: " + str( hostList ) )
+ return main.Mininet1.pingallHosts( hostList )
def getHostsData( main ):
"""
diff --git a/TestON/tests/FUNCintent/FUNCintent.topo b/TestON/tests/FUNCintent/FUNCintent.topo
index 8b30c31..617e8c0 100755
--- a/TestON/tests/FUNCintent/FUNCintent.topo
+++ b/TestON/tests/FUNCintent/FUNCintent.topo
@@ -40,7 +40,7 @@
</ONOScli3>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>admin</user>
<password></password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/FUNCintentRest/Dependency/FuncIntentFunction.py b/TestON/tests/FUNCintentRest/Dependency/FuncIntentFunction.py
index 6bbbb84..2dadea4 100644
--- a/TestON/tests/FUNCintentRest/Dependency/FuncIntentFunction.py
+++ b/TestON/tests/FUNCintentRest/Dependency/FuncIntentFunction.py
@@ -6,6 +6,7 @@
import time
import copy
import json
+import types
def __init__( self ):
self.default = ''
@@ -111,8 +112,8 @@
# Discover hosts using arping
if not main.hostsData:
main.log.info( itemName + ": Discover host using arping" )
- main.Mininet1.arping( host=host1 )
- main.Mininet1.arping( host=host2 )
+ main.Mininet1.arping( srcHost=host1, dstHost=host2 )
+ main.Mininet1.arping( srcHost=host2, dstHost=host1 )
h1Id = main.CLIs[ 0 ].getHost( mac=h1Mac )
h2Id = main.CLIs[ 0 ].getHost( mac=h2Mac )
@@ -125,9 +126,9 @@
intent1 = main.CLIs[ onosNode ].addHostIntent( hostIdOne=h1Id,
hostIdTwo=h2Id )
- time.sleep( main.hostIntentSleep )
+ # Get all intents ID in the system, time delay right after intents are added
+ time.sleep( main.addIntentSleep )
intentsId = main.CLIs[ 0 ].getIntentsId()
- print intentsId
# Check intents state
time.sleep( main.checkIntentSleep )
@@ -332,8 +333,10 @@
ipDst=ip1,
tcpSrc=tcp2,
tcpDst=tcp1 )
+
+ # Get all intents ID in the system, time delay right after intents are added
+ time.sleep( main.addIntentSleep )
intentsId = main.CLIs[ 0 ].getIntentsId()
- print intentsId
# Check intents state
time.sleep( main.checkIntentSleep )
@@ -415,6 +418,242 @@
return stepResult
+def pointIntentTcp( main,
+ name,
+ host1,
+ host2,
+ onosNode=0,
+ deviceId1="",
+ deviceId2="",
+ port1="",
+ port2="",
+ ethType="",
+ mac1="",
+ mac2="",
+ bandwidth="",
+ lambdaAlloc=False,
+ ipProto="",
+ ip1="",
+ ip2="",
+ tcp1="",
+ tcp2="",
+ sw1="",
+ sw2="",
+ expectedLink=0 ):
+
+ """
+ Description:
+ Verify add-point-intent only for TCP
+ Steps:
+ - Get device ids | ports
+ - Add point intents
+ - Check intents
+ - Verify flows
+ - Ping hosts
+ - Reroute
+ - Link down
+ - Verify flows
+ - Check topology
+ - Ping hosts
+ - Link up
+ - Verify flows
+ - Check topology
+ - Ping hosts
+ - Remove intents
+ Required:
+ name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
+ host1 - Name of first host
+ host2 - Name of second host
+ Optional:
+ onosNode - ONOS node to install the intents in main.CLIs[ ]
+ 0 by default so that it will always use the first
+ ONOS node
+ deviceId1 - ONOS device id of the first switch, the same as the
+ location of the first host eg. of:0000000000000001/1,
+ located at device 1 port 1
+ deviceId2 - ONOS device id of the second switch
+ port1 - The port number where the first host is attached
+ port2 - The port number where the second host is attached
+ ethType - Ethernet type eg. IPV4, IPV6
+ mac1 - Mac address of first host
+ mac2 - Mac address of the second host
+ bandwidth - Bandwidth capacity
+ lambdaAlloc - Allocate lambda, defaults to False
+ ipProto - IP protocol
+ ip1 - IP address of first host
+ ip2 - IP address of second host
+ tcp1 - TCP port of first host
+ tcp2 - TCP port of second host
+ sw1 - First switch to bring down & up for rerouting purpose
+ sw2 - Second switch to bring down & up for rerouting purpose
+ expectedLink - Expected link when the switches are down, it should
+ be two links lower than the links before the two
+ switches are down
+ """
+
+ assert main, "There is no main variable"
+ assert name, "variable name is empty"
+ assert host1 and host2, "You must specify hosts"
+
+ global itemName
+ itemName = name
+ host1 = host1
+ host2 = host2
+ hostNames = [ host1, host2 ]
+ intentsId = []
+
+ iperfResult = main.TRUE
+ intentResult = main.TRUE
+ removeIntentResult = main.TRUE
+ flowResult = main.TRUE
+ topoResult = main.TRUE
+ linkDownResult = main.TRUE
+ linkUpResult = main.TRUE
+ onosNode = int( onosNode )
+
+ # Adding bidirectional point intents
+ main.log.info( itemName + ": Adding point intents" )
+ intent1 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
+ egressDevice=deviceId2,
+ ingressPort=port1,
+ egressPort=port2,
+ ethType=ethType,
+ ethSrc=mac1,
+ ethDst=mac2,
+ bandwidth=bandwidth,
+ lambdaAlloc=lambdaAlloc,
+ ipProto=ipProto,
+ ipSrc=ip1,
+ ipDst=ip2,
+ tcpSrc=tcp1,
+ tcpDst="" )
+
+ intent2 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
+ egressDevice=deviceId1,
+ ingressPort=port2,
+ egressPort=port1,
+ ethType=ethType,
+ ethSrc=mac2,
+ ethDst=mac1,
+ bandwidth=bandwidth,
+ lambdaAlloc=lambdaAlloc,
+ ipProto=ipProto,
+ ipSrc=ip2,
+ ipDst=ip1,
+ tcpSrc=tcp2,
+ tcpDst="" )
+
+ intent3 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId1,
+ egressDevice=deviceId2,
+ ingressPort=port1,
+ egressPort=port2,
+ ethType=ethType,
+ ethSrc=mac1,
+ ethDst=mac2,
+ bandwidth=bandwidth,
+ lambdaAlloc=lambdaAlloc,
+ ipProto=ipProto,
+ ipSrc=ip1,
+ ipDst=ip2,
+ tcpSrc="",
+ tcpDst=tcp2 )
+
+ intent4 = main.CLIs[ onosNode ].addPointIntent( ingressDevice=deviceId2,
+ egressDevice=deviceId1,
+ ingressPort=port2,
+ egressPort=port1,
+ ethType=ethType,
+ ethSrc=mac2,
+ ethDst=mac1,
+ bandwidth=bandwidth,
+ lambdaAlloc=lambdaAlloc,
+ ipProto=ipProto,
+ ipSrc=ip2,
+ ipDst=ip1,
+ tcpSrc="",
+ tcpDst=tcp1 )
+
+ # Get all intents ID in the system, time delay right after intents are added
+ time.sleep( main.addIntentSleep )
+ intentsId = main.CLIs[ 0 ].getIntentsId()
+ # Check intents state
+ time.sleep( main.checkIntentSleep )
+ intentResult = checkIntentState( main, intentsId )
+ # Check flows count in each node
+ checkFlowsCount( main )
+
+ # Check intents state again if first check fails...
+ if not intentResult:
+ intentResult = checkIntentState( main, intentsId )
+
+ # Check flows count in each node
+ checkFlowsCount( main )
+
+ # Verify flows
+ checkFlowsState( main )
+
+ # Run iperf to both host
+ iperfResult = iperfResult and main.Mininet1.iperftcp( host1,
+ host2, 10 )
+
+ # Test rerouting if these variables exist
+ if sw1 and sw2 and expectedLink:
+ # link down
+ linkDownResult = link( main, sw1, sw2, "down" )
+ intentResult = intentResult and checkIntentState( main, intentsId )
+
+ # Check flows count in each node
+ checkFlowsCount( main )
+ # Verify flows
+ checkFlowsState( main )
+
+ # Check OnosTopology
+ topoResult = checkTopology( main, expectedLink )
+
+ # Run iperf to both host
+ iperfResult = iperfResult and main.Mininet1.iperftcp( host1,
+ host2, 10 )
+
+ intentResult = checkIntentState( main, intentsId )
+
+ # Checks ONOS state in link down
+ if linkDownResult and topoResult and iperfResult and intentResult:
+ main.log.info( itemName + ": Successfully brought link down" )
+ else:
+ main.log.error( itemName + ": Failed to bring link down" )
+
+ # link up
+ linkUpResult = link( main, sw1, sw2, "up" )
+ time.sleep( main.rerouteSleep )
+
+ # Check flows count in each node
+ checkFlowsCount( main )
+ # Verify flows
+ checkFlowsState( main )
+
+ # Check OnosTopology
+ topoResult = checkTopology( main, main.numLinks )
+
+ # Run iperf to both host
+ iperfResult = iperfResult and main.Mininet1.iperftcp( host1,
+ host2, 10 )
+
+ intentResult = checkIntentState( main, intentsId )
+
+ # Checks ONOS state in link up
+ if linkUpResult and topoResult and iperfResult and intentResult:
+ main.log.info( itemName + ": Successfully brought link back up" )
+ else:
+ main.log.error( itemName + ": Failed to bring link back up" )
+
+ # Remove all intents
+ removeIntentResult = removeAllIntents( main )
+
+ stepResult = iperfResult and linkDownResult and linkUpResult \
+ and intentResult and removeIntentResult
+
+ return stepResult
+
def singleToMultiIntent( main,
name,
hostNames,
@@ -901,14 +1140,14 @@
return stepResult
-def pingallHosts( main, hostList, pingType="ipv4" ):
+def pingallHosts( main, hostList ):
# Ping all host in the hosts list variable
print "Pinging : ", hostList
pingResult = main.TRUE
- pingResult = main.Mininet1.pingallHosts( hostList, pingType )
+ pingResult = main.Mininet1.pingallHosts( hostList )
return pingResult
-def getHostsData( main ):
+def getHostsData( main, hostList ):
"""
Use fwd app and pingall to discover all the hosts
"""
@@ -921,7 +1160,12 @@
if not activateResult:
main.log.error( "Something went wrong installing fwd app" )
time.sleep( main.fwdSleep )
- pingResult = main.Mininet1.pingall( timeout = 600 )
+ if isinstance( hostList[ 0 ], types.StringType ):
+ main.Mininet1.pingallHosts( hostList )
+ elif isinstance( hostList[ 0 ], types.ListType ):
+ for i in xrange( len( hostList ) ):
+ main.Mininet1.pingallHosts( hostList[ i ] )
+
hostsJson = json.loads( main.CLIs[ 0 ].hosts() )
hosts = main.Mininet1.getHosts().keys()
# TODO: Make better use of new getHosts function
diff --git a/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py b/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
index 5552aa9..5edf7f7 100755
--- a/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
+++ b/TestON/tests/FUNCintentRest/Dependency/newFuncTopo.py
@@ -16,121 +16,121 @@
class VLANHost( Host ):
def config( self, vlan=100, **params ):
- r = super( Host, self ).config( **params )
- intf = self.defaultIntf()
- self.cmd( 'ifconfig %s inet 0' % intf )
- self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
- self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
- newName = '%s.%d' % ( intf, vlan )
- intf.name = newName
- self.nameToIntf[ newName ] = intf
- return r
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ifconfig %s inet 0' % intf )
+ self.cmd( 'vconfig add %s %d' % ( intf, vlan ) )
+ self.cmd( 'ifconfig %s.%d inet %s' % ( intf, vlan, params['ip'] ) )
+ newName = '%s.%d' % ( intf, vlan )
+ intf.name = newName
+ self.nameToIntf[ newName ] = intf
+ return r
class IPv6Host( Host ):
def config( self, v6Addr='1000:1/64', **params ):
- r = super( Host, self ).config( **params )
- intf = self.defaultIntf()
- self.cmd( 'ifconfig %s inet 0' % intf )
- self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
- return r
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ifconfig %s inet 0' % intf )
+ self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+ return r
class dualStackHost( Host ):
def config( self, v6Addr='2000:1/64', **params ):
- r = super( Host, self ).config( **params )
- intf = self.defaultIntf()
- self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
- return r
+ r = super( Host, self ).config( **params )
+ intf = self.defaultIntf()
+ self.cmd( 'ip -6 addr add %s dev %s' % ( v6Addr, intf ) )
+ return r
class MyTopo( Topo ):
- def __init__( self ):
- # Initialize topology
- Topo.__init__( self )
- # Switch S5 Hosts
- host1=self.addHost( 'h1', ip='10.1.0.2/24' )
- host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
- host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
- #VLAN hosts
- host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
- host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
- #VPN-1 and VPN-2 Hosts
- host6=self.addHost( 'h6', ip='11.1.0.2/24' )
- host7=self.addHost( 'h7', ip='12.1.0.2/24' )
- #Multicast Sender
- host8=self.addHost( 'h8', ip='10.1.0.4/24' )
+ def __init__( self ):
+ # Initialize topology
+ Topo.__init__( self )
+ # Switch S5 Hosts
+ host1=self.addHost( 'h1', ip='10.1.0.2/24' )
+ host2=self.addHost( 'h2', cls=IPv6Host, v6Addr='1000::2/64' )
+ host3=self.addHost( 'h3', ip='10.1.0.3/24', cls=dualStackHost, v6Addr='2000::2/64' )
+ #VLAN hosts
+ host4=self.addHost( 'h4', ip='100.1.0.2/24', cls=VLANHost, vlan=100 )
+ host5=self.addHost( 'h5', ip='200.1.0.2/24', cls=VLANHost, vlan=200 )
+ #VPN-1 and VPN-2 Hosts
+ host6=self.addHost( 'h6', ip='11.1.0.2/24' )
+ host7=self.addHost( 'h7', ip='12.1.0.2/24' )
+ #Multicast Sender
+ host8=self.addHost( 'h8', ip='10.1.0.4/24' )
- # Switch S6 Hosts
- host9=self.addHost( 'h9', ip='10.1.0.5/24' )
- host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
- host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
- #VLAN hosts
- host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
- host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
- #VPN-1 and VPN-2 Hosts
- host14=self.addHost( 'h14', ip='11.1.0.3/24' )
- host15=self.addHost( 'h15', ip='12.1.0.3/24' )
- #Multicast Receiver
- host16=self.addHost( 'h16', ip='10.1.0.7/24' )
+ # Switch S6 Hosts
+ host9=self.addHost( 'h9', ip='10.1.0.5/24' )
+ host10=self.addHost( 'h10', cls=IPv6Host, v6Addr='1000::3/64' )
+ host11=self.addHost( 'h11', ip='10.1.0.6/24', cls=dualStackHost, v6Addr='2000::3/64' )
+ #VLAN hosts
+ host12=self.addHost( 'h12', ip='100.1.0.3/24', cls=VLANHost, vlan=100 )
+ host13=self.addHost( 'h13', ip='200.1.0.3/24', cls=VLANHost, vlan=200 )
+ #VPN-1 and VPN-2 Hosts
+ host14=self.addHost( 'h14', ip='11.1.0.3/24' )
+ host15=self.addHost( 'h15', ip='12.1.0.3/24' )
+ #Multicast Receiver
+ host16=self.addHost( 'h16', ip='10.1.0.7/24' )
- # Switch S7 Hosts
- host17=self.addHost( 'h17', ip='10.1.0.8/24' )
- host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
- host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
- #VLAN hosts
- host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
- host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
- #VPN-1 and VPN-2 Hosts
- host22=self.addHost( 'h22', ip='11.1.0.4/24' )
- host23=self.addHost( 'h23', ip='12.1.0.4/24' )
- #Multicast Receiver
- host24=self.addHost( 'h24', ip='10.1.0.10/24' )
+ # Switch S7 Hosts
+ host17=self.addHost( 'h17', ip='10.1.0.8/24' )
+ host18=self.addHost( 'h18', cls=IPv6Host, v6Addr='1000::4/64' )
+ host19=self.addHost( 'h19', ip='10.1.0.9/24', cls=dualStackHost, v6Addr='2000::4/64' )
+ #VLAN hosts
+ host20=self.addHost( 'h20', ip='100.1.0.4/24', cls=VLANHost, vlan=100 )
+ host21=self.addHost( 'h21', ip='200.1.0.4/24', cls=VLANHost, vlan=200 )
+ #VPN-1 and VPN-2 Hosts
+ host22=self.addHost( 'h22', ip='11.1.0.4/24' )
+ host23=self.addHost( 'h23', ip='12.1.0.4/24' )
+ #Multicast Receiver
+ host24=self.addHost( 'h24', ip='10.1.0.10/24' )
- s1 = self.addSwitch( 's1' )
- s2 = self.addSwitch( 's2' )
- s3 = self.addSwitch( 's3' )
- s4 = self.addSwitch( 's4' )
- s5 = self.addSwitch( 's5' )
- s6 = self.addSwitch( 's6' )
- s7 = self.addSwitch( 's7' )
+ s1 = self.addSwitch( 's1' )
+ s2 = self.addSwitch( 's2' )
+ s3 = self.addSwitch( 's3' )
+ s4 = self.addSwitch( 's4' )
+ s5 = self.addSwitch( 's5' )
+ s6 = self.addSwitch( 's6' )
+ s7 = self.addSwitch( 's7' )
- self.addLink(s5,host1)
- self.addLink(s5,host2)
- self.addLink(s5,host3)
- self.addLink(s5,host4)
- self.addLink(s5,host5)
- self.addLink(s5,host6)
- self.addLink(s5,host7)
- self.addLink(s5,host8)
+ self.addLink(s5,host1)
+ self.addLink(s5,host2)
+ self.addLink(s5,host3)
+ self.addLink(s5,host4)
+ self.addLink(s5,host5)
+ self.addLink(s5,host6)
+ self.addLink(s5,host7)
+ self.addLink(s5,host8)
- self.addLink(s6,host9)
- self.addLink(s6,host10)
- self.addLink(s6,host11)
- self.addLink(s6,host12)
- self.addLink(s6,host13)
- self.addLink(s6,host14)
- self.addLink(s6,host15)
- self.addLink(s6,host16)
+ self.addLink(s6,host9)
+ self.addLink(s6,host10)
+ self.addLink(s6,host11)
+ self.addLink(s6,host12)
+ self.addLink(s6,host13)
+ self.addLink(s6,host14)
+ self.addLink(s6,host15)
+ self.addLink(s6,host16)
- self.addLink(s7,host17)
- self.addLink(s7,host18)
- self.addLink(s7,host19)
- self.addLink(s7,host20)
- self.addLink(s7,host21)
- self.addLink(s7,host22)
- self.addLink(s7,host23)
- self.addLink(s7,host24)
+ self.addLink(s7,host17)
+ self.addLink(s7,host18)
+ self.addLink(s7,host19)
+ self.addLink(s7,host20)
+ self.addLink(s7,host21)
+ self.addLink(s7,host22)
+ self.addLink(s7,host23)
+ self.addLink(s7,host24)
- self.addLink(s1,s2)
- self.addLink(s1,s3)
- self.addLink(s1,s4)
- self.addLink(s1,s5)
- self.addLink(s2,s3)
- self.addLink(s2,s5)
- self.addLink(s2,s6)
- self.addLink(s3,s4)
- self.addLink(s3,s6)
- self.addLink(s4,s7)
- topos = { 'mytopo': ( lambda: MyTopo() ) }
+ self.addLink(s1,s2)
+ self.addLink(s1,s3)
+ self.addLink(s1,s4)
+ self.addLink(s1,s5)
+ self.addLink(s2,s3)
+ self.addLink(s2,s5)
+ self.addLink(s2,s6)
+ self.addLink(s3,s4)
+ self.addLink(s3,s6)
+ self.addLink(s4,s7)
+ topos = { 'mytopo': ( lambda: MyTopo() ) }
# HERE THE CODE DEFINITION OF THE TOPOLOGY ENDS
diff --git a/TestON/tests/FUNCintentRest/FUNCintentRest.params b/TestON/tests/FUNCintentRest/FUNCintentRest.params
index edb8c85..4158f33 100644
--- a/TestON/tests/FUNCintentRest/FUNCintentRest.params
+++ b/TestON/tests/FUNCintentRest/FUNCintentRest.params
@@ -39,7 +39,7 @@
<reroute>5</reroute>
<checkintent>5</checkintent>
<fwd>5</fwd>
- <hostintent>3</hostintent>
+ <addIntent>3</addIntent>
</SLEEP>
<MININET>
diff --git a/TestON/tests/FUNCintentRest/FUNCintentRest.py b/TestON/tests/FUNCintentRest/FUNCintentRest.py
index ef204e9..0bc5c3c 100644
--- a/TestON/tests/FUNCintentRest/FUNCintentRest.py
+++ b/TestON/tests/FUNCintentRest/FUNCintentRest.py
@@ -52,7 +52,7 @@
[ 'checkintent' ] )
main.rerouteSleep = int( main.params[ 'SLEEP' ][ 'reroute' ] )
main.fwdSleep = int( main.params[ 'SLEEP' ][ 'fwd' ] )
- main.hostIntentSleep = int( main.params[ 'SLEEP' ][ 'hostintent' ] )
+ main.addIntentSleep = int( main.params[ 'SLEEP' ][ 'addIntent' ] )
gitPull = main.params[ 'GIT' ][ 'pull' ]
main.numSwitch = int( main.params[ 'MININET' ][ 'switch' ] )
main.numLinks = int( main.params[ 'MININET' ][ 'links' ] )
@@ -411,8 +411,22 @@
main.case( "Discover all hosts" )
stepResult = main.TRUE
- main.step( "Discover all hosts using pingall " )
- stepResult = main.intentFunction.getHostsData( main )
+ main.step( "Discover all ipv4 host hosts " )
+ hostList = []
+ # List of host with default vlan
+ defaultHosts = [ "h1", "h3", "h8", "h9", "h11", "h16", "h17", "h19", "h24" ]
+ # Lists of host with unique vlan
+ vlanHosts1 = [ "h4", "h12", "h20" ]
+ vlanHosts2 = [ "h5", "h13", "h21" ]
+ vlanHosts3 = [ "h6", "h14", "h22" ]
+ vlanHosts4 = [ "h7", "h15", "h23" ]
+ hostList.append( defaultHosts )
+ hostList.append( vlanHosts1 )
+ hostList.append( vlanHosts2 )
+ hostList.append( vlanHosts3 )
+ hostList.append( vlanHosts4 )
+
+ stepResult = main.intentFunction.getHostsData( main, hostList )
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully discovered hosts",
@@ -716,13 +730,13 @@
"failed using IPV4 type with " +
"no MAC addresses" )
- main.step( "SDNIP-TCP: Add point intents between h1 and h9" )
+ main.step( "SDNIP-ICMP: Add point intents between h1 and h9" )
stepResult = main.TRUE
mac1 = main.hostsData[ 'h1' ][ 'mac' ]
mac2 = main.hostsData[ 'h9' ][ 'mac' ]
try:
- ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/24"
- ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/32"
+ ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/32"
except KeyError:
main.log.debug( "Key Error getting IP addresses of h1 | h9 in" +
"main.hostsData" )
@@ -736,7 +750,7 @@
stepResult = main.intentFunction.pointIntent(
main,
- name="SDNIP-TCP",
+ name="SDNIP-ICMP",
host1="h1",
host2="h9",
deviceId1="of:0000000000000005/1",
@@ -750,26 +764,26 @@
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
- onpass="SDNIP-TCP: Point intent test " +
+ onpass="SDNIP-ICMP: Point intent test " +
"successful using IPV4 type with " +
"IP protocol TCP enabled",
- onfail="SDNIP-TCP: Point intent test " +
+ onfail="SDNIP-ICMP: Point intent test " +
"failed using IPV4 type with " +
"IP protocol TCP enabled" )
- main.step( "SDNIP-ICMP: Add point intents between h1 and h9" )
+ main.step( "SDNIP-TCP: Add point intents between h1 and h9" )
stepResult = main.TRUE
mac1 = main.hostsData[ 'h1' ][ 'mac' ]
mac2 = main.hostsData[ 'h9' ][ 'mac' ]
- ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/24"
- ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/32"
+ ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/32"
ipProto = main.params[ 'SDNIP' ][ 'tcpProto' ]
tcp1 = main.params[ 'SDNIP' ][ 'srcPort' ]
tcp2 = main.params[ 'SDNIP' ][ 'dstPort' ]
- stepResult = main.intentFunction.pointIntent(
+ stepResult = main.intentFunction.pointIntentTcp(
main,
- name="SDNIP-ICMP",
+ name="SDNIP-TCP",
host1="h1",
host2="h9",
deviceId1="of:0000000000000005/1",
@@ -777,16 +791,20 @@
mac1=mac1,
mac2=mac2,
ethType="IPV4",
- ipProto=ipProto )
+ ipProto=ipProto,
+ ip1=ip1,
+ ip2=ip2,
+ tcp1=tcp1,
+ tcp2=tcp2 )
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
- onpass="SDNIP-ICMP: Point intent test " +
+ onpass="SDNIP-TCP: Point intent test " +
"successful using IPV4 type with " +
- "IP protocol ICMP enabled",
- onfail="SDNIP-ICMP: Point intent test " +
+ "IP protocol TCP enabled",
+ onfail="SDNIP-TCP: Point intent test " +
"failed using IPV4 type with " +
- "IP protocol ICMP enabled" )
+ "IP protocol TCP enabled" )
main.step( "DUALSTACK1: Add point intents between h1 and h9" )
stepResult = main.TRUE
diff --git a/TestON/tests/FUNCintentRest/__init__.py b/TestON/tests/FUNCintentRest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FUNCintentRest/__init__.py
diff --git a/TestON/tests/SDNIPfunction/SDNIPfunction.params b/TestON/tests/SDNIPfunction/SDNIPfunction.params
new file mode 100644
index 0000000..44c1cb2
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/SDNIPfunction.params
@@ -0,0 +1,35 @@
+<PARAMS>
+
+ <testcases>100, [4]*5</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>sdnip_single_instance</cellName>
+ </ENV>
+
+ <CTRL>
+ <numCtrl>1</numCtrl>
+ <ip1>10.128.4.52</ip1>
+ <port1>6633</port1>
+ </CTRL>
+
+ <GIT>
+ <autoPull>on</autoPull>
+ <branch1>master</branch1>
+ <branch2>onos-1.2</branch2>
+ </GIT>
+
+ <JSON>
+ <prefix>prefix</prefix>
+ <nextHop>nextHop</nextHop>
+ </JSON>
+
+ <timers>
+ <SdnIpSetup>10</SdnIpSetup>
+ <PingTestWithRoutes>20</PingTestWithRoutes>
+ <PingTestWithoutRoutes>100</PingTestWithoutRoutes>
+ <RouteDelivery>60</RouteDelivery>
+ <PathAvailable>20</PathAvailable>
+ </timers>
+
+</PARAMS>
diff --git a/TestON/tests/SDNIPfunction/SDNIPfunction.py b/TestON/tests/SDNIPfunction/SDNIPfunction.py
new file mode 100644
index 0000000..8c16638
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/SDNIPfunction.py
@@ -0,0 +1,314 @@
+# Testing the functionality of SDN-IP with single ONOS instance
+class SDNIPfunction:
+
+ def __init__(self):
+ self.default = ''
+ global branchName
+
+
+ # This case is to setup ONOS
+ def CASE100(self, main):
+ """
+ CASE100 is to compile ONOS and install it
+ Startup sequence:
+ cell <name>
+ onos-verify-cell
+ git pull
+ mvn clean install
+ onos-package
+ onos-install -f
+ onos-wait-for-start
+ """
+ main.case("Setting up test environment")
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
+
+ main.step("Applying cell variable to environment")
+ cellResult = main.ONOSbench.setCell(cellName)
+ verifyResult = main.ONOSbench.verifyCell()
+
+ branchName = main.ONOSbench.getBranchName()
+ main.log.info("ONOS is on branch: " + branchName)
+
+ main.log.report("Uninstalling ONOS")
+ main.ONOSbench.onosUninstall(ONOS1Ip)
+
+ # cleanInstallResult = main.TRUE
+ # gitPullResult = main.TRUE
+
+ main.step("Git pull")
+ gitPullResult = main.ONOSbench.gitPull()
+
+ main.step("Using mvn clean install")
+ if gitPullResult == main.TRUE:
+ cleanInstallResult = main.ONOSbench.cleanInstall(mciTimeout=1000)
+ else:
+ main.log.warn("Did not pull new code so skipping mvn " +
+ "clean install")
+ cleanInstallResult = main.TRUE
+
+ main.ONOSbench.getVersion(report=True)
+
+ main.step("Creating ONOS package")
+ packageResult = main.ONOSbench.onosPackage(opTimeout=500)
+
+ main.step("Installing ONOS package")
+ onos1InstallResult = main.ONOSbench.onosInstall(options="-f",
+ node=ONOS1Ip)
+
+ main.step("Checking if ONOS is up yet")
+ for i in range(2):
+ onos1Isup = main.ONOSbench.isup(ONOS1Ip, timeout=420)
+ if onos1Isup:
+ break
+ if not onos1Isup:
+ main.log.report("ONOS1 didn't start!")
+
+ cliResult = main.ONOScli.startOnosCli(ONOS1Ip,
+ commandlineTimeout=100, onosStartTimeout=600)
+
+ case1Result = (cleanInstallResult and packageResult and
+ cellResult and verifyResult and
+ onos1InstallResult and
+ onos1Isup and cliResult)
+
+ utilities.assert_equals(expect=main.TRUE, actual=case1Result,
+ onpass="ONOS startup successful",
+ onfail="ONOS startup NOT successful")
+
+ if case1Result == main.FALSE:
+ main.cleanup()
+ main.exit()
+
+ def CASE4(self, main):
+ """
+ Test the SDN-IP functionality
+ allRoutesExpected: all expected routes for all BGP peers
+ routeIntentsExpected: all expected MultiPointToSinglePointIntent \
+ intents
+ bgpIntentsExpected: expected PointToPointIntent intents
+ allRoutesActual: all routes from ONOS LCI
+ routeIntentsActual: actual MultiPointToSinglePointIntent intents from \
+ ONOS CLI
+ bgpIntentsActual: actual PointToPointIntent intents from ONOS CLI
+ """
+ import json
+ import time
+ from operator import eq
+ from time import localtime, strftime
+
+ main.case("This case is to testing the functionality of SDN-IP with \
+ single ONOS instance")
+ SDNIPJSONFILEPATH = \
+ "/home/admin/ONOS/tools/package/config/sdnip.json"
+ # all expected routes for all BGP peers
+ allRoutesExpected = []
+ main.step("Start to generate routes for all BGP peers")
+ main.log.info("Generate prefixes for host3")
+ prefixesHost3 = main.QuaggaCliHost3.generatePrefixes(3, 10)
+ main.log.info(prefixesHost3)
+ # generate route with next hop
+ for prefix in prefixesHost3:
+ allRoutesExpected.append(prefix + "/" + "192.168.20.1")
+ routeIntentsExpectedHost3 = \
+ main.QuaggaCliHost3.generateExpectedOnePeerRouteIntents(
+ prefixesHost3, "192.168.20.1", "00:00:00:00:02:02",
+ SDNIPJSONFILEPATH)
+
+ main.log.info("Generate prefixes for host4")
+ prefixesHost4 = main.QuaggaCliHost4.generatePrefixes(4, 10)
+ main.log.info(prefixesHost4)
+ # generate route with next hop
+ for prefix in prefixesHost4:
+ allRoutesExpected.append(prefix + "/" + "192.168.30.1")
+ routeIntentsExpectedHost4 = \
+ main.QuaggaCliHost4.generateExpectedOnePeerRouteIntents(
+ prefixesHost4, "192.168.30.1", "00:00:00:00:03:01",
+ SDNIPJSONFILEPATH)
+
+ main.log.info("Generate prefixes for host5")
+ prefixesHost5 = main.QuaggaCliHost5.generatePrefixes(5, 10)
+ main.log.info(prefixesHost5)
+ for prefix in prefixesHost5:
+ allRoutesExpected.append(prefix + "/" + "192.168.60.2")
+ routeIntentsExpectedHost5 = \
+ main.QuaggaCliHost5.generateExpectedOnePeerRouteIntents(
+ prefixesHost5, "192.168.60.1", "00:00:00:00:06:02",
+ SDNIPJSONFILEPATH)
+
+ routeIntentsExpected = routeIntentsExpectedHost3 + \
+ routeIntentsExpectedHost4 + routeIntentsExpectedHost5
+
+ main.step("Get links in the network")
+ listResult = main.ONOScli.links(jsonFormat=False)
+ main.log.info(listResult)
+ main.log.info("Activate sdn-ip application")
+ main.ONOScli.activateApp("org.onosproject.sdnip")
+ # wait sdn-ip to finish installing connectivity intents, and the BGP
+ # paths in data plane are ready.
+ time.sleep(int(main.params[ 'timers' ][ 'SdnIpSetup' ]))
+
+ main.step("Login all BGP peers and add routes into peers")
+
+ main.log.info("Login Quagga CLI on host3")
+ main.QuaggaCliHost3.loginQuagga("1.168.30.2")
+ main.log.info("Enter configuration model of Quagga CLI on host3")
+ main.QuaggaCliHost3.enterConfig(64514)
+ main.log.info("Add routes to Quagga on host3")
+ main.QuaggaCliHost3.addRoutes(prefixesHost3, 1)
+
+ main.log.info("Login Quagga CLI on host4")
+ main.QuaggaCliHost4.loginQuagga("1.168.30.3")
+ main.log.info("Enter configuration model of Quagga CLI on host4")
+ main.QuaggaCliHost4.enterConfig(64516)
+ main.log.info("Add routes to Quagga on host4")
+ main.QuaggaCliHost4.addRoutes(prefixesHost4, 1)
+
+ main.log.info("Login Quagga CLI on host5")
+ main.QuaggaCliHost5.loginQuagga("1.168.30.5")
+ main.log.info("Enter configuration model of Quagga CLI on host5")
+ main.QuaggaCliHost5.enterConfig(64521)
+ main.log.info("Add routes to Quagga on host5")
+ main.QuaggaCliHost5.addRoutes(prefixesHost5, 1)
+
+ for i in range(101, 201):
+ prefixesHostX = main.QuaggaCliHost.generatePrefixes(str(i), 10)
+ main.log.info(prefixesHostX)
+ for prefix in prefixesHostX:
+ allRoutesExpected.append(prefix + "/" + "192.168.40."
+ + str(i - 100))
+
+ routeIntentsExpectedHostX = \
+ main.QuaggaCliHost.generateExpectedOnePeerRouteIntents(
+ prefixesHostX, "192.168.40." + str(i - 100),
+ "00:00:%02d:00:00:90" % (i - 101), SDNIPJSONFILEPATH)
+ routeIntentsExpected = routeIntentsExpected + \
+ routeIntentsExpectedHostX
+
+ main.log.info("Login Quagga CLI on host" + str(i))
+ QuaggaCliHostX = getattr(main, ('QuaggaCliHost' + str(i)))
+ QuaggaCliHostX.loginQuagga("1.168.30." + str(i))
+ main.log.info(
+ "Enter configuration model of Quagga CLI on host" + str(i))
+ QuaggaCliHostX.enterConfig(65000 + i - 100)
+ main.log.info("Add routes to Quagga on host" + str(i))
+ QuaggaCliHostX.addRoutes(prefixesHostX, 1)
+ # wait Quagga to finish delivery all routes to each other and to sdn-ip,
+ # plus finish installing all intents.
+ time.sleep(int(main.params[ 'timers' ][ 'RouteDelivery' ]))
+ time.sleep(int(main.params[ 'timers' ][ 'PathAvailable' ]))
+ # get routes inside SDN-IP
+ getRoutesResult = main.ONOScli.routes(jsonFormat=True)
+
+ allRoutesActual = \
+ main.QuaggaCliHost3.extractActualRoutesMaster(getRoutesResult)
+
+ allRoutesStrExpected = str(sorted(allRoutesExpected))
+ allRoutesStrActual = str(allRoutesActual).replace('u', "")
+ main.step("Check routes installed")
+ main.log.info("Routes expected:")
+ main.log.info(allRoutesStrExpected)
+ main.log.info("Routes get from ONOS CLI:")
+ main.log.info(allRoutesStrActual)
+ utilities.assertEquals(
+ expect=allRoutesStrExpected, actual=allRoutesStrActual,
+ onpass="***Routes in SDN-IP are correct!***",
+ onfail="***Routes in SDN-IP are wrong!***")
+
+ getIntentsResult = main.ONOScli.intents(jsonFormat=True)
+
+ main.step("Check MultiPointToSinglePointIntent intents installed")
+ # routeIntentsExpected are generated when generating routes
+ # get route intents from ONOS CLI
+ routeIntentsActualNum = \
+ main.QuaggaCliHost3.extractActualRouteIntentNum(getIntentsResult)
+ routeIntentsExpectedNum = 1030
+ main.log.info("MultiPointToSinglePoint Intent Num expected is:")
+ main.log.info(routeIntentsExpectedNum)
+ main.log.info("MultiPointToSinglePoint Intent NUM Actual is:")
+ main.log.info(routeIntentsActualNum)
+ utilities.assertEquals(
+ expect=True,
+ actual=eq(routeIntentsExpectedNum, routeIntentsActualNum),
+ onpass="***MultiPointToSinglePoint Intent Num in SDN-IP is \
+ correct!***",
+ onfail="***MultiPointToSinglePoint Intent Num in SDN-IP is \
+ wrong!***")
+
+ main.step("Check BGP PointToPointIntent intents installed")
+
+ bgpIntentsActualNum = \
+ main.QuaggaCliHost3.extractActualBgpIntentNum(getIntentsResult)
+ bgpIntentsExpectedNum = 624
+ main.log.info("bgpIntentsExpected num is:")
+ main.log.info(bgpIntentsExpectedNum)
+ main.log.info("bgpIntentsActual num is:")
+ main.log.info(bgpIntentsActualNum)
+ utilities.assertEquals(
+ expect=True,
+ actual=eq(bgpIntentsExpectedNum, bgpIntentsActualNum),
+ onpass="***PointToPointIntent Intent Num in SDN-IP are correct!***",
+ onfail="***PointToPointIntent Intent Num in SDN-IP are wrong!***")
+
+ #============================= Ping Test ========================
+ pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
+ pingTestResultsFile = \
+ "~/SDNIP/TestOnEnv/log/CASE4-ping-results-before-delete-routes-"\
+ + strftime("%Y-%m-%d_%H:%M:%S", localtime()) + ".txt"
+ pingTestResults = main.QuaggaCliHost.pingTest(
+ "1.168.30.100", pingTestScript, pingTestResultsFile)
+ main.log.info(pingTestResults)
+ # wait to finish the ping test
+ time.sleep(int(main.params[ 'timers' ][ 'PingTestWithRoutes' ]))
+
+ #============================= Deleting Routes ==================
+ main.step("Check deleting routes installed")
+ main.QuaggaCliHost3.deleteRoutes(prefixesHost3, 1)
+ main.QuaggaCliHost4.deleteRoutes(prefixesHost4, 1)
+ main.QuaggaCliHost5.deleteRoutes(prefixesHost5, 1)
+
+ for i in range(101, 201):
+ prefixesHostX = main.QuaggaCliHost.generatePrefixes(str(i), 10)
+ main.log.info(prefixesHostX)
+ QuaggaCliHostX = getattr(main, ('QuaggaCliHost' + str(i)))
+ QuaggaCliHostX.deleteRoutes(prefixesHostX, 1)
+ # wait Quagga to finish delivery all routes to each other and to sdn-ip,
+ # plus finish un-installing all intents.
+ time.sleep(int(main.params[ 'timers' ][ 'RouteDelivery' ]))
+ time.sleep(int(main.params[ 'timers' ][ 'PathAvailable' ]))
+
+ getRoutesResult = main.ONOScli.routes(jsonFormat=True)
+ allRoutesActual = \
+ main.QuaggaCliHost3.extractActualRoutesMaster(getRoutesResult)
+ main.log.info("allRoutes_actual = ")
+ main.log.info(allRoutesActual)
+
+ utilities.assertEquals(
+ expect="[]", actual=str(allRoutesActual),
+ onpass="***Route number in SDN-IP is 0, correct!***",
+ onfail="***Routes number in SDN-IP is not 0, wrong!***")
+
+ main.step("Check intents after deleting routes")
+ getIntentsResult = main.ONOScli.intents(jsonFormat=True)
+ routeIntentsActualNum = \
+ main.QuaggaCliHost3.extractActualRouteIntentNum(
+ getIntentsResult)
+ main.log.info("route Intents Actual Num is: ")
+ main.log.info(routeIntentsActualNum)
+ utilities.assertEquals(
+ expect=0, actual=routeIntentsActualNum,
+ onpass="***MultiPointToSinglePoint Intent Num in SDN-IP is 0, \
+ correct!***",
+ onfail="***MultiPointToSinglePoint Intent Num in SDN-IP is not 0, \
+ wrong!***")
+
+ pingTestScript = "~/SDNIP/test-tools/CASE4-ping-as2host.sh"
+ pingTestResultsFile = \
+ "~/SDNIP/TestOnEnv/log/CASE4-ping-results-after-delete-routes-"\
+ + strftime("%Y-%m-%d_%H:%M:%S", localtime()) + ".txt"
+ pingTestResults = main.QuaggaCliHost.pingTest(
+ "1.168.30.100", pingTestScript, pingTestResultsFile)
+ main.log.info(pingTestResults)
+ # wait to finish the ping test
+ time.sleep(int(main.params[ 'timers' ][ 'PingTestWithoutRoutes' ]))
diff --git a/TestON/tests/SDNIPfunction/SDNIPfunction.topo b/TestON/tests/SDNIPfunction/SDNIPfunction.topo
new file mode 100644
index 0000000..01cc342
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/SDNIPfunction.topo
@@ -0,0 +1,870 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli>
+
+ <ONOS1>
+ <host>10.128.4.52</host>
+ <user>sdn</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <QuaggaCliHost3>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost3>
+ <QuaggaCliHost4>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost4>
+ <QuaggaCliHost5>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost5>
+
+ <QuaggaCliHost>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost>
+
+ <QuaggaCliHost101>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>101</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost101>
+ <QuaggaCliHost102>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>102</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost102>
+ <QuaggaCliHost103>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>103</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost103>
+ <QuaggaCliHost104>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>104</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost104>
+ <QuaggaCliHost105>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>105</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost105>
+ <QuaggaCliHost106>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>106</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost106>
+ <QuaggaCliHost107>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>107</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost107>
+ <QuaggaCliHost108>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>108</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost108>
+ <QuaggaCliHost109>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>109</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost109>
+ <QuaggaCliHost110>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>110</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost110>
+ <QuaggaCliHost111>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>111</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost111>
+ <QuaggaCliHost112>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>112</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost112>
+ <QuaggaCliHost113>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>113</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost113>
+ <QuaggaCliHost114>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>114</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost114>
+ <QuaggaCliHost115>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>115</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost115>
+ <QuaggaCliHost116>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>116</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost116>
+ <QuaggaCliHost117>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>117</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost117>
+ <QuaggaCliHost118>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>118</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost118>
+ <QuaggaCliHost119>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>119</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost119>
+ <QuaggaCliHost120>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>120</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost120>
+ <QuaggaCliHost121>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>121</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost121>
+ <QuaggaCliHost122>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>122</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost122>
+ <QuaggaCliHost123>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>123</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost123>
+ <QuaggaCliHost124>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>124</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost124>
+ <QuaggaCliHost125>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>125</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost125>
+ <QuaggaCliHost126>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>126</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost126>
+ <QuaggaCliHost127>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>127</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost127>
+ <QuaggaCliHost128>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>128</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost128>
+ <QuaggaCliHost129>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>129</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost129>
+ <QuaggaCliHost130>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>130</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost130>
+ <QuaggaCliHost131>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>131</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost131>
+ <QuaggaCliHost132>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>132</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost132>
+ <QuaggaCliHost133>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>133</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost133>
+ <QuaggaCliHost134>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>134</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost134>
+ <QuaggaCliHost135>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>135</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost135>
+ <QuaggaCliHost136>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>136</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost136>
+ <QuaggaCliHost137>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>137</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost137>
+ <QuaggaCliHost138>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>138</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost138>
+ <QuaggaCliHost139>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>139</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost139>
+ <QuaggaCliHost140>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>140</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost140>
+ <QuaggaCliHost141>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>141</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost141>
+ <QuaggaCliHost142>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>142</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost142>
+ <QuaggaCliHost143>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>143</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost143>
+ <QuaggaCliHost144>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>144</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost144>
+ <QuaggaCliHost145>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>145</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost145>
+ <QuaggaCliHost146>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>146</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost146>
+ <QuaggaCliHost147>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>147</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost147>
+ <QuaggaCliHost148>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>148</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost148>
+ <QuaggaCliHost149>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>149</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost149>
+ <QuaggaCliHost150>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>150</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost150>
+ <QuaggaCliHost151>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>151</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost151>
+ <QuaggaCliHost152>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>152</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost152>
+ <QuaggaCliHost153>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>153</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost153>
+ <QuaggaCliHost154>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>154</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost154>
+ <QuaggaCliHost155>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>155</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost155>
+ <QuaggaCliHost156>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>156</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost156>
+ <QuaggaCliHost157>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>157</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost157>
+ <QuaggaCliHost158>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>158</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost158>
+ <QuaggaCliHost159>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>159</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost159>
+ <QuaggaCliHost160>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>160</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost160>
+ <QuaggaCliHost161>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>161</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost161>
+ <QuaggaCliHost162>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>162</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost162>
+ <QuaggaCliHost163>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>163</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost163>
+ <QuaggaCliHost164>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>164</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost164>
+ <QuaggaCliHost165>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>165</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost165>
+ <QuaggaCliHost166>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>166</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost166>
+ <QuaggaCliHost167>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>167</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost167>
+ <QuaggaCliHost168>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>168</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost168>
+ <QuaggaCliHost169>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>169</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost169>
+ <QuaggaCliHost170>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>170</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost170>
+ <QuaggaCliHost171>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>171</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost171>
+ <QuaggaCliHost172>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>172</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost172>
+ <QuaggaCliHost173>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>173</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost173>
+ <QuaggaCliHost174>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>174</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost174>
+ <QuaggaCliHost175>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>175</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost175>
+ <QuaggaCliHost176>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>176</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost176>
+ <QuaggaCliHost177>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>177</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost177>
+ <QuaggaCliHost178>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>178</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost178>
+ <QuaggaCliHost179>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>179</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost179>
+ <QuaggaCliHost180>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>180</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost180>
+ <QuaggaCliHost181>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>181</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost181>
+ <QuaggaCliHost182>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>182</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost182>
+ <QuaggaCliHost183>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>183</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost183>
+ <QuaggaCliHost184>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>184</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost184>
+ <QuaggaCliHost185>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>185</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost185>
+ <QuaggaCliHost186>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>186</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost186>
+ <QuaggaCliHost187>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>187</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost187>
+ <QuaggaCliHost188>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>188</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost188>
+ <QuaggaCliHost189>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>189</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost189>
+ <QuaggaCliHost190>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>190</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost190>
+ <QuaggaCliHost191>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>191</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost191>
+ <QuaggaCliHost192>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>192</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost192>
+ <QuaggaCliHost193>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>193</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost193>
+
+ <QuaggaCliHost194>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>194</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost194>
+ <QuaggaCliHost195>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>195</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost195>
+ <QuaggaCliHost196>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>196</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost196>
+ <QuaggaCliHost197>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>197</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost197>
+ <QuaggaCliHost198>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>198</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost198>
+ <QuaggaCliHost199>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>199</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost199>
+ <QuaggaCliHost200>
+ <host>127.0.0.1</host>
+ <user>admin</user>
+ <password></password>
+ <type>QuaggaCliDriver</type>
+ <connect_order>200</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </QuaggaCliHost200>
+
+
+ </COMPONENT>
+</TOPOLOGY>
+
diff --git a/TestON/tests/SDNIPfunction/__init__.py b/TestON/tests/SDNIPfunction/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/__init__.py
diff --git a/TestON/tests/SDNIPfunction/addresses.json b/TestON/tests/SDNIPfunction/addresses.json
new file mode 100644
index 0000000..a32eb85
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/addresses.json
@@ -0,0 +1,34 @@
+{
+ "addresses" : [
+ {
+ "dpid" : "00:00:00:00:00:00:00:a3",
+ "port" : "1",
+ "ips" : ["192.168.10.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a5",
+ "port" : "1",
+ "ips" : ["192.168.20.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a2",
+ "port" : "1",
+ "ips" : ["192.168.30.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a6",
+ "port" : "1",
+ "ips" : ["192.168.40.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a4",
+ "port" : "4",
+ "ips" : ["192.168.60.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/TestON/tests/SDNIPfunction/intents.json b/TestON/tests/SDNIPfunction/intents.json
new file mode 100644
index 0000000..87f34e2
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/intents.json
@@ -0,0 +1,1468 @@
+[
+ {
+ "id":"0xffffffffcb2cb6ec",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x140a3304",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffcb2d9828",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x1a89f138",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffd1418988",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x2cd85684",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x3122a56b",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x5874487",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x6ae96523",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x217361ed",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffaee31428",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x68cad35c",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffed2b21fa",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffa5dbcf50",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x373774a3",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "installable":[
+ {
+ "id":"0x5a75d509",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffff8d492c5d",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffef408263",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffff8ce7d031",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffb344fe39",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xf2665f1",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x5b61a473",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffd0e186b8",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x4d8d4942",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x3738d163",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffff993b0fc9",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xfffffffff33e39a0",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffda3dd5b2",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffff8ce60db9",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xfeca8b9",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x3124d881",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x40241a59",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffd141fa26",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x3018359e",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.1/32}, IPV4_DST{ip=192.168.30.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a2, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffaee2a38a",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x658af442",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffaf46b62f",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x7a92607b",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.1/32}, IPV4_DST{ip=192.168.20.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a5, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffff8d484b21",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffe8c0c42f",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.101/32}, IPV4_DST{ip=192.168.10.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a3, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffed295f82",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x28379d0",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffdba23bce",
+ "type":"MultiPointToSinglePointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "ingress":[
+ {
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ {
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a5",
+ "port":"1"
+ }
+ ],
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x5e70036",
+ "type":"LinkCollectionIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_DST{ip=172.16.30.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "links":[
+ {
+ "src":{
+ "device":"of:00000000000000a4",
+ "port":"1"
+ },
+ "dst":{
+ "device":"of:00000000000000a2",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a5",
+ "port":"2"
+ },
+ "dst":{
+ "device":"of:00000000000000a3",
+ "port":"4"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a6",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a3",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"2"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffaf44f3b7",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a5",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffd73a0afb",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.20.101/32}, IPV4_DST{ip=192.168.20.1/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a5, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x751d3d2e",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffc4847e9e",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x3fb23806",
+ "type":"MultiPointToSinglePointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "ingress":[
+ {
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ {
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a5",
+ "port":"1"
+ }
+ ],
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x23d68afe",
+ "type":"LinkCollectionIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_DST{ip=2.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "links":[
+ {
+ "src":{
+ "device":"of:00000000000000a4",
+ "port":"1"
+ },
+ "dst":{
+ "device":"of:00000000000000a2",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a5",
+ "port":"2"
+ },
+ "dst":{
+ "device":"of:00000000000000a3",
+ "port":"4"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a6",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a3",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"2"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x751be06e",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "installable":[
+ {
+ "id":"0xffffffff85bf43de",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x6aea465f",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x27f32021",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.10.1/32}, IPV4_DST{ip=192.168.10.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a3, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xf25f553",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x5821c559",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.30.101/32}, IPV4_DST{ip=192.168.30.1/32}, IP_PROTO{protocol=1}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a2, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xfffffffff3406cb6",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "ingress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x14daab84",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.1/32}, IPV4_DST{ip=192.168.40.101/32}, IP_PROTO{protocol=6}, ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a6, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffd7d10b27",
+ "type":"MultiPointToSinglePointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "ingress":[
+ {
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ {
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a5",
+ "port":"1"
+ }
+ ],
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffff8f921bfd",
+ "type":"LinkCollectionIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_DST{ip=1.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "links":[
+ {
+ "src":{
+ "device":"of:00000000000000a4",
+ "port":"1"
+ },
+ "dst":{
+ "device":"of:00000000000000a2",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a5",
+ "port":"2"
+ },
+ "dst":{
+ "device":"of:00000000000000a3",
+ "port":"4"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a6",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a3",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"2"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffa79364e5",
+ "type":"MultiPointToSinglePointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "ingress":[
+ {
+ "device":"of:00000000000000a3",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ {
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ {
+ "device":"of:00000000000000a5",
+ "port":"1"
+ }
+ ],
+ "egress":{
+ "device":"of:00000000000000a2",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffb81af9ff",
+ "type":"LinkCollectionIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a6, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_DST{ip=3.0.0.0/24}, ETH_TYPE{ethType=800}]",
+ "treatment":"[ETH_DST{mac=00:00:00:00:03:01}]",
+ "links":[
+ {
+ "src":{
+ "device":"of:00000000000000a4",
+ "port":"1"
+ },
+ "dst":{
+ "device":"of:00000000000000a2",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a5",
+ "port":"2"
+ },
+ "dst":{
+ "device":"of:00000000000000a3",
+ "port":"4"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a6",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"3"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ },
+ {
+ "src":{
+ "device":"of:00000000000000a3",
+ "port":"3"
+ },
+ "dst":{
+ "device":"of:00000000000000a4",
+ "port":"2"
+ },
+ "type":"DIRECT",
+ "state":"ACTIVE",
+ "annotations":{
+
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x14d9eb65",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "egress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0xffffffffd1edad87",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.1/32}, IPV4_DST{ip=192.168.60.101/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a4, portNumber=4}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, dst=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a1, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0x14d88ea5",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a4",
+ "port":"4"
+ },
+ "installable":[
+ {
+ "id":"0xffffffff932872c7",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.60.101/32}, IPV4_DST{ip=192.168.60.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a2, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a2, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a4, portNumber=1}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a4, portNumber=4}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ },
+ {
+ "id":"0xffffffffd0df53a2",
+ "type":"PointToPointIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "state":"INSTALLED",
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "ingress":{
+ "device":"of:00000000000000a1",
+ "port":"1"
+ },
+ "egress":{
+ "device":"of:00000000000000a6",
+ "port":"1"
+ },
+ "installable":[
+ {
+ "id":"0x12f07370",
+ "type":"PathIntent",
+ "appId":"org.onlab.onos.sdnip",
+ "resources":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ],
+ "selector":"[IPV4_SRC{ip=192.168.40.101/32}, IPV4_DST{ip=192.168.40.1/32}, IP_PROTO{protocol=6}, TCP_SRC{tcpPort=179}, ETH_TYPE{ethType=800}]",
+ "path":[
+ "DefaultEdgeLink{src=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, dst=HostLocation{elementId=of:00000000000000a1, portNumber=1}, type=EDGE, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a1, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a3, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a3, portNumber=4}, dst=ConnectPoint{elementId=of:00000000000000a5, portNumber=2}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultLink{src=ConnectPoint{elementId=of:00000000000000a5, portNumber=3}, dst=ConnectPoint{elementId=of:00000000000000a6, portNumber=4}, type=DIRECT, state=ACTIVE, durable=false}",
+ "DefaultEdgeLink{src=HostLocation{elementId=of:00000000000000a6, portNumber=1}, dst=ConnectPoint{elementId=00:00:00:00:00:00/-1, portNumber=0}, type=EDGE, state=ACTIVE, durable=false}"
+ ]
+ }
+ ]
+ }
+]
diff --git a/TestON/tests/SDNIPfunction/intents1.2.json b/TestON/tests/SDNIPfunction/intents1.2.json
new file mode 100644
index 0000000..791dceb
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/intents1.2.json
@@ -0,0 +1,60 @@
+[
+ {
+ "type":"MultiPointToSinglePointIntent",
+ "id":"0xfa8",
+ "appId":"DefaultApplicationId{id=25, name=org.onosproject.sdnip}",
+ "details":"MultiPointToSinglePointIntent{id=0xfa8, key=173.0.2.0/24,
+appId=DefaultApplicationId{id=25, name=org.onosproject.sdnip}, priority=220,
+resources=[],
+selector=DefaultTrafficSelector{criteria=[IPV4_DST{ip=173.0.2.0/24},
+ETH_TYPE{ethType=800}]},
+treatment=DefaultTrafficTreatment{immediate=[ETH_DST{mac=00:00:72:00:00:90}],
+deferred=[], transition=None, cleared=false},
+ingress=[ConnectPoint{elementId=of:00000000000000a3, portNumber=1},
+ConnectPoint{elementId=of:00000000000000a2, portNumber=1},
+ConnectPoint{elementId=of:00000000000000a4, portNumber=4},
+ConnectPoint{elementId=of:00000000000000a5, portNumber=1}],
+egress=ConnectPoint{elementId=of:00000000000000a6, portNumber=1},
+constraints=[]}",
+ "resources":[
+
+ ],
+ "state":"WITHDRAWN"
+ },
+ {
+ "type":"PointToPointIntent",
+ "id":"0xce",
+ "appId":"DefaultApplicationId{id=25, name=org.onosproject.sdnip}",
+ "details":"PointToPointIntent{id=0xce, key=0xce,
+appId=DefaultApplicationId{id=25, name=org.onosproject.sdnip}, priority=1000,
+resources=[], selector=DefaultTrafficSelector{criteria=[IP_PROTO{protocol=6},
+IPV4_DST{ip=192.168.40.101/32}, IPV4_SRC{ip=192.168.40.74/32},
+ETH_TYPE{ethType=800}, TCP_DST{tcpPort=179}]},
+treatment=DefaultTrafficTreatment{immediate=[], deferred=[], transition=None,
+cleared=false}, ingress=ConnectPoint{elementId=of:00000000000000a6,
+portNumber=1}, egress=ConnectPoint{elementId=of:00000000000000a1,
+portNumber=1}, constraints=[]}",
+ "resources":[
+
+ ],
+ "state":"INSTALLED"
+ },
+ {
+ "type":"PointToPointIntent",
+ "id":"0x9f",
+ "appId":"DefaultApplicationId{id=25, name=org.onosproject.sdnip}",
+ "details":"PointToPointIntent{id=0x9f, key=0x9f,
+appId=DefaultApplicationId{id=25, name=org.onosproject.sdnip}, priority=1000,
+resources=[], selector=DefaultTrafficSelector{criteria=[IP_PROTO{protocol=6},
+IPV4_DST{ip=192.168.40.101/32}, TCP_SRC{tcpPort=179},
+IPV4_SRC{ip=192.168.40.34/32}, ETH_TYPE{ethType=800}]},
+treatment=DefaultTrafficTreatment{immediate=[], deferred=[], transition=None,
+cleared=false}, ingress=ConnectPoint{elementId=of:00000000000000a6,
+portNumber=1}, egress=ConnectPoint{elementId=of:00000000000000a1,
+portNumber=1}, constraints=[]}",
+ "resources":[
+
+ ],
+ "state":"INSTALLED"
+ }
+]
diff --git a/TestON/tests/SDNIPfunction/sdnip.json b/TestON/tests/SDNIPfunction/sdnip.json
new file mode 100644
index 0000000..ea7682d
--- /dev/null
+++ b/TestON/tests/SDNIPfunction/sdnip.json
@@ -0,0 +1,65 @@
+{
+
+ "bgpPeers" : [
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a3",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.10.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a5",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.20.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a2",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.30.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a4",
+ "attachmentPort" : "4",
+ "ipAddress" : "192.168.60.1"
+ }
+ ],
+ "bgpSpeakers" : [
+ {
+ "name" : "bgpSpeaker1",
+ "attachmentDpid" : "00:00:00:00:00:00:00:a1",
+ "attachmentPort" : "1",
+ "macAddress" : "00:00:00:00:00:01",
+ "interfaceAddresses" : [
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a3",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.10.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a5",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.20.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a2",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.30.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a6",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.40.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a4",
+ "interfacePort" : "4",
+ "ipAddress" : "192.168.60.101"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/TestON/tests/SDNIPperf/SDNIPperf.params b/TestON/tests/SDNIPperf/SDNIPperf.params
new file mode 100644
index 0000000..b3c8f7a
--- /dev/null
+++ b/TestON/tests/SDNIPperf/SDNIPperf.params
@@ -0,0 +1,23 @@
+<PARAMS>
+ <testcases>100, 9</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>sdnip_single_instance_bm</cellName>
+ </ENV>
+
+ <CTRL>
+ <numCtrl>1</numCtrl>
+ <ip1>10.254.1.201</ip1>
+ <port1>6633</port1>
+ </CTRL>
+
+ <GIT>
+ <autoPull>off</autoPull>
+ <branch1>master</branch1>
+ <branch2>onos-1.3</branch2>
+ </GIT>
+ <timers>
+ <SystemBoot>1200</SystemBoot>
+ </timers>
+</PARAMS>
diff --git a/TestON/tests/SDNIPperf/SDNIPperf.py b/TestON/tests/SDNIPperf/SDNIPperf.py
new file mode 100644
index 0000000..cd41ea6
--- /dev/null
+++ b/TestON/tests/SDNIPperf/SDNIPperf.py
@@ -0,0 +1,149 @@
+class SDNIPperf:
+
+ def __init__( self ):
+ self.default = ''
+ global branchName
+
+ # This case is to setup ONOS
+ def CASE100( self, main ):
+ """
+ CASE100 is to compile ONOS and push it to the test machines
+ Startup sequence:
+ cell <name>
+ onos-verify-cell
+ git pull
+ mvn clean install
+ onos-package
+ onos-install -f
+ onos-wait-for-start
+ """
+ main.case( "Setting up test environment" )
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ ONOS1Ip = main.params[ 'CTRL' ][ 'ip1' ]
+
+ main.step( "Applying cell variable to environment" )
+ cellResult = main.ONOSbench.setCell( cellName )
+ verifyResult = main.ONOSbench.verifyCell()
+
+ branchName = main.ONOSbench.getBranchName()
+ main.log.info( "ONOS is on branch: " + branchName )
+
+ main.log.report( "Uninstalling ONOS" )
+ main.ONOSbench.onosUninstall( ONOS1Ip )
+
+ cleanInstallResult = main.TRUE
+ gitPullResult = main.TRUE
+
+ main.step( "Git pull" )
+ gitPullResult = main.FALSE
+ #Need to push some new code to ONOS before using the git pull
+ #gitPullResult = main.ONOSbench.gitPull()
+
+ main.step( "Using mvn clean & install" )
+ if gitPullResult == main.TRUE:
+ cleanInstallResult = main.ONOSbench.cleanInstall()
+ else:
+ main.log.warn( "Did not pull new code so skipping mvn " +
+ "clean install" )
+ cleanInstallResult = main.ONOSbench.cleanInstall( mciTimeout= 300 )
+ main.ONOSbench.getVersion( report=True )
+
+ main.step( "Creating ONOS package" )
+ packageResult = main.ONOSbench.onosPackage( opTimeout=500 )
+
+ main.step( "Installing ONOS package" )
+ onos1InstallResult = main.ONOSbench.onosInstall( options="-f",
+ node=ONOS1Ip )
+
+ main.step( "Checking if ONOS is up yet" )
+ for i in range( 2 ):
+ onos1Isup = main.ONOSbench.isup( ONOS1Ip, timeout=420 )
+ if onos1Isup:
+ break
+ if not onos1Isup:
+ main.log.report( "ONOS1 didn't start!" )
+
+ cliResult = main.ONOScli.startOnosCli( ONOS1Ip,
+ commandlineTimeout=100, onosStartTimeout=600)
+
+ case1Result = ( cleanInstallResult and packageResult and
+ cellResult and verifyResult and
+ onos1InstallResult and
+ onos1Isup and cliResult )
+
+ utilities.assert_equals( expect=main.TRUE, actual=case1Result,
+ onpass="ONOS startup successful",
+ onfail="ONOS startup NOT successful" )
+
+ if case1Result == main.FALSE:
+ main.cleanup()
+ main.exit()
+
+ def CASE9( self, main ):
+ """
+ Test the SDN-IP Performance
+ Test whether SDN-IP can boot with 600,000 routes from an external peer.
+ Since our goal for SDN-IP is to handle 600,000 routes, in this test case
+ we statically configure an external peer Quagga with 655360 routes.
+ Thus, we pre-know the routes and intents it should be, and then boot the
+ whole system and check whether the numbers of routes and intents from
+ ONOS CLI are correct.
+ """
+ import time
+ import json
+ from operator import eq
+ from time import localtime, strftime
+
+ # We configured one external BGP peer with 655360 routes
+ routeNumberExpected = 655360
+ m2SIntentsNumberExpected = 655360
+
+ main.case("This case is to testing the performance of SDN-IP with \
+ single ONOS instance" )
+ time.sleep( 10 )
+
+ main.step( "Get devices in the network" )
+ listResult = main.ONOScli.devices( jsonFormat=False )
+ main.log.info( listResult )
+
+ main.step( "Get links in the network" )
+ listResult = main.ONOScli.links ( jsonFormat=False )
+ main.log.info( listResult )
+
+ main.log.info( "Activate sdn-ip application" )
+ main.ONOScli.activateApp( "org.onosproject.sdnip" )
+
+ main.step("Sleep 1200 seconds")
+ # wait until SDN-IP receives all routes and ONOS installs all intents
+ time.sleep( float(main.params[ 'timers' ][ 'SystemBoot' ]) )
+
+ main.step( "Checking routes installed" )
+
+ main.log.info( "Total route number expected is:" )
+ main.log.info( routeNumberExpected )
+
+ routeNumberActual = main.ONOScli.ipv4RouteNumber()
+ main.log.info("Total route number actual is: ")
+ main.log.info(routeNumberActual)
+
+ utilities.assertEquals(
+ expect=routeNumberExpected, actual=routeNumberActual,
+ onpass="***Routes in SDN-IP are correct!***",
+ onfail="***Routes in SDN-IP are wrong!***" )
+
+
+ main.step( "Checking MultiPointToSinglePointIntent intents installed" )
+
+ main.log.info( "MultiPointToSinglePoint intent number expected is:" )
+ main.log.info( m2SIntentsNumberExpected )
+
+ m2SIntentsNumberActual = main.ONOScli.m2SIntentInstalledNumber()
+ main.log.info( "MultiPointToSinglePoint intent number actual is:" )
+ main.log.info(m2SIntentsNumberActual)
+
+ utilities.assertEquals(
+ expect=True,
+ actual=eq( m2SIntentsNumberExpected, m2SIntentsNumberActual ),
+ onpass="***MultiPointToSinglePoint intent number is correct!***",
+ onfail="***MultiPointToSinglePoint intent number is wrong!***" )
diff --git a/TestON/tests/SDNIPperf/SDNIPperf.topo b/TestON/tests/SDNIPperf/SDNIPperf.topo
new file mode 100644
index 0000000..50629d1
--- /dev/null
+++ b/TestON/tests/SDNIPperf/SDNIPperf.topo
@@ -0,0 +1,32 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.4.60</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli>
+ <host>10.128.4.60</host>
+ <user>admin</user>
+ <password></password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli>
+
+ <ONOS1>
+ <host>10.254.1.201</host>
+ <user>sdn</user>
+ <password></password>
+ <type>OnosDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ </COMPONENT>
+</TOPOLOGY>
\ No newline at end of file
diff --git a/TestON/tests/SDNIPperf/__init__.py b/TestON/tests/SDNIPperf/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/SDNIPperf/__init__.py
diff --git a/TestON/tests/SDNIPperf/addresses.json b/TestON/tests/SDNIPperf/addresses.json
new file mode 100644
index 0000000..66d08da
--- /dev/null
+++ b/TestON/tests/SDNIPperf/addresses.json
@@ -0,0 +1,35 @@
+{
+ "addresses" : [
+ {
+ "dpid" : "00:00:00:00:00:00:00:a3",
+ "port" : "1",
+ "ips" : ["192.168.10.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a5",
+ "port" : "1",
+ "ips" : ["192.168.20.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a2",
+ "port" : "1",
+ "ips" : ["192.168.30.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a6",
+ "port" : "1",
+ "ips" : ["192.168.40.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ },
+ {
+ "dpid" : "00:00:00:00:00:00:00:a4",
+ "port" : "4",
+ "ips" : ["192.168.60.0/24"],
+ "mac" : "00:00:00:00:00:01"
+ }
+
+ ]
+}
\ No newline at end of file
diff --git a/TestON/tests/SDNIPperf/sdnip.json b/TestON/tests/SDNIPperf/sdnip.json
new file mode 100644
index 0000000..89c0538
--- /dev/null
+++ b/TestON/tests/SDNIPperf/sdnip.json
@@ -0,0 +1,566 @@
+{
+
+ "bgpPeers" : [
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a3",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.10.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a5",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.20.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a2",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.30.1"
+ },
+
+
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.1"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.2"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.3"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.4"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.5"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.6"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.7"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.8"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.9"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.10"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.11"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.12"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.13"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.14"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.15"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.16"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.17"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.18"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.19"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.20"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.21"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.22"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.23"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.24"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.25"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.26"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.27"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.28"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.29"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.30"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.31"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.32"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.33"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.34"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.35"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.36"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.37"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.38"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.39"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.40"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.41"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.42"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.43"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.44"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.45"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.46"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.47"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.48"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.49"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.50"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.51"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.52"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.53"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.54"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.55"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.56"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.57"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.58"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.59"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.60"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.61"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.62"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.63"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.64"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.65"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.66"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.67"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.68"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.69"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.70"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.71"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.72"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.73"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.74"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.75"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.76"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.77"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.78"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.79"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.80"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.81"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.82"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.83"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.84"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.85"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.86"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.87"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.88"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.89"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.90"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.91"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.92"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.93"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.94"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.95"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.96"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.97"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.98"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.99"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a6",
+ "attachmentPort" : "1",
+ "ipAddress" : "192.168.40.100"
+ },
+ {
+ "attachmentDpid" : "00:00:00:00:00:00:00:a4",
+ "attachmentPort" : "4",
+ "ipAddress" : "192.168.60.1"
+ }
+
+ ],
+ "bgpSpeakers" : [
+ {
+ "name" : "bgpSpeaker1",
+ "attachmentDpid" : "00:00:00:00:00:00:00:a1",
+ "attachmentPort" : "1",
+ "macAddress" : "00:00:00:00:00:01",
+ "interfaceAddresses" : [
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a3",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.10.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a5",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.20.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a2",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.30.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a6",
+ "interfacePort" : "1",
+ "ipAddress" : "192.168.40.101"
+ },
+ {
+ "interfaceDpid" : "00:00:00:00:00:00:00:a4",
+ "interfacePort" : "4",
+ "ipAddress" : "192.168.60.101"
+ }
+
+ ]
+
+ }
+
+ ]
+}