Updates according to comments for Operational and Functional tests for CORD certification
Change-Id: I3e972fe7f6f85f1b95dd729d6d41f6319a52c8b4
diff --git a/Fabric/Tests/functional.py b/Fabric/Tests/functional.py
index aa3a5bb..663fc2f 100755
--- a/Fabric/Tests/functional.py
+++ b/Fabric/Tests/functional.py
@@ -19,6 +19,7 @@
"""
import Queue
+import os
from oftest import config
import inspect
import logging
@@ -29,6 +30,8 @@
from oftest.testutils import *
from accton_util import *
from oftest.utils import *
+import pexpect
+import json
class FabricSW_OF_PacketInUDP_TC_0010( base_tests.SimpleDataPlane ):
@@ -51,7 +54,9 @@
logging.info( "Inserting packet in flow to controller" )
self.controller.message_send( request )
- for of_port in config[ "port_map" ].keys( ):
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for of_port in pair:
logging.info( "PacketInMiss test, port %d", of_port )
self.dataplane.send( of_port, vlan_pkt )
@@ -136,6 +141,8 @@
def runTest( self ):
try:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
parsed_arp_pkt = simple_arp_packet( )
arp_pkt = str( parsed_arp_pkt )
# create match
@@ -150,7 +157,7 @@
self.controller.message_send( request )
do_barrier( self.controller )
- for of_port in config[ "port_map" ].keys( ):
+ for of_port in pair:
logging.info( "PacketInArp test, sending arp packet to port %d", of_port )
self.dataplane.send( of_port, arp_pkt )
@@ -227,20 +234,21 @@
Groups = Queue.LifoQueue( )
try:
ports = sorted( config[ "port_map" ].keys( ) )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 100
- for port in ports:
+ for port in pair:
L2gid, l2msg = add_one_l2_interface_group( self.controller, port, vlan_id, True, False )
add_one_vlan_table_flow( self.controller, port, vlan_id=vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
Groups.put( L2gid )
- msg = add_l2_flood_group( self.controller, ports, vlan_id, vlan_id )
+ msg = add_l2_flood_group( self.controller, pair, vlan_id, vlan_id )
Groups.put( msg.group_id )
add_bridge_flow( self.controller, None, vlan_id, msg.group_id, True )
do_barrier( self.controller )
# verify flood
- for ofport in ports:
+ for ofport in pair:
# change dest based on port number
mac_src = '00:12:34:56:78:%02X' % ofport
parsed_pkt = simple_tcp_packet_two_vlan( pktlen=108, out_dl_vlan_enable=True,
@@ -251,7 +259,7 @@
# self won't rx packet
verify_no_packet( self, pkt, ofport )
# others will rx packet
- tmp_ports = list( ports )
+ tmp_ports = list( pair )
tmp_ports.remove( ofport )
verify_packets( self, pkt, tmp_ports )
@@ -312,8 +320,9 @@
Groups = Queue.LifoQueue( )
try:
ports = sorted( config[ "port_map" ].keys( ) )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 1;
- for port in ports:
+ for port in pair:
L2gid, l2msg = add_one_l2_interface_group( self.controller, port, vlan_id, True, False )
add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
Groups.put( L2gid )
@@ -321,15 +330,15 @@
True )
do_barrier( self.controller )
- for out_port in ports:
+ for out_port in pair:
# change dest based on port number
mac_dst = '00:12:34:56:78:%02X' % out_port
- for in_port in ports:
+ for in_port in pair:
if in_port == out_port:
continue
pkt = str( simple_tcp_packet( dl_vlan_enable=True, vlan_vid=vlan_id, eth_dst=mac_dst ) )
self.dataplane.send( in_port, pkt )
- for ofport in ports:
+ for ofport in pair:
if ofport in [ out_port ]:
verify_packet( self, pkt, ofport )
else:
@@ -358,6 +367,7 @@
logging.info( "Port count less than 2, can't run this case" )
return
ports = sorted( config[ "port_map" ].keys() )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_p0_untagged = 31
vlan_p1_tagged = 31
vlan_p1_native = 41
@@ -376,7 +386,7 @@
add_one_vlan_table_flow( self.controller, ports[1], vlan_id=vlan_p1_native, flag=VLAN_TABLE_FLAG_ONLY_BOTH,
send_barrier=True)
#flooding groups
- Floodmsg31 = add_l2_flood_group( self.controller, ports, vlan_p0_untagged, id=0 )
+ Floodmsg31 = add_l2_flood_group( self.controller, pair, vlan_p0_untagged, id=0 )
Floodmsg41 = add_l2_flood_group( self.controller, [ ports[1] ], vlan_p1_native, id=0 )
#add bridging flows for flooding groups
@@ -478,24 +488,75 @@
arp_pkt_dest = str( parsed_arp_pkt_tagged )
verify_packet( self, arp_pkt_dest, ports[1] )
+ # Send and verify VLAN 31 tagged unicast packets
+ mac_src = '00:12:34:56:78:%02X' % pair[1]
+ unicast_to_send = simple_tcp_packet_two_vlan(pktlen=108, out_dl_vlan_enable=True,
+ out_vlan_vid=vlan_p1_tagged, in_dl_vlan_enable=False,
+ eth_dst='00:12:34:56:78:9a', eth_src=mac_src)
+
+ unicast_to_expect = simple_tcp_packet_two_vlan(pktlen=104, out_dl_vlan_enable=False,
+ in_dl_vlan_enable=False,
+ eth_dst='00:12:34:56:78:9a', eth_src=mac_src)
+
+
+ tmp_ports = list(pair)
+ tmp_ports.remove(pair[1])
+ pkt_s = str(unicast_to_send)
+ pkt_e = str(unicast_to_expect)
+ self.dataplane.send(pair[1], pkt_s)
+ verify_no_packet(self, pkt_s, pair[1])
+ verify_packets(self, pkt_e, tmp_ports)
+
+ # Send and verify untagged unicast packets
+ mac_src = '00:12:34:56:78:%02X' % pair[0]
+ unicast_to_expect = simple_tcp_packet_two_vlan(pktlen=108, out_dl_vlan_enable=True,
+ out_vlan_vid=vlan_p1_tagged, out_vlan_pcp=0, in_dl_vlan_enable=False,
+ eth_dst='00:12:34:56:78:9a', eth_src=mac_src)
+
+ unicast_to_send = simple_tcp_packet_two_vlan(pktlen=104, out_dl_vlan_enable=False,
+ in_dl_vlan_enable=False,
+ eth_dst='00:12:34:56:78:9a', eth_src=mac_src)
+
+ tmp_ports = list(pair)
+ tmp_ports.remove(pair[0])
+ pkt_s = str(unicast_to_send)
+ pkt_e = str(unicast_to_expect)
+ self.dataplane.send(pair[0], pkt_s)
+ verify_no_packet(self, pkt_s, pair[0])
+ verify_packets(self, pkt_e, tmp_ports)
+
finally:
delete_all_flows( self.controller )
delete_all_groups( self.controller )
#print("done")
-
class FabricSW_OF_Mtu1500_TC_0035( base_tests.SimpleDataPlane ):
"""
Verifies basic mtu limits
"""
+ # Read config parameters from JSON file
+ ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
+ with open(ROOT_DIR + '/' + 'global_vars.json') as f:
+ data = json.load(f)
+
+ switch_ip = data['switch_ip']
+ switch_user = data['switch_user']
+ switch_passwd = data['switch_passwd']
+ controller_ip = data['controller_ip']
+ controller_port = data['controller_port']
+ onos_server_ip = data['onos_server_ip']
+ onos_port = data['onos_port']
+ onos_user = data['onos_user']
+ onos_passwd = data['onos_passwd']
def runTest( self ):
Groups = Queue.LifoQueue( )
try:
ports = sorted( config[ "port_map" ].keys( ) )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 18
- for port in ports:
+ for port in pair:
L2gid, msg = add_one_l2_interface_group( self.controller, port, vlan_id, True, False )
add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
Groups.put( L2gid )
@@ -503,22 +564,50 @@
True )
do_barrier( self.controller )
- for out_port in ports:
+ # Send 1500 packet length, default MTU
+ for out_port in pair:
# change dest based on port number
mac_dst = '00:12:34:56:78:%02X' % out_port
- for in_port in ports:
+ for in_port in pair:
if in_port == out_port:
continue
pkt = str( simple_tcp_packet( pktlen=1500, dl_vlan_enable=True, vlan_vid=vlan_id,
eth_dst=mac_dst ) )
self.dataplane.send( in_port, pkt )
- for ofport in ports:
+ for ofport in pair:
if ofport in [ out_port ]:
verify_packet( self, pkt, ofport )
else:
verify_no_packet( self, pkt, ofport )
verify_no_other_packets( self )
+
+ # Change MTU of server's data ports to 2000 bytes
+ self.dataplane.port_mtu(pair[0], 2000)
+ self.dataplane.port_mtu(pair[1], 2000)
+ time.sleep(1)
+
+ # Change MTU of switch's data ports to 1500 bytes
+ switch_port_set_mtu(self, pair[0], 1500)
+ switch_port_set_mtu(self, pair[1], 1500)
+
+ time.sleep(1)
+
+ # Send 2000 packet length
+ # change dest based on port number
+ mac_dst = '00:12:34:56:78:%02X' % pair[1]
+ pkt = str( simple_tcp_packet( pktlen=2000, dl_vlan_enable=True, vlan_vid=vlan_id, eth_dst=mac_dst ) )
+ self.dataplane.send( pair[0], pkt )
+ tmp_ports = list(pair)
+ tmp_ports.remove(pair[0])
+ verify_no_packet(self, pkt, pair[0])
+ verify_no_packet(self, pkt, pair[1])
+
finally:
+ self.dataplane.port_mtu(pair[0], 1500)
+ self.dataplane.port_mtu(pair[1], 1500)
+ time.sleep(1)
+ switch_port_set_mtu(self, pair[0], 9412)
+ switch_port_set_mtu(self, pair[1], 9412)
delete_all_flows( self.controller )
delete_groups( self.controller, Groups )
delete_all_groups( self.controller )
@@ -537,8 +626,9 @@
intf_src_mac = [ 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc ]
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
- ports = config[ "port_map" ].keys( )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
vlan_id = port + test_id
# add l2 interface group and l3 unicast group
l2gid, msg = add_one_l2_interface_group( self.controller, port, vlan_id=vlan_id,
@@ -561,10 +651,10 @@
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:32:%02X' % (test_id + in_port)
ip_src = '192.168.%02d.1' % (test_id + in_port)
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % (test_id + out_port)
@@ -831,8 +921,9 @@
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
# Hashes Test Name and uses it as id for installing unique groups
- ports = config[ "port_map" ].keys( )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
vlan_id = port
id = port
# add l2 interface group
@@ -858,10 +949,10 @@
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:22:%02X' % in_port
ip_src = '192.168.%02d.1' % in_port
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % out_port
@@ -1104,20 +1195,21 @@
def runTest( self ):
Groups = Queue.LifoQueue( )
try:
- ports = sorted( config[ "port_map" ].keys( ) )
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 1
- for port in ports:
+ for port in pair:
L2gid, l2msg = add_one_l2_interface_group( self.controller, port, vlan_id, True, False )
add_one_vlan_table_flow( self.controller, port, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
Groups.put( L2gid )
- msg = add_l2_flood_group( self.controller, ports, vlan_id, vlan_id )
+ msg = add_l2_flood_group( self.controller, pair, vlan_id, vlan_id )
Groups.put( msg.group_id )
add_bridge_flow( self.controller, None, vlan_id, msg.group_id, True )
do_barrier( self.controller )
# verify flood
- for ofport in ports:
+ for ofport in pair:
# change dest based on port number
mac_src = '00:12:34:56:78:%02X' % ofport
parsed_pkt = simple_tcp_packet_two_vlan( pktlen=108, out_dl_vlan_enable=True,
@@ -1128,18 +1220,18 @@
# self won't rx packet
verify_no_packet( self, pkt, ofport )
# others will rx packet
- tmp_ports = list( ports )
+ tmp_ports = list( pair )
tmp_ports.remove( ofport )
verify_packets( self, pkt, tmp_ports )
verify_no_other_packets( self )
- msg = mod_l2_flood_group( self.controller, [ ports[ 0 ] ], vlan_id, vlan_id )
- mac_src = '00:12:34:56:78:%02X' % ports[ 1 ]
+ msg = mod_l2_flood_group( self.controller, [ pair[ 0 ] ], vlan_id, vlan_id )
+ mac_src = '00:12:34:56:78:%02X' % pair[ 1 ]
parsed_pkt = simple_tcp_packet_two_vlan( pktlen=108, out_dl_vlan_enable=True,
out_vlan_vid=vlan_id, in_dl_vlan_enable=True, in_vlan_vid=10, eth_dst='00:12:34:56:78:9a',
eth_src=mac_src )
pkt = str( parsed_pkt )
- self.dataplane.send( ports[ 1 ], pkt )
- verify_packets( self, pkt, [ ports[ 0 ] ] )
+ self.dataplane.send( pair[ 1 ], pkt )
+ verify_packets( self, pkt, [ pair[ 0 ] ] )
finally:
delete_all_flows( self.controller )
delete_groups( self.controller, Groups )
@@ -1160,8 +1252,9 @@
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
# Hashes Test Name and uses it as id for installing unique groups
- ports = config[ "port_map" ].keys( )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
vlan_id = port
id = port
# add l2 interface group
@@ -1187,10 +1280,10 @@
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:22:%02X' % in_port
ip_src = '192.168.%02d.1' % in_port
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % out_port
@@ -1305,7 +1398,8 @@
logging.info( "Port count less than 1, can't run this case" )
assert (False)
return
- ports = config[ "port_map" ].keys( )
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1318,14 +1412,14 @@
Groups) = fill_mcast_pipeline_L3toL3(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = True,
is_egress_tagged = True,
is_vlan_translated = True,
is_max_vlan = False
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1340,7 +1434,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1378,6 +1472,7 @@
assert (False)
return
ports = config[ "port_map" ].keys( )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1389,14 +1484,14 @@
Groups) = fill_mcast_pipeline_L3toL2(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = False,
is_egress_tagged = False,
is_vlan_translated = False,
is_max_vlan = True
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 96,
@@ -1409,7 +1504,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 96,
@@ -1444,6 +1539,7 @@
assert (False)
return
ports = config[ "port_map" ].keys( )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1455,14 +1551,14 @@
Groups) = fill_mcast_pipeline_L3toL2(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = False,
is_egress_tagged = True,
is_vlan_translated = False,
is_max_vlan = False
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 96,
@@ -1475,7 +1571,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1513,6 +1609,7 @@
assert (False)
return
ports = config[ "port_map" ].keys( )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1524,14 +1621,14 @@
Groups) = fill_mcast_pipeline_L3toL2(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = True,
is_egress_tagged = False,
is_vlan_translated = False,
is_max_vlan = False
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1546,7 +1643,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 96,
@@ -1579,7 +1676,8 @@
logging.info( "Port count less than 2, can't run this case" )
assert (False)
return
- ports = config[ "port_map" ].keys( )
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1591,14 +1689,14 @@
Groups) = fill_mcast_pipeline_L3toL2(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = True,
is_egress_tagged = True,
is_vlan_translated = False,
is_max_vlan = False
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1613,7 +1711,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1650,6 +1748,7 @@
assert (False)
return
ports = config[ "port_map" ].keys( )
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
dst_ip_str = "224.0.0.1"
(
port_to_in_vlan,
@@ -1661,14 +1760,14 @@
Groups) = fill_mcast_pipeline_L3toL2(
self.controller,
logging,
- ports,
+ pair,
is_ingress_tagged = True,
is_egress_tagged = True,
is_vlan_translated = True,
is_max_vlan = False
)
- for in_port in ports:
+ for in_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -1683,7 +1782,7 @@
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
- for out_port in ports:
+ for out_port in pair:
parsed_pkt = simple_udp_packet(
pktlen = 100,
@@ -2064,7 +2163,9 @@
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
ports = config[ "port_map" ].keys( )
- for port in ports:
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+
+ for port in pair:
# add l2 interface group
vlan_id = port + test_id
l2gid, msg = add_one_l2_interface_group( self.controller, port, vlan_id=vlan_id,
@@ -2088,10 +2189,10 @@
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:22:%02X' % (test_id + in_port)
ip_src = '192.168.%02d.1' % (test_id + in_port)
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % (test_id + out_port)
@@ -2126,8 +2227,9 @@
intf_src_mac = [ 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc ]
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
- ports = config[ "port_map" ].keys( )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
# add l2 interface group
vlan_id = port + test_id
# add vlan flow table
@@ -2144,10 +2246,10 @@
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:22:%02X' % (test_id + in_port)
ip_src = '192.168.%02d.1' % (test_id + in_port)
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % (test_id + out_port)
@@ -2183,8 +2285,9 @@
intf_src_mac = [ 0x00, 0x00, 0x00, 0xcc, 0xcc, 0xcc ]
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
- ports = config[ "port_map" ].keys( )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
# add l2 interface group
vlan_id = port
l2gid, msg = add_one_l2_interface_group( self.controller, port, vlan_id=vlan_id + 1,
@@ -2204,16 +2307,16 @@
add_unicast_routing_flow( self.controller, 0x0800, dst_ip, 0xffffffff, l3_msg.group_id, priority=2 )
Groups.put( l2gid )
Groups.put( l3_msg.group_id )
- l3_gid = encode_l3_unicast_group_id( ports[ 0 ] )
+ l3_gid = encode_l3_unicast_group_id( pair[ 0 ] )
dst_ip = 0x0
add_unicast_routing_flow( self.controller, 0x0800, dst_ip, 0x0, l3_gid )
do_barrier( self.controller )
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
- for in_port in ports:
+ for in_port in pair:
mac_src = '00:00:00:22:22:%02X' % (in_port)
ip_src = '192.168.%02d.1' % (in_port)
- for out_port in ports:
+ for out_port in pair:
if in_port == out_port:
continue
ip_dst = '192.168.%02d.1' % (out_port)
@@ -2228,17 +2331,17 @@
pkt = str( exp_pkt )
verify_packet( self, pkt, out_port )
verify_no_other_packets( self )
- ip_dst = '1.168.%02d.1' % ports[ 0 ]
+ ip_dst = '1.168.%02d.1' % pair[ 0 ]
parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=in_port,
eth_dst=switch_mac, eth_src=mac_src, ip_ttl=64, ip_src=ip_src, ip_dst=ip_dst )
pkt = str( parsed_pkt )
self.dataplane.send( in_port, pkt )
# build expect packet
- mac_dst = '00:00:00:22:22:%02X' % ports[ 0 ]
+ mac_dst = '00:00:00:22:22:%02X' % pair[ 0 ]
exp_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ] + 1,
ip_ttl=63, ip_src=ip_src, ip_dst=ip_dst, eth_dst=mac_dst, eth_src=switch_mac )
pkt = str( exp_pkt )
- verify_packet( self, pkt, ports[ 0 ] )
+ verify_packet( self, pkt, pair[ 0 ] )
verify_no_other_packets( self )
finally:
delete_all_flows( self.controller )
@@ -2391,12 +2494,13 @@
dst_mac = [ 0x00, 0x00, 0x00, 0x22, 0x22, 0x00 ]
dip = 0xc0a80001
# Hashes Test Name and uses it as id for installing unique groups
- ports = config[ "port_map" ].keys( )
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
ecmp = [ ]
dst_ips = []
# add flows for all ports but include only the egress switchport (connected to ports[1])
# in the ecmp group
- for port in ports:
+ for port in pair:
vlan_id = port
id = port
# add l2 interface group
@@ -2405,11 +2509,11 @@
dst_mac[ 5 ] = vlan_id
l3_msg = add_l3_unicast_group( self.controller, port, vlanid=vlan_id, id=id,
src_mac=intf_src_mac, dst_mac=dst_mac )
- if port == ports[1]:
+ if port == pair[1]:
ecmp += [ l3_msg.group_id ]
Groups._put( l2_gid )
Groups._put( l3_msg.group_id )
- ecmp_msg = add_l3_ecmp_group( self.controller, ports[ 0 ], [ l3_msg.group_id ] )
+ ecmp_msg = add_l3_ecmp_group( self.controller, pair[ 0 ], [ l3_msg.group_id ] )
# add vlan flow table
add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
# add termination flow
@@ -2421,7 +2525,7 @@
dst_ip = dip + (vlan_id << 8)
dst_ips += [dst_ip]
Groups._put( ecmp_msg.group_id )
- mod_l3_ecmp_group( self.controller, ports[ 0 ], ecmp )
+ mod_l3_ecmp_group( self.controller, pair[ 0 ], ecmp )
for dst_ip in dst_ips:
add_unicast_routing_flow( self.controller, 0x0800, dst_ip, 0xffffff00, ecmp_msg.group_id )
do_barrier(self.controller)
@@ -2429,14 +2533,14 @@
# first part of the test: send packet from ingress switchport and expect it at egress switchport
switch_mac = ':'.join( [ '%02X' % x for x in intf_src_mac ] )
parsed_pkt = exp_pkt = 0
- in_port = ports[0]
- out_port = ports[1]
+ in_port = pair[0]
+ out_port = pair[1]
logging.info("\nSending packet to port: " + str(in_port) + ", expected egress on port: " + str(out_port))
- mac_src = '00:00:00:22:22:%02X' % ports[ 0 ]
- ip_src = '192.168.%02d.%02d' % (ports[ 0 ], 1)
- ip_dst = '192.168.%02d.%02d' % (ports[ 1 ], 1)
+ mac_src = '00:00:00:22:22:%02X' % pair[ 0 ]
+ ip_src = '192.168.%02d.%02d' % (pair[ 0 ], 1)
+ ip_dst = '192.168.%02d.%02d' % (pair[ 1 ], 1)
tcp = out_port if out_port == 24 else 25
- parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ],
+ parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=pair[ 0 ],
eth_dst=switch_mac, eth_src=mac_src, ip_ttl=64, ip_src=ip_src,
ip_dst=ip_dst, tcp_dport=tcp )
pkt = str( parsed_pkt )
@@ -2453,63 +2557,63 @@
# second part of the test - edit the ecmp group to remove the orginal egress switchport
# and instead add the ingress switchport. Send packet from ingress switchport, and expect
# it back on the ingress switchport
- l3_gid = encode_l3_unicast_group_id( ports[ 0 ] )
- mod_l3_ecmp_group( self.controller, ports[ 0 ], [ l3_gid ] )
+ l3_gid = encode_l3_unicast_group_id( pair[ 0 ] )
+ mod_l3_ecmp_group( self.controller, pair[ 0 ], [ l3_gid ] )
time.sleep(0.1)
- logging.info("Sending packet to port: " + str(ports[0]) + ", expected egress on port: " + str(ports[0]))
- mac_src = '00:00:00:22:22:%02X' % ports[ 0 ]
- ip_src = '192.168.%02d.%02d' % (ports[ 0 ], 1)
- ip_dst = '192.168.%02d.%02d' % (ports[ 1 ], 1)
+ logging.info("Sending packet to port: " + str(pair[0]) + ", expected egress on port: " + str(pair[0]))
+ mac_src = '00:00:00:22:22:%02X' % pair[ 0 ]
+ ip_src = '192.168.%02d.%02d' % (pair[ 0 ], 1)
+ ip_dst = '192.168.%02d.%02d' % (pair[ 1 ], 1)
tcp = port if port == 24 else 25
- parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ],
+ parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=pair[ 0 ],
eth_dst=switch_mac, eth_src=mac_src, ip_ttl=64, ip_src=ip_src,
ip_dst=ip_dst,tcp_dport=tcp )
pkt = str( parsed_pkt )
- self.dataplane.send( ports[ 0 ], pkt )
+ self.dataplane.send( pair[ 0 ], pkt )
# build expected packet
- mac_dst = '00:00:00:22:22:%02X' % ports[ 0 ]
- exp_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ],
+ mac_dst = '00:00:00:22:22:%02X' % pair[ 0 ]
+ exp_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=pair[ 0 ],
eth_dst=mac_dst, eth_src=switch_mac, ip_ttl=63, ip_src=ip_src,
ip_dst=ip_dst,tcp_dport=tcp )
# Expects packet on the input port
if config["switch_type"] != 'xpliant':
pkt = str( exp_pkt )
- verify_packet( self, pkt, ports[ 0 ] )
+ verify_packet( self, pkt, pair[ 0 ] )
verify_no_other_packets( self )
# third part of the test - edit the group to completely remove bucket. Packet sent
# should be dropped by the switch
- mod_l3_ecmp_group( self.controller, ports[ 0 ], [ ] )
+ mod_l3_ecmp_group( self.controller, pair[ 0 ], [ ] )
time.sleep(0.1)
- logging.info("Sending packet to port: " + str(ports[0]) + ", expected drop")
- mac_src = '00:00:00:22:22:%02X' % ports[ 0 ]
- ip_src = '192.168.%02d.%02d' % (ports[ 0 ], 1)
- ip_dst = '192.168.%02d.%02d' % (ports[ 1 ], 1)
+ logging.info("Sending packet to port: " + str(pair[0]) + ", expected drop")
+ mac_src = '00:00:00:22:22:%02X' % pair[ 0 ]
+ ip_src = '192.168.%02d.%02d' % (pair[ 0 ], 1)
+ ip_dst = '192.168.%02d.%02d' % (pair[ 1 ], 1)
tcp = port if port == 24 else 25
- parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ],
+ parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=pair[ 0 ],
eth_dst=switch_mac, eth_src=mac_src, ip_ttl=64, ip_src=ip_src,
ip_dst=ip_dst,tcp_dport=tcp )
pkt = str( parsed_pkt )
- self.dataplane.send( ports[ 0 ], pkt )
+ self.dataplane.send( pair[ 0 ], pkt )
verify_no_other_packets( self )
# final part of the test - edit the empty group to add back the bucket for the
# original egress port, and verify packet is received on egress switch port
- l3_gid = encode_l3_unicast_group_id( ports[ 1 ] )
- mod_l3_ecmp_group( self.controller, ports[ 0 ], [ l3_gid ] )
+ l3_gid = encode_l3_unicast_group_id( pair[ 1 ] )
+ mod_l3_ecmp_group( self.controller, pair[ 0 ], [ l3_gid ] )
do_barrier(self.controller)
- in_port = ports[0]
- out_port = ports[1]
+ in_port = pair[0]
+ out_port = pair[1]
logging.info("Sending packet to port: " + str(in_port) + ", expected egress on port: " + str(out_port))
- mac_src = '00:00:00:22:22:%02X' % ports[ 0 ]
- ip_src = '192.168.%02d.%02d' % (ports[ 0 ], 1)
- ip_dst = '192.168.%02d.%02d' % (ports[ 1 ], 1)
+ mac_src = '00:00:00:22:22:%02X' % pair[ 0 ]
+ ip_src = '192.168.%02d.%02d' % (pair[ 0 ], 1)
+ ip_dst = '192.168.%02d.%02d' % (pair[ 1 ], 1)
tcp = out_port if out_port == 24 else 25
- parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=ports[ 0 ],
+ parsed_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=pair[ 0 ],
eth_dst=switch_mac, eth_src=mac_src, ip_ttl=64, ip_src=ip_src,
ip_dst=ip_dst, tcp_dport=tcp )
pkt = str( parsed_pkt )
- self.dataplane.send( ports[ 0 ], pkt )
+ self.dataplane.send( pair[ 0 ], pkt )
# build expected packet at egress switchport
mac_dst = '00:00:00:22:22:%02X' % out_port
exp_pkt = simple_tcp_packet( pktlen=100, dl_vlan_enable=True, vlan_vid=out_port,
@@ -2548,12 +2652,13 @@
logging.info( "Port count less than 2, can't run this case" )
return
- ports = sorted( config[ "port_map" ].keys( ) )
- for port in ports:
+ ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
vlan_id = Untagged.MAX_INTERNAL_VLAN - port
add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG )
add_one_vlan_table_flow( self.controller, port, 1, vlan_id, flag=VLAN_TABLE_FLAG_ONLY_UNTAG )
- for other_port in ports:
+ for other_port in pair:
if other_port == port:
continue
L2gid, l2msg = add_one_l2_interface_group( self.controller, other_port, vlan_id, False, False )
@@ -2562,15 +2667,15 @@
do_barrier( self.controller )
- for out_port in ports:
+ for out_port in pair:
# change dest based on port number
mac_dst = '00:12:34:56:78:%02X' % out_port
- for in_port in ports:
+ for in_port in pair:
if in_port == out_port:
continue
pkt = str( simple_tcp_packet( eth_dst=mac_dst ) )
self.dataplane.send( in_port, pkt )
- for ofport in ports:
+ for ofport in pair:
if ofport in [ out_port ]:
verify_packet( self, pkt, ofport )
else:
@@ -3940,7 +4045,8 @@
logging.info("Add a flow to TABLE-10 to match VLAN ID '100' for packets received at Data Port 1 and action transition to TABLE-20.")
ports = sorted(config["port_map"].keys())
- for port in ports:
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id100, flag=VLAN_TABLE_FLAG_ONLY_TAG)
add_acl_rule(self.controller, eth_type=eth_type_eapol)
@@ -3986,7 +4092,7 @@
logging.info("Step 7")
logging.info("Add flows again ID=10 and ID=60")
- for port in ports:
+ for port in pair:
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id100, flag=VLAN_TABLE_FLAG_ONLY_TAG)
add_acl_rule(self.controller, eth_type=eth_type_eapol)
@@ -4026,7 +4132,8 @@
logging.info("Add a flow to TABLE-10 to match VLAN ID '100' for packets received at Data Port 1 and action transition to TABLE-20.")
ports = sorted(config["port_map"].keys())
- for port in ports:
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
+ for port in pair:
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id100, flag=VLAN_TABLE_FLAG_ONLY_TAG)
add_acl_rule(self.controller, eth_type=eth_type_arp)
@@ -4072,7 +4179,7 @@
logging.info("Step 7")
logging.info("Add flows again ID=10 and ID=60")
- for port in ports:
+ for port in pair:
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id100, flag=VLAN_TABLE_FLAG_ONLY_TAG)
add_acl_rule(self.controller, eth_type=eth_type_arp)
@@ -4273,15 +4380,16 @@
groups = Queue.LifoQueue()
try:
ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 100
vlan_id101 = 101
- for port in ports:
+ for port in pair:
L2gid, l2msg = add_one_l2_interface_group(self.controller, port, vlan_id, True, False)
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG)
groups.put(L2gid)
- msg = add_l2_flood_group(self.controller, ports, vlan_id, vlan_id)
+ msg = add_l2_flood_group(self.controller, pair, vlan_id, vlan_id)
groups.put(msg.group_id)
add_bridge_flow(self.controller, None, vlan_id, msg.group_id, True)
@@ -4296,7 +4404,7 @@
# verify flood
logging.info("Creating a double tagged vlan packet with outer vlan id {}".format(vlan_id))
- for ofport in ports:
+ for ofport in pair:
# change dest based on port number
mac_src = '00:12:34:56:78:%02X' % ofport
parsed_pkt = simple_tcp_packet_two_vlan(pktlen=108, out_dl_vlan_enable=True,
@@ -4308,7 +4416,7 @@
# self won't rx packet
verify_no_packet(self, pkt, ofport)
# others will rx packet
- tmp_ports = list(ports)
+ tmp_ports = list(pair)
tmp_ports.remove(ofport)
verify_packets(self, pkt, tmp_ports)
@@ -4350,6 +4458,10 @@
def runTest(self):
groups = Queue.LifoQueue()
try:
+ if len( config[ "port_map" ] ) < 4:
+ logging.info( "Port count less than 4, can't run this case" )
+ assert (False)
+ return
ports = sorted(config["port_map"].keys())
vlan_id100 = 100
vlan_id101 = 101
@@ -4597,6 +4709,7 @@
groups = Queue.LifoQueue()
try:
ports = sorted(config["port_map"].keys())
+ pair = [ports[(1 - 1)], ports[(2 - 1)]]
vlan_id = 100
vlan_len = 4
num_pkts = 5
@@ -4607,12 +4720,12 @@
tx_bytes_expected = rx_bytes_expected
tx_dropped_expected = 0
- for port in ports:
+ for port in pair:
L2gid, l2msg = add_one_l2_interface_group(self.controller, port, vlan_id, True, False)
add_one_vlan_table_flow(self.controller, port, vlan_id=vlan_id, flag=VLAN_TABLE_FLAG_ONLY_TAG)
groups.put(L2gid)
- msg = add_l2_flood_group(self.controller, ports, vlan_id, vlan_id)
+ msg = add_l2_flood_group(self.controller, pair, vlan_id, vlan_id)
groups.put(msg.group_id)
add_bridge_flow(self.controller, None, vlan_id, msg.group_id, True)
@@ -4628,6 +4741,7 @@
initial_stats_rx = get_port_stats(self, ports[0])
initial_stats_tx = get_port_stats(self, ports[1])
+ time.sleep(2)
logging.info("Get required counter values from port".format(ports[0]))
rx_bytes_before = get_required_statistic_from_port(self, ports[0], "rx_bytes")
rx_pkts_before = get_required_statistic_from_port(self, ports[0], "rx_packets")
diff --git a/Fabric/Tests/global_vars.json b/Fabric/Tests/global_vars.json
new file mode 100644
index 0000000..05840fc
--- /dev/null
+++ b/Fabric/Tests/global_vars.json
@@ -0,0 +1,21 @@
+{
+ "//": "Environment params: ",
+ "//": "--controller_ip - IP address of Server with OFTEST framework",
+ "//": "--controller_port - TCP port of Server with OFTEST framework, default is 6653",
+ "//": "--switch_ip - IP address of switch under test",
+ "//": "--switch_user - Username to connect to switch under test and execute commands",
+ "//": "--switch_passwd - Password to connect to switch under test and execute commands",
+ "//": "--onos_server_ip - IP address of Server with ONOS",
+ "//": "--onos_user - Username for ONOS server",
+ "//": "--onos_passwd - Password for Server with ONOS",
+ "//": "--onos_port - TCP port of Server with ONOS",
+ "controller_ip": "192.168.111.204",
+ "controller_port": "6653",
+ "switch_ip": "192.168.111.212",
+ "switch_user": "root",
+ "switch_passwd": "onl",
+ "onos_server_ip": "192.168.111.204",
+ "onos_user": "onos",
+ "onos_passwd": "rocks",
+ "onos_port": "31653"
+}
diff --git a/Fabric/Tests/operational.py b/Fabric/Tests/operational.py
index 9292a08..1bedd5a 100644
--- a/Fabric/Tests/operational.py
+++ b/Fabric/Tests/operational.py
@@ -13,3 +13,635 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+
+"""
+Check README file
+"""
+import logging
+import os
+import time
+import json
+
+import Queue
+import ofp
+import oftest.base_tests as base_tests
+from accton_util import *
+from oftest import config
+from oftest.ofdpa_utils import *
+from oftest.testutils import *
+from oftest.utils import *
+
+#### Global variables ####
+req_onos = "no" # to identify weather a test case require ONOS controller or not; default value is "no" for all the test cases without ONOS server
+
+### Read config parameters from JSON file 'global_vars.json'
+ROOT_DIR = os.path.dirname(os.path.realpath(__file__))
+with open(ROOT_DIR + '/' + 'global_vars.json') as f:
+ data = json.load(f)
+
+switch_ip = data['switch_ip']
+switch_user = data['switch_user']
+switch_passwd = data['switch_passwd']
+controller_ip = data['controller_ip']
+controller_port = data['controller_port']
+onos_server_ip = data['onos_server_ip']
+onos_user = data['onos_user']
+onos_passwd = data['onos_passwd']
+onos_port = data['onos_port']
+
+
+class FabricSW_OP_TC_0005(base_tests.SimpleDataPlane):
+ """
+ To verify packet flooding when ports associated with L2 Interface groups are flapped administratively (disable/enable) - single interface pair.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ vlan_id101 = 101
+ vlan_id201 = 201
+ global req_onos
+
+ try:
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "yes":
+ req_onos = "no"
+ ofagent_reconfig(self, arg="no")
+ ofagent_restart(self)
+ time.sleep(90)
+
+ of_ports = config["port_map"].keys()
+
+ create_flows(self, groups, vlan_id101, 1, 2)
+ logging.info("Admin down interfaces")
+ port_admin(self, of_ports[0], admin_state="disable")
+ port_admin(self, of_ports[1], admin_state="disable")
+ time.sleep(2)
+ logging.info("Admin up interfaces")
+ port_admin(self, of_ports[0], admin_state="enable")
+ port_admin(self, of_ports[1], admin_state="enable")
+ time.sleep(7)
+
+ # Verify flood VLAN101 from port1 to port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+ transmit_and_verify_packets(self, vlan_id201, 1, 2, False)
+
+ finally:
+ delete_all_flows(self.controller)
+ delete_groups(self.controller, groups)
+ delete_all_groups(self.controller)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0010(base_tests.SimpleDataPlane):
+ """
+ To verify packet forwarding when ports associated with L2 Interface groups are flapped administratively (disable/enable) - multiple interface pairs.
+ """
+
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ try:
+ if len( config[ "port_map" ] ) < 3:
+ logging.info("Port count less than 3, can't run this case")
+ assert False, "Port count less than 3, can't run this case"
+ return
+
+ if req_onos == "yes":
+ req_onos = "no"
+ ofagent_reconfig(self, arg="no")
+ ofagent_restart(self)
+ time.sleep(90)
+
+ ports = (config["port_map"].keys())
+ vlan_id101 = 101
+ vlan_id151 = 151
+
+ # Create flows between two pairs of ports
+ create_flows(self, groups, vlan_id101, 1, 2)
+ create_flows(self, groups, vlan_id151, 1, 3)
+
+ logging.info("Admin down interface " + str(ports[2]))
+ port_admin(self, ports[2], admin_state="disable")
+ time.sleep(5)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ logging.info("Admin up interface " + str(ports[2]))
+ port_admin(self, ports[2], admin_state="enable")
+ time.sleep(7)
+
+ # Send VLAN 151 to port1 and verify packet on port3
+ transmit_and_verify_packets(self,vlan_id151, 1, 3, True)
+
+ # Send VLAN 151 to port3 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id151, 3, 1, True)
+
+ logging.info("Admin down interface " + str(ports[0]))
+ port_admin(self, ports[0], admin_state="disable")
+ time.sleep(3)
+
+ logging.info("Admin up interface " + str(ports[0]))
+ port_admin(self, ports[0], admin_state="enable")
+ time.sleep(5)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ # Send VLAN 151 to port1 and verify packet on port3
+ transmit_and_verify_packets(self, vlan_id151, 1, 3, True)
+
+ finally:
+ delete_all_flows(self.controller)
+ delete_groups(self.controller, groups)
+ delete_all_groups(self.controller)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0015(base_tests.SimpleDataPlane):
+ """
+ To verify control channels are re-established and flows are re-configuration after fabric switch is rebooted.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ vlan_id101 = 101
+ try:
+ datapathid = get_datapathid(self)
+
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "no":
+ req_onos = "yes"
+ ofagent_reconfig(self, arg="yes")
+ ofagent_restart(self)
+ time.sleep(90)
+
+ ports = (config["port_map"].keys())
+
+ # Create flows between two pairs of ports
+ add_onos_xconnect(self, datapathid, vlan_id101, ports[0], ports[1])
+ time.sleep(10)
+
+ #Reboot switch
+ switch_restart(self)
+ time.sleep(120)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ finally:
+ # Remove vlan-cross connection
+ # send_command_to_onos_cli(self.log_path, "clear_xconnection1", "sr-xconnect-remove of:" + datapathid + " " + str(vlan_id101),
+ # self.onos_server_ip, self.onos_user, self.onos_passwd, regexp='onos>')
+ remove_onos_xconnect(self, datapathid, vlan_id101)
+ time.sleep(3)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0020(base_tests.SimpleDataPlane):
+ """
+ To verify control channels are re-established and flows are re-configuration after of-agent restart.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ vlan_id101 = 101
+ try:
+ datapathid = get_datapathid(self)
+
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "no":
+ req_onos = "yes"
+ ofagent_reconfig(self, arg="yes")
+ ofagent_restart(self)
+ time.sleep(60)
+
+ ports = (config["port_map"].keys())
+ # Create flows between two pairs of ports
+ add_onos_xconnect(self, datapathid, vlan_id101, ports[0], ports[1])
+ time.sleep(2)
+
+ # Agent restart
+ ofagent_restart(self)
+ time.sleep(90)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ finally:
+ # Remove vlan-cross connection
+ remove_onos_xconnect(self, datapathid, vlan_id101)
+ time.sleep(3)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0025(base_tests.SimpleDataPlane):
+ """
+ To verify packet forwarding when ports associated with L2 Interface groups are flapped physically.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ try:
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "yes":
+ req_onos = "no"
+ ofagent_reconfig(self, arg="no")
+ ofagent_restart(self)
+ time.sleep(90)
+
+ vlan_id101 = 101
+ vlan_id201 = 201
+ ports = (config["port_map"].keys())
+
+ # Create flows between two pairs of ports
+ create_flows(self, groups, vlan_id101, 1, 2)
+
+ logging.info("Simulate plug-out and Plug-in the physical cable on port1 (through bcm port state commands)")
+ switch_port_enable(self, ports[0], False)
+ time.sleep(2)
+ switch_port_enable(self, ports[0], True)
+ time.sleep(5)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ # Send VLAN 201 to port1 and verify no packet on port2
+ transmit_and_verify_packets(self, vlan_id201, 1, 2, False)
+
+ finally:
+ delete_all_flows(self.controller)
+ delete_groups(self.controller, groups)
+ delete_all_groups(self.controller)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0030(base_tests.SimpleDataPlane):
+ """
+ To verify switch owners the flow rules when vlan-cross-connect pair is configured on operationally down interface and then interfaces are enabled.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ try:
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "yes":
+ req_onos = "no"
+ ofagent_reconfig(self, arg="no")
+ ofagent_restart(self)
+ time.sleep(60)
+
+ ports = (config["port_map"].keys())
+ vlan_id101 = 101
+ vlan_id201 = 201
+
+ logging.info("Plug-out the physical cable on port1 (through bcm port state commands)")
+ switch_port_enable(self, ports[0], False)
+ time.sleep(2)
+
+ # Create flows between two pairs of ports
+ create_flows(self, groups, vlan_id101, 1, 2)
+
+ logging.info("Plug-in the physical cable on port1 (through bcm port state commands)")
+ switch_port_enable(self, ports[0], True)
+ time.sleep(5)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 201 to port1 and verify no packet on port2
+ transmit_and_verify_packets(self, vlan_id201, 1, 2, False)
+
+ finally:
+ delete_all_flows(self.controller)
+ delete_groups(self.controller, groups)
+ delete_all_groups(self.controller)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0035(base_tests.SimpleDataPlane):
+ """
+ To verify flows are successfully modified when ports associated with vlan-cross-connect pair is changed.
+ """
+ controller_port = controller_port
+ onos_port = onos_port
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ onos_server_ip = onos_server_ip
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ vlan_id101 = 101
+ try:
+ datapathid = get_datapathid(self)
+ if len( config[ "port_map" ] ) < 3:
+ logging.info( "Port count less than 3, can't run this case" )
+ assert False, "Port count less than 3, can't run this case"
+ return
+
+ if req_onos == "no":
+ req_onos = "yes"
+ ofagent_reconfig(self, arg="yes")
+
+ ofagent_restart(self)
+ time.sleep(90)
+
+ ports = (config["port_map"].keys())
+
+ # Create flows between two pairs of ports
+ add_onos_xconnect(self, datapathid, vlan_id101, ports[0], ports[1])
+ time.sleep(10)
+
+ #Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ #Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ # Modify vlan-cross connect with port3 instead of port2
+ add_onos_xconnect(self, datapathid, vlan_id101, ports[0], ports[2])
+ time.sleep(10)
+ #
+ # #Send VLAN 101 to port1 and verify packet on port3
+ transmit_and_verify_packets(self, vlan_id101, 1, 3, True)
+ #
+ # #Send VLAN 101 to port3 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 3, 1, True)
+ #
+ # #Send VLAN 101 to port2 and verify no packets on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, False)
+
+ finally:
+ #Remove vlan-cross connection
+ remove_onos_xconnect(self, datapathid, vlan_id101)
+ time.sleep(5)
+ logging.info("End of Test")
+
+
+class FabricSW_OP_TC_0040(base_tests.SimpleDataPlane):
+ """
+ To verify flows are removed when vlan-cross-connect pair is removed.
+ """
+
+ switch_user = switch_user
+ switch_passwd = switch_passwd
+ switch_ip = switch_ip
+ controller_ip = controller_ip
+ controller_port = controller_port
+ onos_server_ip = onos_server_ip
+ onos_port = onos_port
+ onos_user = onos_user
+ onos_passwd = onos_passwd
+
+ def runTest(self):
+ groups = Queue.LifoQueue()
+ global req_onos
+ vlan_id101 = 101
+ try:
+ datapathid = get_datapathid(self)
+
+ if len( config[ "port_map" ] ) < 2:
+ logging.info( "Port count less than 2, can't run this case" )
+ assert False, "Port count less than 2, can't run this case"
+ return
+
+ if req_onos == "no":
+ req_onos = "yes"
+ ofagent_reconfig(self, arg="yes")
+ ofagent_restart(self)
+ time.sleep(90)
+
+ ports = (config["port_map"].keys())
+
+ # Create flows between two pairs of ports
+ add_onos_xconnect(self, datapathid, vlan_id101, ports[0], ports[1])
+ time.sleep(10)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, True)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, True)
+
+ # Remove vlan-cross connection
+ remove_onos_xconnect(self, datapathid, vlan_id101)
+ time.sleep(10)
+
+ # Send VLAN 101 to port1 and verify packet on port2
+ transmit_and_verify_packets(self, vlan_id101, 1, 2, False)
+
+ # Send VLAN 101 to port2 and verify packet on port1
+ transmit_and_verify_packets(self, vlan_id101, 2, 1, False)
+
+ finally:
+ # Remove vlan-cross connection
+ remove_onos_xconnect(self, datapathid, vlan_id101)
+ logging.info("End of Test")
+
+
+def create_flows(self, groups, vid, port1, port2):
+ ports = (config["port_map"].keys())
+ pair = [ports[(port1-1)], ports[(port2-1)]]
+
+ for port in pair:
+ L2gid, l2msg = add_one_l2_interface_group(self.controller, port, vid, True, False)
+ add_one_vlan_table_flow(self.controller, port, vlan_id=vid, flag=VLAN_TABLE_FLAG_ONLY_TAG)
+ groups.put(L2gid)
+
+ msg = add_l2_flood_group(self.controller, pair, vid, vid)
+ groups.put(msg.group_id)
+ add_bridge_flow(self.controller, None, vid, msg.group_id, True)
+
+ logging.info(
+ "Add a flow to TABLE-60 to match vlan {} and action Send to Controller".format(vid))
+ add_acl_rule(self.controller, vlan_id=vid)
+
+ match = ofp.match()
+ match.oxm_list.append(ofp.oxm.vlan_vid(vid))
+
+
+def transmit_and_verify_packets(self, vid, port1, port2, recv):
+ # @parameters:
+ # vid - VLAN ID to create a flow
+ # port1 - a port where to send packets
+ # port2 - a port where to verify packets
+ # recv = True or False: True - we expect receive packets on port2; False - we don't expect recive packets on port2
+
+ ports = (config["port_map"].keys())
+ pair = [ports[(port1-1)], ports[(port2-1)]]
+
+ # verify flood
+ logging.info("Creating a double tagged vlan packet with outer vlan id {}".format(vid))
+ # change dest based on port number
+ mac_src = '00:12:34:56:78:%02X' % pair[0]
+ parsed_pkt = simple_tcp_packet_two_vlan(pktlen=108, out_dl_vlan_enable=True,
+ out_vlan_vid=vid, in_dl_vlan_enable=True, in_vlan_vid=10,
+ eth_dst='00:12:34:56:78:9a', eth_src=mac_src)
+
+ pkt = str(parsed_pkt)
+ self.dataplane.send(pair[0], pkt)
+ # self won't rx packet
+ verify_no_packet(self, pkt, pair[0])
+ if recv == True:
+ # verify rx packet
+ tmp_ports = list(pair)
+ tmp_ports.remove(pair[0])
+ verify_packets(self, pkt, tmp_ports)
+ else:
+ #Verify the packet is not flooded
+ verify_no_packet(self, pkt, ports[(port2-1)])
+
+
+
+def port_admin(self, port, admin_state):
+ # @parameters:
+ # port - number of port to set admin state disable or enable
+ # admin_state for port = enable | disable
+
+ # Retrieve Port Configuration
+ logging.info("Sends Features Request and retrieve Port Configuration from reply")
+ (hw_addr, port_config, advert) = \
+ port_config_get(self.controller, port)
+ self.assertTrue(port_config is not None, "Did not get port config")
+
+ logging.debug("Admin state bit of port " + str(port) + " is now " +
+ str(port_config & ofp.OFPPC_PORT_DOWN))
+
+ # Modify Port Configuration
+ logging.info("Modify Port Configuration using Port Modification Message:OFPT_PORT_MOD")
+
+ if admin_state == "disable":
+
+ rv = port_config_set(self.controller, port,
+ port_config ^ ofp.OFPPC_PORT_DOWN, ofp.OFPPC_PORT_DOWN)
+ self.assertTrue(rv != -1, "Error sending port mod")
+ do_barrier(self.controller)
+
+ # Verify change took place with features request
+ logging.info("Verify the change")
+ (hw_addr, port_config2, advert) = port_config_get(self.controller, port)
+
+ logging.debug("Admin state bit " + str(port) + " is now " +
+ str(port_config2 & ofp.OFPPC_PORT_DOWN))
+ self.assertTrue(port_config2 is not None, "Did not get port config2")
+ self.assertTrue(port_config2 & ofp.OFPPC_PORT_DOWN !=
+ port_config & ofp.OFPPC_PORT_DOWN,
+ "Bit change did not take")
+
+ if admin_state == "enable":
+ rv = port_config_set(self.controller, port, port_config ^ ofp.OFPPC_PORT_DOWN, 0)
+ self.assertTrue(rv != -1, "Error sending port mod")
+ do_barrier(self.controller)
+
+ # Verify change took place with features request
+ logging.info("Verify the change")
+ (hw_addr, port_config2, advert) = port_config_get(self.controller, port)
+
+ logging.debug("Admin state bit " + str(port) + " is now " + str(port_config2 & ofp.OFPPC_PORT_DOWN))
+ self.assertTrue(port_config2 is not None, "Did not get port config2")
+ self.assertTrue(port_config2 & ofp.OFPPC_PORT_DOWN != port_config & ofp.OFPPC_PORT_DOWN, "Bit change did not take")
+
+
+def get_datapathid(self):
+ feature_reply = get_featureReplay(self)
+ str_datapath_id_f = "{:016x}".format(feature_reply.datapath_id)
+ return str_datapath_id_f
diff --git a/Fabric/Utilities/accton/accton_util.py b/Fabric/Utilities/accton/accton_util.py
index 0f32e76..b0752e6 100755
--- a/Fabric/Utilities/accton/accton_util.py
+++ b/Fabric/Utilities/accton/accton_util.py
@@ -21,6 +21,10 @@
import time
from oftest.testutils import *
from oftest.parse import parse_ipv6
+import pexpect
+import os
+import json
+import sys
from ncclient import manager
import ncclient
@@ -84,6 +88,7 @@
return switch_cpu_mac_str, switch_cpu_mac
+
def DumpGroup(stats, verify_group_stats, always_show=True):
if(len(stats) > len(verify_group_stats)):
min_len = len(verify_group_stats)
@@ -1874,6 +1879,178 @@
return m.get_config(source='running').data_xml
+def ofagent_restart(self):
+ log_path = (config["log_dir"])
+ log_file = "OF_agent_service_restart.log"
+ regexp = 'Setting up OFDPA running environment'
+ output = open(log_path + '/' + log_file, 'w')
+ cmd = "service ofagentd restart"
+ child = pexpect.spawn('ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.switch_user +'@%s' % self.switch_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.switch_passwd)
+ child.logfile = output
+ child.expect('root@localhost:~#')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def switch_restart(self):
+ log_path = (config["log_dir"])
+ log_file = "Switch_restart.log"
+ regexp = 'The system is going down for reboot NOW!'
+ output = open(log_path + '/' + log_file, 'w')
+ cmd = "reboot"
+ child = pexpect.spawn('ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.switch_user +'@%s' % self.switch_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.switch_passwd)
+ child.logfile = output
+ child.expect('root@localhost:~#')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def switch_port_enable(self, port, state):
+ # @parameters:
+ # port - port number on the switch to admin state Enable or Disable
+ # state - admin state "False" - Down or "True" - Up for switch's port
+ log_path = (config["log_dir"])
+ log_file = "Switch_port_" + str(state) + ".log"
+ regexp = 'Returned from ofdpaBcmCommand rpc with rc = 0.'
+ output = open(log_path + '/' + log_file, 'w')
+ if state == False:
+ cmd = "client_drivshell port xe{} enable=false".format(port - 1)
+ elif state == True:
+ cmd = "client_drivshell port xe{} enable=true".format(port - 1)
+ else:
+ assert False, "Incorrect port state parameter is given!"
+
+ child = pexpect.spawn('ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.switch_user +'@%s' % self.switch_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.switch_passwd)
+ child.logfile = output
+ child.expect('root@localhost:~#')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def switch_port_set_mtu(self, port, mtu):
+ # @parameters:
+ # port - port number on the switch to admin state Enable or Disable
+ # mtu - size of MTU for switch's port in bytes
+ log_path = (config["log_dir"])
+ log_file = "Switch_port_set_mtu_" + str(mtu) + ".log"
+ regexp = 'Returned from ofdpaBcmCommand rpc with rc = 0.'
+ output = open(log_path + '/' + log_file, 'w')
+ cmd = ("client_drivshell port xe{} FrameMax=" + str(mtu)).format(port - 1)
+ child = pexpect.spawn('ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.switch_user +'@%s' % self.switch_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.switch_passwd)
+ child.logfile = output
+ child.expect('root@localhost:~#')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def send_command_to_switch_cli(log_file, cmd, switch_ip, switch_user, switch_passwd, regexp=None):
+ log_path = (config["log_dir"])
+ output = open(log_path + '/' + log_file, 'w')
+ child = pexpect.spawn('ssh -p 22 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + switch_user +'@%s' % switch_ip)
+ child.expect('[pP]assword:')
+ child.sendline(switch_passwd)
+ child.logfile = output
+ child.expect('root@localhost:~#')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def send_command_to_onos_cli(log_file, cmd, onos_server, onos_user, onos_passwd, regexp=None):
+ log_path = (config["log_dir"])
+ output = open(log_path + '/' + log_file, 'w')
+ child = pexpect.spawn('ssh -p 30115 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + onos_user + '@%s' % onos_server)
+ child.expect('[pP]assword:')
+ child.sendline(onos_passwd)
+ child.logfile = output
+ child.expect('onos>')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def add_onos_xconnect(self,datapathid, vid, port1, port2):
+ log_path = (config["log_dir"])
+ cmd = "sr-xconnect-add of:" + datapathid + " " + str(vid) + " " + str(port1) + " " + str(port2)
+ regexp = 'onos>'
+ output = open(log_path + '/' + "add_xconnection" + str(vid) + "_" + str(port1) + "_" + str(port2), 'w')
+ child = pexpect.spawn(
+ 'ssh -p 30115 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.onos_user + '@%s' % self.onos_server_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.onos_passwd)
+ child.logfile = output
+ child.expect('onos>')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+def remove_onos_xconnect(self,datapathid, vid):
+ log_path = (config["log_dir"])
+ cmd = "sr-xconnect-remove of:" + datapathid + " " + str(vid)
+ regexp = 'onos>'
+ output = open(log_path + '/' + "remove_xconnection" + str(vid), 'w')
+ child = pexpect.spawn(
+ 'ssh -p 30115 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ' + self.onos_user + '@%s' % self.onos_server_ip)
+ child.expect('[pP]assword:')
+ child.sendline(self.onos_passwd)
+ child.logfile = output
+ child.expect('onos>')
+ child.sendline(cmd)
+ if regexp:
+ child.expect(regexp)
+
+ output.close()
+ child.close()
+
+
+def ofagent_reconfig(self, arg):
+ # @parameters:
+ # arg - configure switch with both OFTest and ONOS (arg = yes) or only OFTest is required (arg = no)
+ log_path = (config["log_dir"])
+ if arg == "yes":
+ logging.info("Reconfigure OFAGENT to use both ONOS and OFTEST")
+ comd = "sed -i '/^OPT_ARGS=/c\OPT_ARGS=\"-d 2 -c 2 -c 4 -t " + self.controller_ip + ":" + self.controller_port + " -t " + self.onos_server_ip + ":" + self.onos_port + " -i $DPID\"' /etc/ofagent/ofagent.conf"
+ send_command_to_switch_cli("test_ofagent_reconfigure_yes", comd, self.switch_ip, self.switch_user, self.switch_passwd, regexp='root@localhost:~#')
+ time.sleep(1)
+ elif arg == "no":
+ logging.info("Reconfigure OFAGENT to use OFTEST only")
+ comd = "sed -i '/^OPT_ARGS=/c\OPT_ARGS=\"-d 2 -c 2 -c 4 -t " + self.controller_ip + ":" + self.controller_port + " -i $DPID\"' /etc/ofagent/ofagent.conf"
+ send_command_to_switch_cli("test_ofagent_reconfigure_no", comd, self.switch_ip, self.switch_user, self.switch_passwd, regexp='root@localhost:~#')
+ time.sleep(1)
+
"""
MPLS
"""
diff --git a/Fabric/Utilities/src/python/oftest/dataplane.py b/Fabric/Utilities/src/python/oftest/dataplane.py
index df79d47..839fe9e 100644
--- a/Fabric/Utilities/src/python/oftest/dataplane.py
+++ b/Fabric/Utilities/src/python/oftest/dataplane.py
@@ -132,6 +132,13 @@
#os.system("ifconfig up %s" % self.interface_name)
os.system("ifconfig %s up" % self.interface_name)
+ def mtu(self, mtu):
+ """
+ Change MTU value of port.
+ """
+ # os.system("ifconfig up %s" % self.interface_name)
+ os.system("ifconfig %s mtu %d" % (self.interface_name, mtu))
+
class DataPlanePortPcap:
"""
@@ -392,3 +399,7 @@
if self.pcap_writer:
self.pcap_writer.close()
self.pcap_writer = None
+
+ def port_mtu(self, port_number, mtu):
+ """Change MTU on controller's port"""
+ self.ports[port_number].mtu(mtu)