ptf/saiqosmap.py (8,923 lines of code) (raw):
# Copyright 2021-present Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Thrift SAI QosMap interface tester
"""
from sai_thrift.sai_headers import *
from sai_base_test import *
# test DSCP stepping in the loop from 0 to 64
DSCP_TEST_STEP = 1
QOS_TYPE_DICT = {
SAI_QOS_MAP_TYPE_DSCP_TO_TC: (
"dscp", "tc"),
SAI_QOS_MAP_TYPE_DSCP_TO_COLOR: (
"dscp", "color"),
SAI_QOS_MAP_TYPE_TC_TO_QUEUE: (
"tc", "queue_index"),
SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR: (
"dot1p", "color"),
SAI_QOS_MAP_TYPE_DOT1P_TO_TC: (
"dot1p", "tc"),
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE: (
"prio", "queue_index"),
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP: (
"prio", "pg"),
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP: (
"tc", "pg"),
SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P: (
"tc", "dot1p", "color"),
SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP: (
"tc", "dscp", "color")}
def combine_ingress_pfc_tc_to_pg_mapping(pfc_prio_list, pg_list, tc_pg_list):
''' Function creates mapping
PFC PRIORITY -> PRIORITY GROUP based on pg and tc_pg mapping.
Args:
pfc_prio_list (list): pfc_prio list of elements
pg_list (list): pg list of elements
tc_pg_list (list): tc pg list of elements
Returns:
list: mapping list of pfc_prio to pg elements
'''
mapping = []
for i in pfc_prio_list:
mapping.append([pfc_prio_list[i], pg_list[tc_pg_list[i]]])
return mapping
def verify_qos_map(client, qosmap_id, qos_type, key_list, data_list):
''' Function verifies the HW QosMap type and map_to_value_list
Args:
client (client): client
qosmap_id (obj_id): qos map object id
qos_type (uint): qos map type
key_list (list): qos map key list
data_list (list): qos map data list
Returns:
bool: True if succesfully verified
'''
result = True
attr = sai_thrift_get_qos_map_attribute(
client,
qosmap_id,
type=qos_type,
map_to_value_list=sai_thrift_qos_map_list_t(
count=100,
maplist=[]))
if attr['type'] != qos_type:
print("WARNING unexpected qos_map_type=%d, expected %d"
% (attr['type'].count, qos_type))
return False
if len(key_list) != attr['map_to_value_list'].count:
print(
"WARNING unexpected map_to_value_list.count=%d, expected %d"
% (attr['map_to_value_list'].count, len(key_list)))
return False
expected_key = QOS_TYPE_DICT[qos_type][0]
expected_value = QOS_TYPE_DICT[qos_type][1]
if len(QOS_TYPE_DICT[qos_type]) == 3:
expected_key2 = QOS_TYPE_DICT[qos_type][2]
for i, data in enumerate(attr['map_to_value_list'].maplist):
key_dict = {"color": data.key.color,
"dscp": data.key.dscp,
"dot1p": data.key.dot1p,
"prio": data.key.prio,
"tc": data.key.tc}
value_dict = {"color": data.value.color,
"dscp": data.value.dscp,
"dot1p": data.value.dot1p,
"pg": data.value.pg,
"prio": data.value.prio,
"tc": data.value.tc,
"queue_index": data.value.queue_index}
if len(QOS_TYPE_DICT[qos_type]) == 2:
if ((key_dict[expected_key] != key_list[i]) or
(value_dict[expected_value] != data_list[i])):
result = False
break
elif len(QOS_TYPE_DICT[qos_type]) == 3:
if ((key_dict[expected_key] != key_list[i][0]) or
(key_dict[expected_key2] != key_list[i][1]) or
(value_dict[expected_value] != data_list[i])):
result = False
break
else:
print("WARNING!!! - UNSUPPORTED qos type")
result = False
break
return result
def create_qos_map_to_value_list(map_type, key_list, data_list):
''' Creates the qos map value list
Args:
map_type (uint): qos map type
key_list (list): qos map key list
data_list (list): qos map data list
Returns:
list: qos map value list
'''
map_list = []
i = 0
if len(key_list) != len(data_list):
print("WARNING length of both lists should be equal")
return 0
for qos_type_dict_key in QOS_TYPE_DICT:
if ((map_type == qos_type_dict_key) and
(len(QOS_TYPE_DICT[qos_type_dict_key]) == 2)):
for key_list_data in key_list:
value_list_data = data_list[i]
mapping = sai_thrift_qos_map_t(
key=sai_thrift_qos_map_params_t(
**{QOS_TYPE_DICT[qos_type_dict_key][0]:
key_list_data}),
value=sai_thrift_qos_map_params_t(
**{QOS_TYPE_DICT[qos_type_dict_key][1]:
value_list_data}))
map_list.append(mapping)
i += 1
elif ((map_type == qos_type_dict_key) and
(len(QOS_TYPE_DICT[qos_type_dict_key]) == 3)):
for key_list_data1, key_list_data2 in key_list:
value_list_data = data_list[i]
mapping = sai_thrift_qos_map_t(
key=sai_thrift_qos_map_params_t(
**{QOS_TYPE_DICT[qos_type_dict_key][0]:
key_list_data1,
QOS_TYPE_DICT[qos_type_dict_key][2]:
key_list_data2}),
value=sai_thrift_qos_map_params_t(
**{QOS_TYPE_DICT[qos_type_dict_key][1]:
value_list_data}))
map_list.append(mapping)
i += 1
qos_map_list = sai_thrift_qos_map_list_t(count=len(map_list),
maplist=map_list)
return qos_map_list
def update_and_verify_qos_map(client,
mapid,
map_type,
key_list,
data_list):
''' updates and verifies the qos map object with
the provided key and data value lists
Args:
client (client): RPC client
mapid (obj_id) : qos map object id
map_type (uint): qos map type
key_list (list): qos map key list
data_list (list): qos map data list
Returns:
bool: True if succesfully updated and verified
'''
if mapid == 0:
print("WARNING mapid not valid")
return False
if len(key_list) != len(data_list):
print("WARNING length of both lists should be equal")
return False
qos_map_list = create_qos_map_to_value_list(map_type, key_list, data_list)
status = sai_thrift_set_qos_map_attribute(client,
mapid,
map_to_value_list=qos_map_list)
if status != SAI_STATUS_SUCCESS:
print("WARNING Failed to update qos_map attribute")
return False
if verify_qos_map(client, mapid, map_type, key_list,
data_list) is False:
print("WARNING! failed to verify updated qos_map 0x%x" % (mapid))
return False
return True
def create_and_verify_qos_map(client, map_type, key_list, data_list,
verify=True):
''' creates and verifies the qos map object with
the provided key and data value lists
Args:
client (client): RPC client
map_type (uint): qos map type
key_list (list): qos map key list
data_list (list): qos map data list
verify (bool): verify request if True
Returns:
obj_id: created object id or 0 if failed to create or verify
'''
if len(key_list) != len(data_list):
print("WARNING length of both lists should be equal")
return 0
qos_map_list = create_qos_map_to_value_list(map_type, key_list,
data_list)
qos_map_id = sai_thrift_create_qos_map(client,
type=int(map_type),
map_to_value_list=qos_map_list)
if (qos_map_id != 0) and verify:
if verify_qos_map(client, qos_map_id, map_type, key_list,
data_list) is False:
print("WARNING! failed to verify the qos_map 0x%x" % (qos_map_id))
sai_thrift_remove_qos_map(client, qos_map_id)
qos_map_id = 0
return qos_map_id
@group("draft")
class L2QosMapBaseClass(SaiHelperBase):
"""Verifies SAI bridge port flood test case"""
def setUp(self):
super(L2QosMapBaseClass, self).setUp()
self.bp_port_list = []
self.vlan_member_list = []
self.test_dev_ports = []
self.test_ports = [self.port0, self.port1, self.port2, self.port3]
self.dev_test_port_list = [
self.dev_port0, self.dev_port1, self.dev_port2, self.dev_port3
]
vlan_id = 1
i = 0
for port in self.test_ports:
sai_thrift_set_port_attribute(self.client,
port,
port_vlan_id=vlan_id)
bp_port = sai_thrift_create_bridge_port(
self.client,
bridge_id=self.default_1q_bridge,
port_id=port,
type=SAI_BRIDGE_PORT_TYPE_PORT,
admin_state=True)
setattr(self, 'port%d_bp' % (i), bp_port)
self.bp_port_list.append(bp_port)
vlan_member = sai_thrift_create_vlan_member(
self.client,
vlan_id=self.default_vlan_id,
bridge_port_id=bp_port,
vlan_tagging_mode=SAI_VLAN_TAGGING_MODE_TAGGED)
self.vlan_member_list.append(vlan_member)
i += 1
def tearDown(self):
sai_thrift_flush_fdb_entries(
self.client,
entry_type=SAI_FDB_FLUSH_ENTRY_TYPE_ALL)
for vlan_member in self.vlan_member_list:
sai_thrift_remove_vlan_member(self.client, vlan_member)
for bp_port in self.bp_port_list:
sai_thrift_remove_bridge_port(self.client, bp_port)
for port in self.test_ports:
sai_thrift_set_port_attribute(
self.client, port, port_vlan_id=0)
super(L2QosMapBaseClass, self).tearDown()
def getPortQueueIndexStats(self, port, index, qstats):
''' Returns the port queue index stats.
Args:
port (list): list of port object ids
index (uint): port queue index
qstats (list): list of requested port queue statistics
Returns:
uint: port queue counters statistics
'''
total_cnt = 0
sai_list = sai_thrift_u32_list_t(count=100, uint32list=[])
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_queue_list=sai_list)
queue_list = attr['qos_queue_list'].idlist
queue = queue_list[index]
attr = sai_thrift_get_queue_attribute(self.client, queue, index=True)
self.assertTrue(attr['index'] == index, "Failed to get the queue")
for q_stat in qstats:
stats = query_counter(
self, sai_thrift_get_queue_stats, queue)
total_cnt += stats[q_stat]
return total_cnt
@group("draft")
class L3QosMapBaseClass(SaiHelperBase):
''' QOS Map Tests Base class '''
def setUp(self):
dmac0 = '00:11:22:33:44:06'
dmac1 = '00:11:22:33:44:04'
nhop_ip0 = '10.10.10.10'
nhop_ip1 = '10.10.10.11'
nhop_ip2 = '10.10.10.12'
nhop_ip3 = '10.10.10.13'
super(L3QosMapBaseClass, self).setUp()
self.ppg_list = [0] * 8
self.test_case_name = ""
self.test_mapping = [0] * 4
self.test_dev_ports = []
self.test_ports = [self.port0, self.port1, self.port2, self.port3]
self.dev_test_port_list = [
self.dev_port0, self.dev_port1, self.dev_port2, self.dev_port3
]
self.port0_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.port0,
admin_v4_state=True,
admin_v6_state=True)
self.port1_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.port1,
admin_v4_state=True,
admin_v6_state=True)
self.port2_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.port2,
admin_v4_state=True,
admin_v6_state=True)
self.port3_rif = sai_thrift_create_router_interface(
self.client,
type=SAI_ROUTER_INTERFACE_TYPE_PORT,
virtual_router_id=self.default_vrf,
port_id=self.port3,
admin_v4_state=True,
admin_v6_state=True)
# # test neighbor creation
self.neighbor_entry0 = sai_thrift_neighbor_entry_t(
self.switch_id, self.port0_rif, sai_ipaddress(nhop_ip0))
sai_thrift_create_neighbor_entry(self.client,
self.neighbor_entry0,
dst_mac_address=dmac1)
self.neighbor_entry1 = sai_thrift_neighbor_entry_t(
self.switch_id, self.port1_rif, sai_ipaddress(nhop_ip1))
sai_thrift_create_neighbor_entry(self.client,
self.neighbor_entry1,
dst_mac_address=dmac1)
self.neighbor_entry2 = sai_thrift_neighbor_entry_t(
self.switch_id, self.port2_rif, sai_ipaddress(nhop_ip2))
sai_thrift_create_neighbor_entry(self.client,
self.neighbor_entry2,
dst_mac_address=dmac1)
self.neighbor_entry3 = sai_thrift_neighbor_entry_t(
self.switch_id, self.port3_rif, sai_ipaddress(nhop_ip3))
sai_thrift_create_neighbor_entry(self.client,
self.neighbor_entry3,
dst_mac_address=dmac1)
self.nhop1 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress('10.10.10.11'),
router_interface_id=self.port1_rif,
type=SAI_NEXT_HOP_TYPE_IP)
self.route_entry1 = sai_thrift_route_entry_t(
vr_id=self.default_vrf, destination=sai_ipprefix('10.10.10.11/32'))
sai_thrift_create_route_entry(self.client,
self.route_entry1,
next_hop_id=self.nhop1)
# IPv6 route
self.nhop0 = sai_thrift_create_next_hop(
self.client,
ip=sai_ipaddress('10.10.10.1'),
router_interface_id=self.port2_rif,
type=SAI_NEXT_HOP_TYPE_IP)
self.neighbor_entry6 = sai_thrift_neighbor_entry_t(
rif_id=self.port2_rif, ip_address=sai_ipaddress('10.10.10.1'))
sai_thrift_create_neighbor_entry(self.client,
self.neighbor_entry6,
dst_mac_address=dmac0)
self.route_entry1_ipv6 = sai_thrift_route_entry_t(
vr_id=self.default_vrf,
destination=sai_ipprefix(
'1234:5678:9abc:def0:4422:1133:5577:1111/128'))
sai_thrift_create_route_entry(self.client,
self.route_entry1_ipv6,
next_hop_id=self.nhop0)
def tearDown(self):
sai_thrift_remove_route_entry(self.client, self.route_entry1)
sai_thrift_remove_route_entry(self.client, self.route_entry1_ipv6)
sai_thrift_remove_next_hop(self.client, self.nhop0)
sai_thrift_remove_next_hop(self.client, self.nhop1)
sai_thrift_remove_neighbor_entry(self.client, self.neighbor_entry0)
sai_thrift_remove_neighbor_entry(self.client, self.neighbor_entry1)
sai_thrift_remove_neighbor_entry(self.client, self.neighbor_entry2)
sai_thrift_remove_neighbor_entry(self.client, self.neighbor_entry3)
sai_thrift_remove_neighbor_entry(self.client, self.neighbor_entry6)
sai_thrift_remove_router_interface(self.client, self.port0_rif)
sai_thrift_remove_router_interface(self.client, self.port1_rif)
sai_thrift_remove_router_interface(self.client, self.port2_rif)
sai_thrift_remove_router_interface(self.client, self.port3_rif)
super(L3QosMapBaseClass, self).tearDown()
def getPortQueueIndexStats(self, port, index, qstats):
''' Returns the port queue index stats.
Args:
port (list): list of port object ids
index (uint): port queue index
qstats (list): list of requested port queue statistics
Returns:
uint: port queue counters statistics
'''
total_cnt = 0
sai_list = sai_thrift_u32_list_t(count=100, uint32list=[])
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_queue_list=sai_list)
queue_list = attr['qos_queue_list'].idlist
queue = queue_list[index]
attr = sai_thrift_get_queue_attribute(self.client, queue, index=True)
self.assertTrue(attr['index'] == index, "Failed to get the queue")
for q_stat in qstats:
stats = query_counter(
self, sai_thrift_get_queue_stats, queue)
total_cnt += stats[q_stat]
return total_cnt
def getQueueStats(self, queues, qstats):
''' Returns the queue stats.
Args:
queues (list): list of queue object ids
qstats (list): list of requested queue statistics
Returns:
uint: queue counters statistics
'''
total_cnt = 0
for queue_oid in queues:
stats = query_counter(
self, sai_thrift_get_queue_stats, queue_oid)
for q_stat in qstats:
total_cnt += stats[q_stat]
return total_cnt
def comparePortPPGStats(self, stats1, stats2):
''' Compares the tro ppg stats.
Args:
stats1 (list): stats 1 to be compared
stats2 (list): stats 2 to be compared with stats 1
Returns:
bool: True if stats are equal.
'''
for port in range(0, len(self.test_dev_ports)):
for ppg in range(8):
if stats1[port][ppg] != stats2[port][ppg]:
print("comparePortPPGStats")
print("expected:", stats1)
print("received:", stats2)
print("PORT%d ppg=%d" % (port, ppg), "stats1[port][ppg]=",
stats1[port][ppg], "stats2[port][ppg])=",
stats2[port][ppg])
print("Not Equal")
return False
return True
def getPortPPGStats(self, ports):
''' Returns the prority groups ingress stats
for given ports.
Args:
ports (list): list of dev port ids
Returns:
uint: ports priority group statistics
'''
stats = [0] * 4
for port in range(0, len(ports)):
stats[port] = [0] * 8
for ppg in range(8):
ppg_oid = self.ppg_list[port][ppg]
cnt = self.getPpGroupStats(
[ppg_oid], ['SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS'])
stats[port][ppg] = cnt
return stats
def getPpGroupStats(self, ppg_oids, ppg_stats):
''' Returns the prority groups stats
for priority group object ids.
Args:
ppg_oids (list): list of priority group object ids
ppg_stats (list): requested list of stats to be returned
Returns:
uint: ports priority group statistics
'''
total_cnt = 0
for ppg_oid in ppg_oids:
stats = query_counter(
self, sai_thrift_get_ingress_priority_group_stats, ppg_oid)
for ppg_stat in ppg_stats:
total_cnt += stats[ppg_stat]
return total_cnt
def setPortMultipleQosMapIds(self,
port,
qos_map_dict):
''' Sets the multiple qos map ids attributes
for a given port.
Args:
port (obj_id): port object id
qos_map_dict (dict): qos map object ids dictionary
'''
params = [
'qos_pfc_priority_to_priority_group_map', 'qos_dot1p_to_tc_map',
'qos_tc_to_priority_group_map', 'qos_dscp_to_tc_map',
'qos_pfc_priority_to_queue_map'
]
for key in qos_map_dict:
for p in params:
setattr(self, 't_%s' % p, None)
temp_name = 't_' + key
if key == 'qos_pfc_priority_to_priority_group_map':
setattr(self, temp_name, qos_map_dict[key])
if key == 'qos_dot1p_to_tc_map':
setattr(self, temp_name, qos_map_dict[key])
if key == 'qos_tc_to_priority_group_map':
setattr(self, temp_name, qos_map_dict[key])
if key == 'qos_dscp_to_tc_map':
setattr(self, temp_name, qos_map_dict[key])
if key == 'qos_pfc_priority_to_queue_map':
setattr(self, temp_name, qos_map_dict[key])
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=getattr(
self, 't_qos_tc_to_priority_group_map'),
qos_pfc_priority_to_priority_group_map=getattr(
self, 't_qos_pfc_priority_to_priority_group_map'),
qos_pfc_priority_to_queue_map=getattr(
self, 't_qos_pfc_priority_to_queue_map'),
qos_dot1p_to_tc_map=getattr(self, 't_qos_dot1p_to_tc_map'),
qos_dscp_to_tc_map=getattr(self, 't_qos_dscp_to_tc_map'))
@group("draft")
class L3QosDscpToTcTest(L3QosMapBaseClass):
""" L3 Test qos map Dscp to Tc Test attributes """
def setUp(self):
super(L3QosDscpToTcTest, self).setUp()
def runTest(self):
self.l3IPv4QosMapDscpToTcDefaultMappingTest()
self.l3IPv6QosMapDscpToTcDefaultMappingTest()
self.l3IPv4QosMapMultipleDscpToSingleTcMappingTest()
self.l3IPv6QosMapMultipleDscpToSingleTcMappingTest()
self.l3IPv4QosMapOneDscpToOneTcMappingTest()
self.l3IPv6QosMapOneDscpToOneTcMappingTest()
self.l3IPv4QosSameDscpToTcMappingManyPortsTest()
self.l3IPv6QosSameDscpToTcMappingManyPortsTest()
self.l3IPv4QosVariousDscpToTcMappingManyPortsTest()
self.l3IPv6QosVariousDscpToTcMappingManyPortsTest()
def tearDown(self):
super(L3QosDscpToTcTest, self).tearDown()
def l3IPv4QosVariousDscpToTcMappingManyPortsTest(self):
'''
L3 IPv4 DSCP to TC mapping for various ingress ports test.
'''
print("l3IPv4QosVariousDscpToTcMappingManyPortsTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 1,
'queue': 1
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 0,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 1,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 2,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 3,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 4,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 5,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 6,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 7,
'tc': 3,
'queue': 3
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 10,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 0,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 1,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 2,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 3,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 4,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 5,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 6,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 7,
'tc': 5,
'queue': 5
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default tc
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 10,
'tc': 0,
'queue': 0
})
egress_ports = [self.port1]
try:
# setup dscp to tc mapping
# Port 0 qos map
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 0, 0, 0, 1, 1, 1, 1]
p0_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
# Verify QosMap value list
self.assertTrue(p0_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# Port 2 qos map
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [2, 2, 2, 2, 3, 3, 3, 3]
p2_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(p2_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# Port 3 qos map
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [4, 4, 4, 4, 5, 5, 5, 5]
p3_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(p3_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup Port 1 tc to queue index mapping
p1_ingress_tc_list = [0, 1, 2, 3, 4, 5]
p1_ingress_queue_list = [0, 1, 2, 3, 4, 5]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, p1_ingress_tc_list,
p1_ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# SET Port 0 dscp to TC mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_dscp_to_tc_map=p0_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p0_qos_dscp_to_tc_map_id)
# SET Port 2 dscp to TC mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port2,
qos_dscp_to_tc_map=p2_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port2,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p2_qos_dscp_to_tc_map_id)
# SET Port 3 dscp to TC mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port3,
qos_dscp_to_tc_map=p3_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port3,
qos_dscp_to_tc_map=True,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p3_qos_dscp_to_tc_map_id)
for port in egress_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ip_tos = test['dscp'] << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=63)
initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (ip_tos=%d) ->"
" port %d (tc=%d => queue=%d)"
% (test['tx_port'], ip_tos, self.dev_port1, test['tc'],
test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port1)
post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in self.test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, p0_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p2_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p3_qos_dscp_to_tc_map_id)
def l3IPv4QosSameDscpToTcMappingManyPortsTest(self):
'''
L3 IPv4 same DSCP to TC mapping for various ingress ports test.
'''
print("l3IPv4QosSameDscpToTcMappingManyPortsTest")
# default DSCP to TC mapping
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 0,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 1,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 2,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 3,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 4,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 5,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 6,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 7,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port2,
'dscp': 10,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 0,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 1,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 2,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 3,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 4,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 5,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 6,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 7,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 8,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 9,
'tc': 0,
'queue': 0
})
# fall info default mapping
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 10,
'tc': 0,
'queue': 0
})
ingress_ports = [self.port0, self.port2, self.port3]
egress_ports = [self.port1]
try:
# setup dscp to tc mapping
# Port 0, 2 and 3 qos map
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [7, 6, 5, 4, 3, 2, 1, 0]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup Port 1 tc to queue index mapping
p1_ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
p1_ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, p1_ingress_tc_list,
p1_ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
for port in ingress_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
for port in egress_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ip_tos = test['dscp'] << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=63)
initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (ip_tos=%d) ->"
" port %d (tc=%d => queue=%d)"
% (test['tx_port'], ip_tos, self.dev_port1, test['tc'],
test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port1)
post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in self.test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv4QosMapOneDscpToOneTcMappingTest(self):
'''
L3 IPv4 one DSCP to one TC mapping for ingress ports test.
'''
print("l3IPv4QosMapOneDscpToOneTcMappingTest")
# default DSCP to TC mapping
test_cases = []
test_cases.append({'dscp': 0, 'tc': 0, 'queue': 0})
test_cases.append({'dscp': 1, 'tc': 1, 'queue': 1})
test_cases.append({'dscp': 2, 'tc': 2, 'queue': 2})
test_cases.append({'dscp': 3, 'tc': 3, 'queue': 3})
test_cases.append({'dscp': 4, 'tc': 4, 'queue': 4})
test_cases.append({'dscp': 5, 'tc': 5, 'queue': 5})
test_cases.append({'dscp': 6, 'tc': 6, 'queue': 6})
test_cases.append({'dscp': 7, 'tc': 7, 'queue': 7})
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# set/get
test_ports = [self.port0, self.port1]
for port in [self.port0]:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
for port in [self.port1]:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ip_tos = test['dscp'] << 2
pkt = simple_tcp_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(
eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=63)
initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (ip_tos=%d) ->"
" port %d (tc=%d, queue=%d)"
% (self.dev_port0, ip_tos, self.dev_port1, test['tc'],
test['queue']))
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv4QosMapMultipleDscpToSingleTcMappingTest(self):
'''
L3 IPv4 multiple DSCP to single TC mapping for ingress port test.
'''
print("l3IPv4QosMapMultipleDscpToSingleTcMappingTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 1,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 1,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 1,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 1,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 8,
'tc': 6,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 9,
'tc': 6,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 6,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 11,
'tc': 6,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 12,
'tc': 6,
'queue': 0
})
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [1, 1, 1, 1, 6, 6, 6, 6]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_tc_list = [1, 6]
ingress_queue_list = [2, 5]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# set/get
ingress_ports = [self.port0, self.port2, self.port3]
egress_ports = [self.port1]
for port in ingress_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
for port in egress_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ip_tos = test['dscp'] << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=63)
initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (ip_tos=%d) ->"
" port %d (tc=%d => queue=%d)"
% (test['tx_port'], ip_tos, self.dev_port1, test['tc'],
test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port1)
post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in self.test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv6QosMapMultipleDscpToSingleTcMappingTest(self):
'''
L3 IPv6 multiple DSCP to single TC mapping for ingress port test.
'''
print("l3IPv6QosMapMultipleDscpToSingleTcMappingTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 6,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 8,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 9,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 11,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 12,
'tc': 0,
'queue': 0
})
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [6, 6, 6, 6, 6, 6, 6, 6]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_tc_list = [6]
ingress_queue_list = [5]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# set/get
test_ports = [self.port0, self.port2]
for port in test_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ipv6_tc = test['dscp'] << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=ipv6_tc,
pktlen=100)
initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (dscp=%d) ->"
" port %d (tc=%d queue=%d)"
% (test['tx_port'], test['dscp'], self.dev_port2,
test['tc'], test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port2)
post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv6QosMapOneDscpToOneTcMappingTest(self):
'''
L3 IPv6 one DSCP to single TC mapping for ingress port test.
'''
print("l3IPv6QosMapOneDscpToOneTcMappingTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 8,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 9,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 11,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 12,
'tc': 0,
'queue': 0
}) # default
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7, 9]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7, 1]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7, 1]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7, 1]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# set/get
test_ports = [self.port0, self.port2]
for port in test_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ipv6_tc = test['dscp'] << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=ipv6_tc,
pktlen=100)
initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (dscp=%d) ->"
" port %d (tc=%d queue=%d)"
% (test['tx_port'], test['dscp'], self.dev_port2,
test['tc'], test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port2)
post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv6QosSameDscpToTcMappingManyPortsTest(self):
'''
L3 IPv6 same DSCP to TC mapping for various ingress port test.
'''
print("l3IPv6QosSameDscpToTcMappingManyPortsTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 0,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 1,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 2,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 3,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 4,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 5,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 6,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 7,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 0,
'tc': 0,
'queue': 0
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 1,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 2,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 3,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 4,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 5,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 6,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 7,
'tc': 7,
'queue': 7
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
ingress_test_ports = [self.port0, self.port1, self.port3]
egress_test_ports = [self.port2]
for port in ingress_test_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
qos_dscp_to_tc_map_id)
for port in egress_test_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ipv6_tc = test['dscp'] << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=ipv6_tc,
pktlen=100)
initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (dscp=%d) ->"
" port %d (tc=%d queue=%d)"
% (test['tx_port'], test['dscp'], self.dev_port2,
test['tc'], test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port2)
post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in self.test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def l3IPv6QosVariousDscpToTcMappingManyPortsTest(self):
'''
L3 IPv6 various DSCP to TC mapping for various ingress port test.
'''
print("l3IPv6QosVariousDscpToTcMappingManyPortsTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 0,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 1,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 2,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 3,
'tc': 1,
'queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 4,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 5,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 6,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 7,
'tc': 2,
'queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 0,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 1,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 2,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 3,
'tc': 3,
'queue': 3
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 4,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 5,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 6,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 7,
'tc': 4,
'queue': 4
})
test_cases.append({
'tx_port': self.dev_port1,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 0,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 1,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 2,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 3,
'tc': 5,
'queue': 5
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 4,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 5,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 6,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 7,
'tc': 6,
'queue': 6
})
test_cases.append({
'tx_port': self.dev_port3,
'dscp': 10,
'tc': 0,
'queue': 0
}) # default
try:
# setup dscp to tc mapping
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [1, 1, 1, 1, 2, 2, 2, 2]
p0_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(p0_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [3, 3, 3, 3, 4, 4, 4, 4]
p1_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(p1_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
ingress_dscp_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [5, 5, 5, 5, 6, 6, 6, 6]
p3_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(p3_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# set/get
egress_test_ports = [self.port2]
# setup port 0
status = sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_dscp_to_tc_map=p0_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p0_qos_dscp_to_tc_map_id)
# setup port 1
status = sai_thrift_set_port_attribute(
self.client,
self.port1,
qos_dscp_to_tc_map=p1_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port1,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p1_qos_dscp_to_tc_map_id)
# setup port 3
status = sai_thrift_set_port_attribute(
self.client,
self.port3,
qos_dscp_to_tc_map=p3_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port3,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
p3_qos_dscp_to_tc_map_id)
for port in egress_test_ports:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'],
qos_tc_to_queue_map_id)
for test in test_cases:
ipv6_tc = test['dscp'] << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=ipv6_tc,
pktlen=100)
initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (dscp=%d) ->"
" port %d (tc=%d, queue=%d)"
% (test['tx_port'], test['dscp'], self.dev_port2,
test['tc'], test['queue']))
send_packet(self, test['tx_port'], pkt)
verify_packet(self, exp_pkt, self.dev_port2)
post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
for port in self.test_ports:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=int(
SAI_NULL_OBJECT_ID))
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, p0_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p1_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p3_qos_dscp_to_tc_map_id)
def l3IPv6QosMapDscpToTcDefaultMappingTest(self):
'''
L3 IPv6 DSCP to TC default mapping ingress port test.
'''
print("l3IPv6QosMapDscpToTcDefaultMappingTest")
# default DSCP to TC mapping
test_cases = []
test_cases.append({'dscp': 0, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 1, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 2, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 3, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 4, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 5, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 6, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 7, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 10, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 12, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 0, 'port_default_tc': 1, 'queue': 1})
test_cases.append({'dscp': 1, 'port_default_tc': 2, 'queue': 2})
test_cases.append({'dscp': 2, 'port_default_tc': 3, 'queue': 3})
test_cases.append({'dscp': 3, 'port_default_tc': 4, 'queue': 4})
test_cases.append({'dscp': 4, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 5, 'port_default_tc': 6, 'queue': 6})
test_cases.append({'dscp': 6, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 7, 'port_default_tc': 1, 'queue': 1})
test_cases.append({'dscp': 10, 'port_default_tc': 1, 'queue': 1})
test_cases.append({'dscp': 12, 'port_default_tc': 1, 'queue': 1})
# setup tc -> queue mapping to make sure we always faii into default tc
# = 0
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
status = sai_thrift_set_port_attribute(
self.client,
self.port2,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port2,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], qos_tc_to_queue_map_id)
for port in [self.port0, self.port1, self.port2, self.port3]:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
try:
for test in test_cases:
ipv6_tc = test['dscp'] << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=ipv6_tc,
pktlen=100)
# setup port default_tc
sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_default_tc=test['port_default_tc'])
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'],
test['port_default_tc'])
initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (dscp=%d) ->"
" port %d (port_default_tc=%d queue=%d)"
% (self.dev_port0, test['dscp'], self.dev_port1,
test['port_default_tc'], test['queue']))
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
finally:
sai_thrift_set_port_attribute(self.client,
self.port0,
qos_default_tc=0)
sai_thrift_set_port_attribute(
self.client,
self.port2,
qos_tc_to_queue_map=int(SAI_NULL_OBJECT_ID))
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
def l3IPv4QosMapDscpToTcDefaultMappingTest(self):
'''
L3 IPv4 DSCP to TC default mapping for ingress port test.
'''
print("l3IPv4QosMapDscpToTcDefaultMappingTest")
# default DSCP to TC mapping
test_cases = []
test_cases.append({'dscp': 0, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 1, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 2, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 3, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 4, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 5, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 6, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 7, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 8, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 32, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 16, 'port_default_tc': 0, 'queue': 0})
test_cases.append({'dscp': 0, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 1, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 2, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 3, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 4, 'port_default_tc': 5, 'queue': 5})
test_cases.append({'dscp': 5, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 6, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 7, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 8, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 32, 'port_default_tc': 7, 'queue': 7})
test_cases.append({'dscp': 16, 'port_default_tc': 7, 'queue': 7})
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
status = sai_thrift_set_port_attribute(
self.client,
self.port1,
qos_tc_to_queue_map=qos_tc_to_queue_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port1,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], qos_tc_to_queue_map_id)
for port in [self.port0, self.port1, self.port2, self.port3]:
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
try:
for test in test_cases:
ip_tos = test['dscp'] << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ip_tos,
ip_id=105,
ip_ttl=63)
# setup port default_tc
sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_default_tc=test['port_default_tc'])
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'],
test['port_default_tc'])
initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (tos=%d) ->"
" port %d (port_default_tc=%d queue=%d)"
% (self.dev_port0, ip_tos, self.dev_port1,
test['port_default_tc'], test['queue']))
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
initial_q_cnt + 1, post_q_cnt,
'queue {} packets counter {} != {}'.format(
test['queue'], initial_q_cnt + 1, post_q_cnt))
print("\tok")
finally:
sai_thrift_set_port_attribute(self.client,
self.port0,
qos_default_tc=0)
sai_thrift_set_port_attribute(
self.client,
self.port1,
qos_tc_to_queue_map=int(SAI_NULL_OBJECT_ID))
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
@group("draft")
class QosDscpToColorTest(L3QosMapBaseClass):
''' Qos DSCP to Color test class.
'''
def setUp(self):
super(QosDscpToColorTest, self).setUp()
# setup dscp to tc mapping
# map all 64 ingress dscps to tc=5 (can be any number)
ingress_dscp_list = []
ingress_tc_list = []
ingress_color_list = []
p1_ingress_color_list = []
p2_ingress_color_list = []
p3_ingress_color_list = []
for dscp in range(0, 64):
ingress_dscp_list.append(dscp)
ingress_tc_list.append(5)
color = int(dscp / 22)
p1_color = (color + 1) % 3
p2_color = (color + 2) % 3
p3_color = (color + 3) % 3
ingress_color_list.append(color)
p1_ingress_color_list.append(p1_color)
p2_ingress_color_list.append(p2_color)
p3_ingress_color_list.append(p3_color)
self.qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
ingress_tc_list)
self.assertTrue(self.qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# setup dscp to color mapping
# map all 64 ingress dscps to color = dscp / 22
self.p0_qos_dscp_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_COLOR, ingress_dscp_list,
ingress_color_list)
self.assertTrue(self.p0_qos_dscp_to_color_map_id != 0,
"Failed to create qos_map")
self.p1_qos_dscp_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_COLOR, ingress_dscp_list,
p1_ingress_color_list)
self.assertTrue(self.p1_qos_dscp_to_color_map_id != 0,
"Failed to create qos_map")
self.p2_qos_dscp_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_COLOR, ingress_dscp_list,
p2_ingress_color_list)
self.assertTrue(self.p2_qos_dscp_to_color_map_id != 0,
"Failed to create qos_map")
self.p3_qos_dscp_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_COLOR, ingress_dscp_list,
p3_ingress_color_list)
self.assertTrue(self.p3_qos_dscp_to_color_map_id != 0,
"Failed to create qos_map")
# on egress lets map all tc with color red and yellow to 0
# and all tc with color green to 63.
egress_tc_color_list = [
[0, 0],
[1, 0],
[2, 0],
[3, 0],
[4, 0],
[5, 0],
[6, 0],
[7, 0],
[0, 1],
[1, 1],
[2, 1],
[3, 1],
[4, 1],
[5, 1],
[6, 1],
[7, 1],
[0, 2],
[1, 2],
[2, 2],
[3, 2],
[4, 2],
[5, 2],
[6, 2],
[7, 2],
]
egress_dscp_list = [
63, 63, 63, 63, 63, 63, 63, 63,
15, 15, 15, 15, 15, 15, 15, 15,
11, 11, 11, 11, 11, 11, 11, 11,
]
self.qos_tc_color_to_dscp_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP,
egress_tc_color_list, egress_dscp_list)
self.assertTrue(self.qos_tc_color_to_dscp_map_id != 0,
"Failed to create qos_map")
# ingress settings
# set Port 0 DSCP -> TC mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_dscp_to_tc_map=self.qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
self.qos_dscp_to_tc_map_id)
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port in [self.port1, self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, self.port1, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
def runTest(self):
self.l3IPv4QosMapDscpToColorDefaultMappingTest()
self.l3IPv6QosMapDscpToColorDefaultMappingTest()
self.l3IPv4QosMapManyDscpToSameColorTest()
self.l3IPv6QosMapManyDscpToSameColorTest()
self.l3IPv4QosMapSameDscpToColorManyIngressPortsTest()
self.l3IPv6QosMapSameDscpToColorManyIngressPortsTest()
self.l3IPv4QosMapVariousDscpToColorManyIngressPortsTest()
self.l3IPv6QosMapVariousDscpToColorManyIngressPortsTest()
def tearDown(self):
for port in [self.port0, self.port1, self.port2]:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_tc_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dscp_map=0)
sai_thrift_remove_qos_map(self.client, self.qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client,
self.qos_tc_color_to_dscp_map_id)
sai_thrift_remove_qos_map(self.client,
self.p0_qos_dscp_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p1_qos_dscp_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p2_qos_dscp_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p3_qos_dscp_to_color_map_id)
super(QosDscpToColorTest, self).tearDown()
def l3IPv4QosMapDscpToColorDefaultMappingTest(self):
'''
L3 IPv4 DSCP to COLOR default mapping for ingress port test.
'''
print("l3IPv4QosMapDscpToColorDefaultMappingTest")
for ingress_dscp in range(0, 64):
ingress_ip_tos = ingress_dscp << 2
# only color green maps to dscp 63
egress_ip_tos = 63 << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
def l3IPv6QosMapDscpToColorDefaultMappingTest(self):
'''
L3 IPv6 DSCP to COLOR default mapping for ingress port test.
'''
print("l3IPv6QosMapDscpToColorDefaultMappingTest")
for ingress_dscp in range(0, 64):
egress_dscp = 63
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
def l3IPv4QosMapManyDscpToSameColorTest(self):
'''
L3 IPv4 many DSCP to same COLOR mapping for ingress port test.
'''
print("l3IPv4QosMapManyDscpToSameColorTest")
# ingress settings
# set Port 0 DSCP -> COLOR mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_dscp_to_color_map=self.p0_qos_dscp_to_color_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'],
self.p0_qos_dscp_to_color_map_id)
for ingress_dscp in range(0, 64):
ingress_ip_tos = ingress_dscp << 2
if ingress_dscp < 22:
egress_dscp = 63
elif ingress_dscp < 44:
egress_dscp = 15
else:
egress_dscp = 11
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
def l3IPv6QosMapManyDscpToSameColorTest(self):
'''
L3 IPv6 many DSCP to same COLOR mapping for ingress port test.
'''
print("l3IPv6QosMapManyDscpToSameColorTest")
# ingress settings
# set Port 0 DSCP -> COLOR mapping
status = sai_thrift_set_port_attribute(
self.client,
self.port0,
qos_dscp_to_color_map=self.p0_qos_dscp_to_color_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
self.port0,
qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'],
self.p0_qos_dscp_to_color_map_id)
for ingress_dscp in range(0, 64):
if ingress_dscp < 22:
egress_dscp = 63
elif ingress_dscp < 44:
egress_dscp = 15
else:
egress_dscp = 11
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
def l3IPv4QosMapSameDscpToColorManyIngressPortsTest(self):
'''
L3 IPv4 many DSCP to COLOR mapping for various ingress port test.
'''
print("l3IPv4QosMapSameDscpToColorManyIngressPortsTest")
# ingress settings
# set Port 0, 2, 3 DSCP -> COLOR mapping
for port in [self.port0, self.port2, self.port3]:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_color_map=self.p0_qos_dscp_to_color_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'],
self.p0_qos_dscp_to_color_map_id)
for port in [self.dev_port0, self.dev_port2, self.dev_port3]:
for ingress_dscp in range(0, 64):
ingress_ip_tos = ingress_dscp << 2
if ingress_dscp < 22:
egress_dscp = 63
elif ingress_dscp < 44:
egress_dscp = 15
else:
egress_dscp = 11
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
def l3IPv6QosMapSameDscpToColorManyIngressPortsTest(self):
'''
L3 IPv6 same DSCP to COLOR mapping for various ingress port test.
'''
print("l3IPv6QosMapSameDscpToColorManyIngressPortsTest")
# ingress settings
for port in [self.port0, self.port1, self.port3]:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_color_map=self.p0_qos_dscp_to_color_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'],
self.p0_qos_dscp_to_color_map_id)
for port in [self.dev_port0, self.dev_port1, self.dev_port3]:
for ingress_dscp in range(0, 64):
if ingress_dscp < 22:
egress_dscp = 63
elif ingress_dscp < 44:
egress_dscp = 15
else:
egress_dscp = 11
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
def l3IPv4QosMapVariousDscpToColorManyIngressPortsTest(self):
'''
L3 IPv4 various DSCP to COLOR mapping for various ingress port test.
'''
print("l3IPv4QosMapVariousDscpToColorManyIngressPortsTest")
try:
# ingress settings
# set Port 0, 2, 3 DSCP -> COLOR mapping
for port, dscp_color in [
[self.port0, self.p0_qos_dscp_to_color_map_id],
[self.port2, self.p2_qos_dscp_to_color_map_id],
[self.port3, self.p3_qos_dscp_to_color_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_color_map=dscp_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'], dscp_color)
egress_port = self.dev_port1
test_dev_port_list = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for p_idx, port in enumerate(test_dev_port_list):
if port == egress_port:
continue
for ingress_dscp in range(0, 64):
if ingress_dscp < 22:
egress_dscp_list = [63, 15, 11, 63]
elif ingress_dscp < 44:
egress_dscp_list = [15, 11, 63, 15]
else:
egress_dscp_list = [11, 63, 15, 11]
egress_dscp = egress_dscp_list[p_idx]
ingress_ip_tos = ingress_dscp << 2
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, egress_port)
finally:
for port in [self.port0, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_color_map=0)
def l3IPv6QosMapVariousDscpToColorManyIngressPortsTest(self):
'''
L3 IPv6 various DSCP to COLOR mapping for various ingress port test.
'''
print("l3IPv6QosMapVariousDscpToColorManyIngressPortsTest")
try:
# ingress settings
# set Port 0,1,3 DSCP -> COLOR mapping
for port, dscp_color in [
[self.port0, self.p0_qos_dscp_to_color_map_id],
[self.port1, self.p1_qos_dscp_to_color_map_id],
[self.port3, self.p3_qos_dscp_to_color_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_color_map=dscp_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dscp_to_color_map=True)
self.assertEqual(attr['qos_dscp_to_color_map'], dscp_color)
egress_port = self.dev_port2
test_dev_port_list = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for p_idx, port in enumerate(test_dev_port_list):
if port == egress_port:
continue
for ingress_dscp in range(0, 64):
if ingress_dscp < 22:
egress_dscp_list = [63, 15, 11, 63]
elif ingress_dscp < 44:
egress_dscp_list = [15, 11, 63, 15]
else:
egress_dscp_list = [11, 63, 15, 11]
ingress_ipv6_tc = ingress_dscp << 2
egress_dscp = egress_dscp_list[p_idx]
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, egress_port)
finally:
for port in [self.port0, self.port1, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_color_map=0)
@group("draft")
class QosTcToPriorityGroupTestPFC(L3QosMapBaseClass):
''' QOS map TC to priority group test class
'''
def setUp(self):
super(QosTcToPriorityGroupTestPFC, self).setUp()
# setup dscp -> tc
# testing QosTcToPriorityGroupTest
# SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP
# SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP
# setup tc -> tos
# setup tos -> pgp
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_pfc_to_queue_map_id = []
ingress_key_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.qos_dscp_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_key_list,
ingress_tc_list)
self.assertTrue(self.qos_dscp_tc_map_id != 0,
"Failed to create qos_map")
self.dot1_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_key_list,
ingress_tc_list)
self.assertTrue(self.dot1_to_tc_map_id != 0,
"Failed to create qos_map")
self.ppg_list = []
self.ppg_list = [0] * 8
p = 0
for port in [self.port0, self.port1, self.port2, self.port3]:
self.ppg_list[p] = []
for ppg_index in range(8):
ppg = sai_thrift_create_ingress_priority_group(
self.client, port, ppg_index)
self.assertNotEqual(ppg, 0, "Failed to create priority group")
self.ppg_list[p].append(ppg)
p += 1
# verify number of ppg groups
attr = sai_thrift_get_port_attribute(
self.client, port, number_of_ingress_priority_groups=True)
nbr_groups = attr['number_of_ingress_priority_groups']
ingress_priority_group_list = sai_thrift_u32_list_t(
count=nbr_groups, uint32list=[])
attr = sai_thrift_get_port_attribute(
self.client,
port,
ingress_priority_group_list=ingress_priority_group_list)
self.assertTrue(
attr['ingress_priority_group_list'].count == nbr_groups,
"Failed to verify ingress priority groups")
self.assertTrue(nbr_groups == 8,
"Failed to verify ingress priority groups")
ingress_pfc_prio_list = [0]
ingress_pg_list = [0]
self.pfc_to_pg_map_id = [0] * 8
test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for port in range(0, len(test_dev_ports)):
self.pfc_to_pg_map_id[port] = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP,
ingress_pfc_prio_list, ingress_pg_list)
self.assertTrue(self.pfc_to_pg_map_id[port] != 0,
"Failed to create qos_map")
self.tc_to_pg_map_id = [0] * 8
ingress_tc_list = [0]
ingress_pg_list = [0]
for port in range(0, len(test_dev_ports)):
self.tc_to_pg_map_id[port] = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
ingress_tc_list, ingress_pg_list)
self.assertTrue(self.tc_to_pg_map_id[port] != 0,
"Failed to create qos_map")
# test default IPv4 frame
self.ipv4_pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_dscp=0,
ip_id=105,
ip_ttl=64)
self.ipv6_pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=0,
pktlen=100)
self.eth_pkt = simple_arp_packet(pktlen=60, vlan_vid=1, vlan_pcp=0)
def runTest(self):
# PFC to Priority Group tests
# Test case 1
self.defaultNoPfcToPpgMappingIP()
self.defaultNoPfcToPpgMappingEth()
# Test case 2
self.multiplePfcToSamePpgMappingIP()
self.multiplePfcToSamePpgMappingEth()
# Test case 3
self.oneToOnePfcToPpgMappingIP()
self.oneToOnePfcToPpgMappingEth()
# Test case 4
self.samePfcToPpgMapOnManyIngressPortsIPv4()
self.samePfcToPpgMapOnManyIngressPortsIPv6()
self.samePfcToPpgMapOnManyIngressPortsEth()
# Test case 5
self.variousPfcToPpgMapOnManyIngressPortsIPv4()
self.variousPfcToPpgMapOnManyIngressPortsIPv6()
self.variousPfcToPpgMapOnManyIngressPortsEth()
# Test case 6
self.noPfcToPpgMappingIPv4()
self.noPfcToPpgMappingIPv6()
self.noPfcToPpgMappingEth()
def tearDown(self):
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
try:
for port in [self.port0, self.port1, self.port2, self.port3]:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
sai_thrift_remove_qos_map(self.client, self.qos_dscp_tc_map_id)
finally:
i = 0
test_dev_ports = [self.dev_port0, self.dev_port1, self.dev_port2,
self.dev_port3]
for port in range(0, len(test_dev_ports)):
sai_thrift_remove_qos_map(self.client,
self.pfc_to_pg_map_id[port])
sai_thrift_remove_qos_map(self.client,
self.tc_to_pg_map_id[port])
for ppg in self.ppg_list[port]:
sai_thrift_remove_ingress_priority_group(
self.client, ppg)
i += 1
super(QosTcToPriorityGroupTestPFC, self).tearDown()
def defaultNoPfcToPpgMappingIP(self):
"""
Function configures the PFC to Priority Group test data
for default No pfc -> ppg mapping test case
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# default test_case
self.test_case_name = "default No pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
# no port qos_map updated
pfc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def defaultNoPfcToPpgMappingEth(self):
"""
Function configures the PFC to Priority Group test data
for default No pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# default test_case
self.test_case_name = "default No pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
# no port qos_map updated
pfc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def multiplePfcToSamePpgMappingIP(self):
"""
Function configures the PFC to Priority Group test data
for multiple pfc -> same ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# multiple pfc -> same ppg
self.test_case_name = "multiple pfc -> same ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [3, 3, 3, 3, 5, 5, 5, 5]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def multiplePfcToSamePpgMappingEth(self):
"""
Function configures the PFC to Priority Group test data
for multiple pfc -> same ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# multiple pfc -> same ppg
self.test_case_name = "multiple pfc -> same ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [3, 3, 3, 3, 5, 5, 5, 5]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def oneToOnePfcToPpgMappingIP(self):
"""
Function configures the PFC to Priority Group test data
for one to one pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# one to one mapping
self.test_case_name = "one to one pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def oneToOnePfcToPpgMappingEth(self):
"""
Function configures the PFC to Priority Group test data
for one to one pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# one to one mapping
self.test_case_name = "one to one pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def samePfcToPpgMapOnManyIngressPortsIPv4(self):
"""
Function configures the PFC to Priority Group test data
for same pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# same pfc -> ppg on different ingress ports
self.test_case_name = "same pfc -> ppg map on many ingress ports"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [6, 4, 1, 0, 7, 5, 2, 3]
pfc_pg_list[1] = pfc_pg_list[0]
pfc_pg_list[2] = pfc_pg_list[0]
pfc_pg_list[3] = pfc_pg_list[0]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_dev_ports = [
self.dev_port0, self.dev_port1, self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def samePfcToPpgMapOnManyIngressPortsIPv6(self):
"""
Function configures the PFC to Priority Group test data
for same pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# same pfc -> ppg on different ingress ports
self.test_case_name = "same pfc -> ppg map on many ingress ports"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [6, 4, 1, 0, 7, 5, 2, 3]
pfc_pg_list[1] = pfc_pg_list[0]
pfc_pg_list[2] = pfc_pg_list[0]
pfc_pg_list[3] = pfc_pg_list[0]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_dev_ports = [
self.dev_port0, self.dev_port1, self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def samePfcToPpgMapOnManyIngressPortsEth(self):
"""
Function configures the PFC to Priority Group test data
for same pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# same pfc -> ppg on different ingress ports
self.test_case_name = "same pfc -> ppg map on many ingress ports"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [6, 4, 1, 0, 7, 5, 2, 3]
pfc_pg_list[1] = pfc_pg_list[0]
pfc_pg_list[2] = pfc_pg_list[0]
pfc_pg_list[3] = pfc_pg_list[0]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_dev_ports = [
self.dev_port0, self.dev_port1, self.dev_port2, self.dev_port3
]
for ingress_port in range(0, len(self.test_dev_ports)):
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def variousPfcToPpgMapOnManyIngressPortsIPv4(self):
"""
Function configures the PFC to Priority Group test data
for various pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# different pfc -> ppg on different ingress ports
self.test_case_name = ("various pfc -> ppg map on many ingress " +
"ports")
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 1, 1, 1, 1]
pfc_pg_list[1] = [2, 2, 2, 2, 3, 3, 3, 3]
pfc_pg_list[2] = [4, 4, 4, 4, 5, 5, 5, 5]
pfc_pg_list[3] = [6, 6, 6, 6, 7, 7, 7, 7]
# this mapping works on model
pfc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[1] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[2] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[3] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[ingress_port], tc_pg_list)
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[ingress_port]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
ingress_port]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def variousPfcToPpgMapOnManyIngressPortsIPv6(self):
"""
Function configures the PFC to Priority Group test data
for various pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# different pfc -> ppg on different ingress ports
self.test_case_name = ("various pfc -> ppg map on many ingress " +
"ports")
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 1, 1, 1, 1]
pfc_pg_list[1] = [2, 2, 2, 2, 3, 3, 3, 3]
pfc_pg_list[2] = [4, 4, 4, 4, 5, 5, 5, 5]
pfc_pg_list[3] = [6, 6, 6, 6, 7, 7, 7, 7]
# this mapping works on model
pfc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[1] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[2] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[3] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[ingress_port], tc_pg_list)
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[ingress_port]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
ingress_port]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def variousPfcToPpgMapOnManyIngressPortsEth(self):
"""
Function configures the PFC to Priority Group test data
for various pfc -> ppg map on many ingress ports
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# different pfc -> ppg on different ingress ports
self.test_case_name = ("various pfc -> ppg map on many ingress " +
"ports")
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 1, 1, 1, 1]
pfc_pg_list[1] = [2, 2, 2, 2, 3, 3, 3, 3]
pfc_pg_list[2] = [4, 4, 4, 4, 5, 5, 5, 5]
pfc_pg_list[3] = [6, 6, 6, 6, 7, 7, 7, 7]
# this mapping works on model
pfc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[1] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[2] = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[3] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[ingress_port], tc_pg_list)
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[ingress_port]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
ingress_port]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def noPfcToPpgMappingIPv4(self):
"""
Function configures the PFC to Priority Group test data
for no pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# no pfc_ppg mapping defined
self.test_case_name = "no pfc -> ppg mapping "
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0] # no pfc to ppg updated
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
print(key, ppg)
ingress_ip_tos = key << 2
pkts = 1 + port
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def noPfcToPpgMappingIPv6(self):
"""
Function configures the PFC to Priority Group test data
for no pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# no pfc_ppg mapping defined
self.test_case_name = "no pfc -> ppg mapping "
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0] # no pfc to ppg updated
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
print(key, ppg)
ingress_ip_tos = key << 2
pkts = 1 + port
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def noPfcToPpgMappingEth(self):
"""
Function configures the PFC to Priority Group test data
for no pfc -> ppg mapping
"""
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
pfc_pg_list = [0] * 4
# no pfc_ppg mapping defined
self.test_case_name = "no pfc -> ppg mapping "
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0] # no pfc to ppg updated
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list[0], tc_pg_list)
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
# for L2 set the SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
if pfc_pg_list[ingress_port] == 0:
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
print(key, ppg)
pkts = 1 + port
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(8)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
@group("draft")
class QosTcToPriorityGroupTestTC(L3QosMapBaseClass):
''' QOS map TC to priority group test class
'''
def setUp(self):
super(QosTcToPriorityGroupTestTC, self).setUp()
# setup dscp -> tc
# testing QosTcToPriorityGroupTest
# SAI_PORT_ATTR_QOS_DSCP_TO_TC_MAP
# SAI_PORT_ATTR_QOS_PFC_PRIORITY_TO_PRIORITY_GROUP_MAP
# setup tc -> tos
# setup tos -> pgp
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_pfc_to_queue_map_id = []
ingress_key_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.qos_dscp_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_key_list,
ingress_tc_list)
self.assertTrue(self.qos_dscp_tc_map_id != 0,
"Failed to create qos_map")
self.dot1_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_key_list,
ingress_tc_list)
self.assertTrue(self.dot1_to_tc_map_id != 0,
"Failed to create qos_map")
self.ppg_list = []
self.ppg_list = [0] * 8
p = 0
for port in [self.port0, self.port1, self.port2, self.port3]:
self.ppg_list[p] = []
for ppg_index in range(8):
ppg = sai_thrift_create_ingress_priority_group(
self.client, port, ppg_index)
self.assertNotEqual(ppg, 0, "Failed to create priority group")
self.ppg_list[p].append(ppg)
p += 1
# verify number of ppg groups
attr = sai_thrift_get_port_attribute(
self.client, port, number_of_ingress_priority_groups=True)
nbr_groups = attr['number_of_ingress_priority_groups']
ingress_priority_group_list = sai_thrift_u32_list_t(
count=nbr_groups, uint32list=[])
attr = sai_thrift_get_port_attribute(
self.client,
port,
ingress_priority_group_list=ingress_priority_group_list)
self.assertTrue(
attr['ingress_priority_group_list'].count == nbr_groups,
"Failed to verify ingress priority groups")
self.assertTrue(nbr_groups == 8,
"Failed to verify ingress priority groups")
ingress_pfc_prio_list = [0]
ingress_pg_list = [0]
self.pfc_to_pg_map_id = [0] * 8
test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for port in range(0, len(test_dev_ports)):
self.pfc_to_pg_map_id[port] = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP,
ingress_pfc_prio_list, ingress_pg_list)
self.assertTrue(self.pfc_to_pg_map_id[port] != 0,
"Failed to create qos_map")
self.tc_to_pg_map_id = [0] * 8
ingress_tc_list = [0]
ingress_pg_list = [0]
for port in range(0, len(test_dev_ports)):
self.tc_to_pg_map_id[port] = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
ingress_tc_list, ingress_pg_list)
self.assertTrue(self.tc_to_pg_map_id[port] != 0,
"Failed to create qos_map")
# test default IPv4 frame
self.ipv4_pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_dscp=0,
ip_id=105,
ip_ttl=64)
self.exp_ipv4_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_dscp=0,
ip_id=105,
ip_ttl=63)
self.ipv6_pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=0,
pktlen=100)
self.exp_ipv6_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=0,
pktlen=100)
self.eth_pkt = simple_arp_packet(pktlen=60, vlan_vid=1, vlan_pcp=0)
self.exp_eth_pkt = simple_arp_packet(pktlen=60, vlan_vid=1, vlan_pcp=0,
eth_dst='ff:ff:ff:ff:ff:ff',
eth_src='00:06:07:08:09:0a')
def runTest(self):
# TC to Priority Group tests
# Test case 1
self.defaultNoTcToPpgMappingIP()
self.defaultNoTcToPpgMappingEth()
# Test case 2
self.multipleTcToSamePpgMappingIP()
self.multipleTcToSamePpgMappingEth()
# Test case 3
self.oneToOneTcToPpgMappingIP()
self.oneToOneTcToPpgMappingEth()
# Test case 4
self.sameTcToPpgMapOnDifferentIngressPortsIP()
self.sameTcToPpgMapOnDifferentIngressPortsEth()
# Test case 5
self.variousTcToPpgMappingOnDifferentIngressPortsIP()
self.variousTcToPpgMappingOnDifferentIngressPortsEth()
# Test case 6
self.noPfcToPpgMappingIP()
self.noPfcToPpgMappingEth()
def tearDown(self):
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
try:
for port in [self.port0, self.port1, self.port2, self.port3]:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
sai_thrift_remove_qos_map(self.client, self.qos_dscp_tc_map_id)
finally:
i = 0
test_dev_ports = [self.dev_port0, self.dev_port1, self.dev_port2,
self.dev_port3]
for port in range(0, len(test_dev_ports)):
sai_thrift_remove_qos_map(self.client,
self.pfc_to_pg_map_id[port])
sai_thrift_remove_qos_map(self.client,
self.tc_to_pg_map_id[port])
for ppg in self.ppg_list[port]:
sai_thrift_remove_ingress_priority_group(
self.client, ppg)
i += 1
super(QosTcToPriorityGroupTestTC, self).tearDown()
def defaultNoTcToPpgMappingIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for default No tc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
self.test_case_name = "default No tc -> ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def defaultNoTcToPpgMappingEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for default No tc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
self.test_case_name = "default No tc -> ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 0, 0, 0, 0, 0, 0, 0]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def multipleTcToSamePpgMappingIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for multiple tc -> same ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# multiple tc -> same ppg
self.test_case_name = "multiple tc -> same ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [7, 7, 7, 7, 3, 3, 3, 3]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def multipleTcToSamePpgMappingEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for multiple tc -> same ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# multiple tc -> same ppg
self.test_case_name = "multiple tc -> same ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [7, 7, 7, 7, 3, 3, 3, 3]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def oneToOneTcToPpgMappingIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for one to one tc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# one to one mapping
self.test_case_name = "one to one tc -> ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def oneToOneTcToPpgMappingEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for one to one tc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# one to one mapping
self.test_case_name = "one to one tc -> ppg mapping"
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_mapping[0] = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def sameTcToPpgMapOnDifferentIngressPortsIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for same tc -> ppg map on different ingress ports
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# same tc -> ppg on different ingress ports
self.test_case_name = ("same tc -> ppg map on different" +
"ingress ports")
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [7, 7, 0, 4, 2, 1, 6, 3]
tc_pg_list[1] = tc_pg_list[0]
tc_pg_list[2] = tc_pg_list[0]
tc_pg_list[3] = tc_pg_list[0]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def sameTcToPpgMapOnDifferentIngressPortsEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for same tc -> ppg map on different ingress ports
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# same tc -> ppg on different ingress ports
self.test_case_name = ("same tc -> ppg map on different" +
"ingress ports")
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [7, 7, 0, 4, 2, 1, 6, 3]
tc_pg_list[1] = tc_pg_list[0]
tc_pg_list[2] = tc_pg_list[0]
tc_pg_list[3] = tc_pg_list[0]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def variousTcToPpgMappingOnDifferentIngressPortsIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for various tc -> ppg mapping on different ingress ports test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# different tc -> ppg on different ingress ports
self.test_case_name = ("various tc -> ppg mapping on different " +
"ingress ports")
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
# below mapping is not supported on model
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[1] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[2] = [2, 1, 4, 3, 2, 6, 4, 0]
tc_pg_list[3] = [3, 1, 7, 3, 5, 4, 2, 6]
# below mapping works on model
tc_pg_list[0] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[1] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[2] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[3] = [1, 1, 7, 6, 3, 4, 2, 7]
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[ingress_port])
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[ingress_port]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
ingress_port]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def variousTcToPpgMappingOnDifferentIngressPortsEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for various tc -> ppg mapping on different ingress ports test case
Args:
qos_map_type (uint): qos map type test variant
'''
qos_map_type = SAI_QOS_MAP_TYPE_DOT1P_TO_TC
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# different tc -> ppg on different ingress ports
self.test_case_name = ("various tc -> ppg mapping on different " +
"ingress ports")
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
# below mapping is not supported on model
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[1] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[2] = [2, 1, 4, 3, 2, 6, 4, 0]
tc_pg_list[3] = [3, 1, 7, 3, 5, 4, 2, 6]
# below mapping works on model
tc_pg_list[0] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[1] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[2] = [1, 1, 7, 6, 3, 4, 2, 7]
tc_pg_list[3] = [1, 1, 7, 6, 3, 4, 2, 7]
self.test_dev_ports = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for ingress_port in range(0, len(self.test_dev_ports)):
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[ingress_port])
self.test_mapping[ingress_port] = mapping
self.test_pfc_to_pg_map_id[
ingress_port] = self.pfc_to_pg_map_id[ingress_port]
self.test_tc_to_pg_map_id[ingress_port] = self.tc_to_pg_map_id[
ingress_port]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_pfc_priority_to_priority_group_map=self.
test_pfc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
pkts = 1 + port
expected_cnt[port][ppg] += pkts
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
def noPfcToPpgMappingIP(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for no pfc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# no pfc_ppg mapping defined
self.test_case_name = "no pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 0, 0, 0, 0, 0, 0, 0] # no pfc to ppg updated
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_mapping[0] = mapping
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
print(key, ppg)
ingress_ip_tos = key << 2
pkts = 1 + port
self.ipv4_pkt[IP].tos = ingress_ip_tos
send_packet(self, ingress_port, self.ipv4_pkt, pkts)
self.dataplane.flush()
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
send_packet(self, self.dev_port3, self.ipv4_pkt)
verify_packet(self, self.exp_ipv4_pkt, self.dev_port1)
self.dataplane.flush()
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
ingress_ip_tos = key << 2
pkts = 1 + port
self.ipv6_pkt.tc = ingress_ip_tos
send_packet(self, ingress_port, self.ipv6_pkt, pkts)
self.dataplane.flush()
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
send_packet(self, self.dev_port3, self.ipv6_pkt)
verify_packet(self, self.exp_ipv6_pkt, self.dev_port2)
self.dataplane.flush()
def noPfcToPpgMappingEth(
self,
qos_map_type=SAI_PORT_ATTR_QOS_DOT1P_TO_TC_MAP):
''' Function configures the TC to Priority Group test data
for no pfc -> ppg mapping test case
Args:
qos_map_type (uint): qos map type test variant
'''
self.test_dev_ports = [self.dev_port0]
self.test_pfc_to_pg_map_id = [0] * 4
self.test_tc_to_pg_map_id = [0] * 4
self.test_mapping = [0] * 4
tc_pg_list = [0] * 4
# no pfc_ppg mapping defined
self.test_case_name = "no pfc -> ppg mapping"
pfc_list = [0, 1, 2, 3, 4, 5, 6, 7]
pfc_pg_list = [0, 0, 0, 0, 0, 0, 0, 0] # no pfc to ppg updated
tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
tc_pg_list[0] = [0, 1, 2, 3, 4, 5, 6, 7]
mapping = combine_ingress_pfc_tc_to_pg_mapping(
pfc_list, pfc_pg_list, tc_pg_list[0])
self.test_mapping[0] = mapping
self.test_pfc_to_pg_map_id[0] = self.pfc_to_pg_map_id[0]
self.test_tc_to_pg_map_id[0] = self.tc_to_pg_map_id[0]
qos_map_dict = {
"qos_pfc_priority_to_priority_group_map": 0,
"qos_dot1p_to_tc_map": 0,
"qos_tc_to_priority_group_map": 0,
"qos_dscp_to_tc_map": 0}
for port in self.test_ports:
self.setPortMultipleQosMapIds(
port,
qos_map_dict)
for ingress_port in range(0, len(self.test_dev_ports)):
pfc_to_pg_map_id = self.test_pfc_to_pg_map_id[ingress_port]
tc_to_pg_map_id = self.test_tc_to_pg_map_id[ingress_port]
if (pfc_to_pg_map_id == 0) or (tc_to_pg_map_id == 0):
continue
# update QOS MAP PFC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, pfc_to_pg_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP, pfc_list,
pfc_pg_list), True,
"Failed verify updated qos_map attribute")
# update QOS MAP TC TO PRIORITY GROUP
self.assertEqual(
update_and_verify_qos_map(
self.client, tc_to_pg_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
tc_list, tc_pg_list[ingress_port]), True,
"Failed verify updated qos_map attribute")
p = 0
for port in self.test_ports:
if self.test_pfc_to_pg_map_id[p] == 0:
continue
if qos_map_type == SAI_QOS_MAP_TYPE_DOT1P_TO_TC:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dot1p_to_tc_map=self.dot1_to_tc_map_id)
else:
sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.qos_dscp_tc_map_id)
# set the QOS PFC TO PRIORITY GROUP mapping
sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_to_priority_group_map=self.test_tc_to_pg_map_id[p])
p += 1
# get the initial counters
expected_cnt = self.getPortPPGStats(self.test_dev_ports)
for port in range(0, len(self.test_dev_ports)):
ingress_port = self.test_dev_ports[port]
for key, ppg in self.test_mapping[port]:
print(key, ppg)
pkts = 1 + port
self.eth_pkt[Ether][Dot1Q].prio = key
send_packet(self, ingress_port, self.eth_pkt, pkts)
self.dataplane.flush()
print("Verify port/ppg pktcounters")
time.sleep(5)
post_cnt = self.getPortPPGStats(self.test_dev_ports)
self.assertEqual(
self.comparePortPPGStats(expected_cnt, post_cnt), True)
print("\tok")
self.dataplane.flush()
@group("draft")
class QosTcAndColorToDscpTest(L3QosMapBaseClass):
''' QOS TC and COLOR to DSCP test '''
def setUp(self):
super(QosTcAndColorToDscpTest, self).setUp()
# setup dscp to tc and color mapping
ingress_dscp_list = []
p0_ingress_tc_list = []
p1_ingress_tc_list = []
p2_ingress_tc_list = []
p3_ingress_tc_list = []
for dscp in range(0, 64):
ingress_dscp_list.append(dscp)
# ingress_tc_list.append(5)
if dscp < 24:
p0_tc = dscp % 8
p1_tc = (dscp + 1) % 8
p2_tc = (dscp + 2) % 8
p3_tc = (dscp + 3) % 8
else:
p0_tc = int(dscp / 8)
p1_tc = int((dscp + 1) / 8) % 8
p2_tc = int((dscp + 2) / 8) % 8
p3_tc = int((dscp + 3) / 8) % 8
p0_ingress_tc_list.append(p0_tc)
p1_ingress_tc_list.append(p1_tc)
p2_ingress_tc_list.append(p2_tc)
p3_ingress_tc_list.append(p3_tc)
# define ingress DSCP -> TC per port
self.p0_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
p0_ingress_tc_list)
self.assertTrue(self.p0_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
self.p1_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
p1_ingress_tc_list)
self.assertTrue(self.p1_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
self.p2_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
p2_ingress_tc_list)
self.assertTrue(self.p2_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
self.p3_qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_TC, ingress_dscp_list,
p3_ingress_tc_list)
self.assertTrue(self.p3_qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
# ingress settings
# set Port 0 DSCP -> TC mapping
# Ports 1, 2, 3 will be assigned in tests
for port in [self.port0]:
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_dscp_to_tc_map=self.p0_qos_dscp_to_tc_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'],
self.p0_qos_dscp_to_tc_map_id)
# an example egress tc and color -> dscp
# egress dscp = color * tc
# defines mapping for egress dscp from 0 to 23
egress_tc_color_list = [
[0, 0],
[1, 0],
[2, 0],
[3, 0],
[4, 0],
[5, 0],
[6, 0],
[7, 0],
[0, 1],
[1, 1],
[2, 1],
[3, 1],
[4, 1],
[5, 1],
[6, 1],
[7, 1],
[0, 2],
[1, 2],
[2, 2],
[3, 2],
[4, 2],
[5, 2],
[6, 2],
[7, 2],
]
egress_dscp_list = [
0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23
]
self.qos_tc_color_to_dscp_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP,
egress_tc_color_list, egress_dscp_list)
self.assertTrue(self.qos_tc_color_to_dscp_map_id != 0,
"Failed to create qos_map")
def runTest(self):
self.l3IPv4QosMapTcColorToDscpDefaultMappingTest()
self.l3IPv6QosMapTcColorToDscpDefaultMappingTest()
self.l3IPv4QosMapTcColorToDscpMappingTest()
self.l3IPv6QosMapTcColorToDscpMappingTest()
self.l3IPv4QosMapTcColorToDscpManyIngressPortsTest()
self.l3IPv6QosMapTcColorToDscpManyIngressPortsTest()
self.l3IPv4QosMapVariousTcColorToDscpManyIngressPortsTest()
self.l3IPv6QosMapVariousTcColorToDscpManyIngressPortsTest()
def tearDown(self):
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_tc_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dscp_map=0)
sai_thrift_remove_qos_map(self.client,
self.qos_tc_color_to_dscp_map_id)
sai_thrift_remove_qos_map(self.client, self.p0_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, self.p1_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, self.p2_qos_dscp_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, self.p3_qos_dscp_to_tc_map_id)
super(QosTcAndColorToDscpTest, self).tearDown()
def l3IPv4QosMapTcColorToDscpDefaultMappingTest(self):
''' L3 IPv4 no TC + Color -> DSCP mapping defined (Default Case)
Test verifies that switch does not override the
original packet dscp value '''
print("l3IPv4QosMapTcColorToDscpDefaultMappingTest")
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
ingress_ip_tos = ingress_dscp << 2
egress_ip_tos = ingress_ip_tos
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
def l3IPv6QosMapTcColorToDscpDefaultMappingTest(self):
''' L3 IPv6 no TC + Color -> DSCP mapping defined (Default Case)
Test verifies that switch does not override the
original packet dscp value '''
print("l3IPv6QosMapTcColorToDscpDefaultMappingTest")
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
egress_dscp = ingress_dscp
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
def l3IPv4QosMapTcColorToDscpMappingTest(self):
''' L3 IPv4
TC + Color -> DSCP mapping defined
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping'''
print("l3IPv4QosMapTcColorToDscpMappingTest")
try:
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port in [self.port1]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = ingress_dscp % 8
else:
egress_dscp = int(ingress_dscp / 8)
ingress_ip_tos = ingress_dscp << 2
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
finally:
all_ports = [self.port0, self.port1, self.port2, self.port3]
for port in all_ports:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dscp_map=0)
def l3IPv6QosMapTcColorToDscpMappingTest(self):
''' L3 IPv6
TC + Color -> DSCP mapping defined
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping'''
print("l3IPv6QosMapTcColorToDscpMappingTest")
try:
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port in [self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = ingress_dscp % 8
else:
egress_dscp = int(ingress_dscp / 8)
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, self.dev_port0, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
finally:
for port in [self.port1, self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=0)
def l3IPv4QosMapTcColorToDscpManyIngressPortsTest(self):
''' L3 IPv4
TC + Color -> DSCP same mapping defined on various egress ports
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping.
'''
print("l3IPv4QosMapTcColorToDscpManyIngressPortsTest")
try:
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
# INFO setting both ingress TC and COLOR unsupported
for port, dscp_to_tc in [
[self.port0, self.p0_qos_dscp_to_tc_map_id],
[self.port2, self.p0_qos_dscp_to_tc_map_id],
[self.port3, self.p0_qos_dscp_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=dscp_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], dscp_to_tc)
for port in [self.port1]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
for port in [self.dev_port0, self.dev_port2, self.dev_port3]:
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = ingress_dscp % 8
else:
egress_dscp = int(ingress_dscp / 8)
ingress_ip_tos = ingress_dscp << 2
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
finally:
all_ports = [self.port0, self.port1, self.port2, self.port3]
for port in all_ports:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_tc_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dscp_map=0)
def l3IPv6QosMapTcColorToDscpManyIngressPortsTest(self):
''' L3 IPv6
TC + Color -> DSCP same mapping defined on various ingress ports
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping.
'''
print("l3IPv6QosMapTcColorToDscpManyIngressPortsTest")
try:
# set ingress DSCP -> tc
for port, dscp_to_tc in [
[self.port0, self.p0_qos_dscp_to_tc_map_id],
[self.port1, self.p0_qos_dscp_to_tc_map_id],
[self.port3, self.p0_qos_dscp_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=dscp_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], dscp_to_tc)
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port in [self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
for port in [self.dev_port0, self.dev_port1, self.dev_port3]:
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = ingress_dscp % 8
else:
egress_dscp = int(ingress_dscp / 8)
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
finally:
for port in [self.port1, self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=0)
def l3IPv4QosMapVariousTcColorToDscpManyIngressPortsTest(self):
''' L3 IPv4
TC + Color -> DSCP various mapping defined on various ingress ports
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping.
'''
print("l3IPv4QosMapVariousTcColorToDscpManyIngressPortsTest")
try:
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port, dscp_to_tc in [
[self.port0, self.p0_qos_dscp_to_tc_map_id],
[self.port2, self.p2_qos_dscp_to_tc_map_id],
[self.port3, self.p3_qos_dscp_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=dscp_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], dscp_to_tc)
for port in [self.port1]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
test_dev_port_list = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for p_idx, port in enumerate(test_dev_port_list):
if port == self.dev_port1:
continue
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = (ingress_dscp + p_idx) % 8
else:
egress_dscp = int((ingress_dscp + p_idx) / 8) % 8
ingress_ip_tos = ingress_dscp << 2
egress_ip_tos = egress_dscp << 2
pkt = simple_tcp_packet(eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=ingress_ip_tos,
ip_id=105,
ip_ttl=64)
exp_pkt = simple_tcp_packet(eth_dst='00:11:22:33:44:04',
eth_src=ROUTER_MAC,
ip_dst='10.10.10.11',
ip_src='192.168.0.1',
ip_tos=egress_ip_tos,
ip_id=105,
ip_ttl=63)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port1)
finally:
all_ports = [self.port0, self.port1, self.port2, self.port3]
for port in all_ports:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_tc_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dscp_map=0)
def l3IPv6QosMapVariousTcColorToDscpManyIngressPortsTest(self):
''' L3 IPv6
TC + Color -> DSCP various mapping defined on various ingress ports
Test verifies that switch does override the
original packet dscp value accordingly to QOS mapping.
'''
print("l3IPv6QosMapVariousTcColorToDscpManyIngressPortsTest")
try:
# set ingress DSCP -> tc
for port, dscp_to_tc in [
[self.port0, self.p0_qos_dscp_to_tc_map_id],
[self.port1, self.p1_qos_dscp_to_tc_map_id],
[self.port3, self.p3_qos_dscp_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dscp_to_tc_map=dscp_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], dscp_to_tc)
# egress settings
# set the TC AND COLOR -> DSCP mapping
# for port 1 for IPv4 and port2 for IPv6
for port in [self.port2]:
# set Port 1 TC AND COLOR -> DSCP mapping
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dscp_map=self.
qos_tc_color_to_dscp_map_id)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dscp_map'],
self.qos_tc_color_to_dscp_map_id)
test_dev_port_list = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for p_idx, port in enumerate(test_dev_port_list):
if port == self.dev_port2:
continue
for ingress_dscp in range(0, 64, DSCP_TEST_STEP):
if ingress_dscp < 24:
egress_dscp = (ingress_dscp + p_idx) % 8
else:
egress_dscp = int((ingress_dscp + p_idx) / 8) % 8
ingress_ipv6_tc = ingress_dscp << 2
egress_ipv6_tc = egress_dscp << 2
pkt = simple_tcpv6_packet(
eth_dst=ROUTER_MAC,
eth_src='00:22:22:22:22:22',
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=64,
ipv6_tc=ingress_ipv6_tc,
pktlen=100)
exp_pkt = simple_tcpv6_packet(
eth_dst='00:11:22:33:44:06',
eth_src=ROUTER_MAC,
ipv6_dst='1234:5678:9abc:def0:4422:1133:5577:1111',
ipv6_src='2000::1',
ipv6_hlim=63,
ipv6_tc=egress_ipv6_tc,
pktlen=100)
send_packet(self, port, pkt)
verify_packet(self, exp_pkt, self.dev_port2)
finally:
all_ports = [self.port0, self.port1, self.port2, self.port3]
for port in all_ports:
sai_thrift_set_port_attribute(self.client,
port,
qos_dscp_to_tc_map=0)
sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dscp_map=0)
@group("draft")
class L2QosMapPcpToColorTest(L2QosMapBaseClass):
''' L2 PCP -> COLOR QOS mapping test base class '''
def setUp(self):
super(L2QosMapPcpToColorTest, self).setUp()
print("Create dot1p -> tc qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
self.qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_dot1p_list,
ingress_tc_list)
self.assertTrue(self.qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("Create dot1p -> color qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [0, 0, 0, 1, 1, 1, 2, 2]
# ingress_color_list = [1, 1, 1, 1, 1, 1, 1, 1]
self.qos_dot1p_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR, ingress_dot1p_list,
ingress_color_list)
self.assertTrue(self.qos_dot1p_to_color_map_id != 0,
"Failed to create qos_map")
# Used by l2QosMapDifferentPCPToColorMultiIngresssPortTest
# QOS map defined for individual ports
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [0, 0, 0, 0, 0, 0, 0, 0]
self.p1_qos_dot1p_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR, ingress_dot1p_list,
ingress_color_list)
self.assertTrue(self.p1_qos_dot1p_to_color_map_id != 0,
"Failed to create qos_map")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [1, 1, 1, 1, 1, 1, 1, 1]
self.p2_qos_dot1p_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR, ingress_dot1p_list,
ingress_color_list)
self.assertTrue(self.p2_qos_dot1p_to_color_map_id != 0,
"Failed to create qos_map")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [2, 2, 2, 2, 2, 2, 2, 2]
self.p3_qos_dot1p_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR, ingress_dot1p_list,
ingress_color_list)
self.assertTrue(self.p3_qos_dot1p_to_color_map_id != 0,
"Failed to create qos_map")
# define egress tc, color -> pcp settings
egress_tc_color_list = [
[0, 0],
[1, 0],
[2, 0],
[3, 0],
[4, 0],
[5, 0],
[6, 0],
[7, 0],
[0, 1],
[1, 1],
[2, 1],
[3, 1],
[4, 1],
[5, 1],
[6, 1],
[7, 1],
[0, 2],
[1, 2],
[2, 2],
[3, 2],
[4, 2],
[5, 2],
[6, 2],
[7, 2]
]
egress_pcp_list = [
1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3,
]
self.p1_qos_tc_color_to_dot1q_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P,
egress_tc_color_list, egress_pcp_list)
self.assertTrue(self.p1_qos_tc_color_to_dot1q_id != 0,
"Failed to create qos_map")
egress_pcp_list = [
3, 3, 3, 3, 3, 3, 3, 3, # p2 egress pcp for green
4, 4, 4, 4, 4, 4, 4, 4, # p2 egress pcp for yellow
5, 5, 5, 5, 5, 5, 5, 5, # p2 egress pcp for red
]
self.p2_qos_tc_color_to_dot1q_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P,
egress_tc_color_list, egress_pcp_list)
self.assertTrue(self.p2_qos_tc_color_to_dot1q_id != 0,
"Failed to create qos_map")
egress_pcp_list = [
5, 5, 5, 5, 5, 5, 5, 5, # p3 egress pcp for green
6, 6, 6, 6, 6, 6, 6, 6, # p3 egress pcp for yellow
7, 7, 7, 7, 7, 7, 7, 7, # p3 egress pcp for red
]
self.p3_qos_tc_color_to_dot1q_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P,
egress_tc_color_list, egress_pcp_list)
self.assertTrue(self.p3_qos_tc_color_to_dot1q_id != 0,
"Failed to create qos_map")
def runTest(self):
self.l2QosMapPCPToColorDefaultMappingTest()
self.l2QosMapMultiPCPToOneColorMappingTest()
self.l2QosMapSamePCPToColorMultiIngresssPortTest()
self.l2QosMapDifferentPCPToColorMultiIngresssPortTest()
def tearDown(self):
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client, port, qos_default_tc=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dot1p_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_color_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=0)
sai_thrift_remove_qos_map(self.client, self.qos_dot1p_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, self.qos_dot1p_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p1_qos_tc_color_to_dot1q_id)
sai_thrift_remove_qos_map(self.client,
self.p2_qos_tc_color_to_dot1q_id)
sai_thrift_remove_qos_map(self.client,
self.p3_qos_tc_color_to_dot1q_id)
sai_thrift_remove_qos_map(self.client,
self.p1_qos_dot1p_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p2_qos_dot1p_to_color_map_id)
sai_thrift_remove_qos_map(self.client,
self.p3_qos_dot1p_to_color_map_id)
super(L2QosMapPcpToColorTest, self).tearDown()
def l2QosMapMultiPCPToOneColorMappingTest(self):
''' L2 traffic test verifies the following:
1. Many PCP to one color mapping
The verification method:
- SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR mapping defined for ingress
and assigned to ports 0, 1, 2, and 3
- SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mapping defined
for ingress and assigned to ports 0, 1, 2, and 3
- various SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mappings
defined for egress and assigned to ports 0, 1, 2, and 3
egress pcp = 2 x egress port - 1 + color
'''
print("l2QosMapMultiPCPToOneColorMappingTest")
# default PCP to TC mapping
test_cases = []
# priority vlan tagged packed
test_cases.append({
'pcp': None,
'port_default_tc': 0,
'tc': 0,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 1,
'tc': 1,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 2,
'tc': 2,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 3,
'tc': 3,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 4,
'tc': 4,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 5,
'tc': 5,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 6,
'tc': 6,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 7,
'tc': 7,
'color': 0
})
test_cases.append({
'pcp': 0,
'port_default_tc': 5,
'tc': 0,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 5,
'tc': 1,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 0,
'tc': 2,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 0,
'tc': 3,
'color': 1
})
test_cases.append({
'pcp': 4,
'port_default_tc': 0,
'tc': 4,
'color': 1
})
test_cases.append({
'pcp': 5,
'port_default_tc': 0,
'tc': 5,
'color': 1
})
test_cases.append({
'pcp': 6,
'port_default_tc': 0,
'tc': 6,
'color': 2
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'tc': 7,
'color': 2
})
# assign to port the tc_queue and tc_color_to_pcp qos map
for port, dot1p_to_tc, dot1p_color, tc_color in [
[self.port0, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port1, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port2, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p2_qos_tc_color_to_dot1q_id],
[self.port3, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p3_qos_tc_color_to_dot1q_id]]:
# set DOT1P -> TC
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# set DOT1P -> COLOR
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_color_map=dot1p_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dot1p_to_color_map=True)
self.assertEqual(attr['qos_dot1p_to_color_map'], dot1p_color)
# set TC and COLOR -> DOT1Q
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=tc_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dot1p_map'],
tc_color)
for test in test_cases:
if test['pcp'] is not None:
vlan = 1
ingress_pcp = str(test['pcp'])
else:
vlan = 0
ingress_pcp = 'None'
# define expected egress_pcp per egress port
egress_tc = test['tc']
egress_color = test['color']
p1_egress_pcp = 1 + test['color']
p2_egress_pcp = 3 + test['color']
p3_egress_pcp = 5 + test['color']
print("Sending eth packet port %d (pcp=%s) ->"
" port %d (tc=%d color=%d -> egress_pcp=%d)"
% (self.dev_port0, ingress_pcp,
self.dev_port1, egress_tc, egress_color,
p1_egress_pcp))
print("%47s port %d (tc=%d color=%d -> egress_pcp=%d))" %
(" ", self.dev_port2, egress_tc, egress_color,
p2_egress_pcp))
print("%47s port %d (tc=%d color=%d -> egress_pcp=%d))" %
(" ", self.dev_port3, egress_tc, egress_color,
p3_egress_pcp))
pkt = simple_tcp_packet(eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=vlan,
vlan_pcp=test['pcp'],
pktlen=104)
p1_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p1_egress_pcp,
pktlen=104)
p2_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p2_egress_pcp,
pktlen=104)
p3_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p3_egress_pcp,
pktlen=104)
test_port = self.dev_port0
flood_port_list = [[self.dev_port1], [self.dev_port2],
[self.dev_port3]]
flood_pkt_list = [p1_exp_pkt, p2_exp_pkt, p3_exp_pkt]
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded. ok")
def l2QosMapPCPToColorDefaultMappingTest(self):
''' L2 traffic test verifies the following:
1. default PCP to color mapping
The verification method:
No SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR mapping defined
Mapping the tc and color to pcp on egress port.
All colors map to pcp=0, only default color GREEN
maps to pcp 7,
'''
print("l2QosMapPCPToColorDefaultMappingTest")
# default PCP to TC mapping
test_cases = []
# priority vlan tagged packed
test_cases.append({
'pcp': None,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 1,
'queue': 1,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 2,
'queue': 2,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 3,
'queue': 3,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 4,
'queue': 4,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 5,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 6,
'queue': 6,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 7,
'queue': 7,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 5,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 4,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 5,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 6,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 0,
'port_default_tc': 1,
'queue': 1,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 2,
'queue': 2,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 3,
'queue': 3,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 4,
'queue': 4,
'color': 0
})
test_cases.append({
'pcp': 4,
'port_default_tc': 5,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 5,
'port_default_tc': 6,
'queue': 6,
'color': 0
})
test_cases.append({
'pcp': 6,
'port_default_tc': 7,
'queue': 7,
'color': 0
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
try:
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# assign to port the tc_queue and tc_color_to_pcp qos map
for port, tc_to_queue, tc_color in [
[self.port0, qos_tc_to_queue_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port1, qos_tc_to_queue_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port2, qos_tc_to_queue_map_id,
self.p2_qos_tc_color_to_dot1q_id],
[self.port3, qos_tc_to_queue_map_id,
self.p3_qos_tc_color_to_dot1q_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=tc_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dot1p_map'],
tc_color)
# verify port default tc
ports = [self.port0, self.port1, self.port2, self.port3]
self.verifyPortDefaultDot1pToTc(ports)
for test in test_cases:
queue = test['queue']
# setup port default_tc
if test['port_default_tc'] is not None:
# every test port gets the same default_tc =
# test['port_default_tc']
port_default_tc = test['port_default_tc']
port_config = [[self.port0, port_default_tc],
[self.port1, port_default_tc],
[self.port2, port_default_tc],
[self.port3, port_default_tc]]
else:
# every port gets default_tc as its port number
# port 0 -> default tc = 5
# port 1 -> default tc = 1
# port 2 -> default tc = 2
# port 3 -> default tc = 3
port_config = [[self.port0, 5], [self.port1, 1],
[self.port2, 2], [self.port3, 3]]
for port, port_default_tc in port_config:
sai_thrift_set_port_attribute(
self.client, port, qos_default_tc=port_default_tc)
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'], port_default_tc)
p1_initial_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_initial_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_initial_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
if test['port_default_tc'] is not None:
port_default_tc = str(test['port_default_tc'])
else:
port_default_tc = str(1)
if test['pcp'] is not None:
vlan = 1
ingress_pcp = str(test['pcp'])
else:
vlan = 0
ingress_pcp = 'None'
# define expected egress_pcp per egress port
p1_egress_pcp = 1
p2_egress_pcp = 3
p3_egress_pcp = 5
print("Sending packet port %d (port_default_tc=%s"
", pcp=%s) -> port %d (queue=%d, egress_pcp=%d)"
% (self.dev_port0, port_default_tc,
ingress_pcp, self.dev_port1, queue, p1_egress_pcp))
print("%54s port %d (queue=%d, egress_pcp=%d))" %
(" ", self.dev_port2, queue, p2_egress_pcp))
print("%54s port %d (queue=%d, egress_pcp=%d))" %
(" ", self.dev_port3, queue, p3_egress_pcp))
pkt = simple_tcp_packet(eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=vlan,
vlan_pcp=test['pcp'],
pktlen=104)
p1_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p1_egress_pcp,
pktlen=104)
p2_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p2_egress_pcp,
pktlen=104)
p3_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p3_egress_pcp,
pktlen=104)
test_port = self.dev_port0
flood_port_list = [[self.dev_port1], [self.dev_port2],
[self.dev_port3]]
flood_pkt_list = [p1_exp_pkt, p2_exp_pkt, p3_exp_pkt]
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded. ok")
p1_post_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_post_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_post_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
p1_initial_q_cnt + 1, p1_post_q_cnt,
'PORT1 queue {} packets counter {} != {}'.format(
queue, p1_initial_q_cnt + 1, p1_post_q_cnt))
self.assertEqual(
p2_initial_q_cnt + 1, p2_post_q_cnt,
'PORT2 queue {} packets counter {} != {}'.format(
queue, p2_initial_q_cnt + 1, p2_post_q_cnt))
self.assertEqual(
p3_initial_q_cnt + 1, p3_post_q_cnt,
'PORT3 queue {} packets counter {} != {}'.format(
queue, p3_initial_q_cnt + 1, p3_post_q_cnt))
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_and_color_to_dot1p_map=0)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
def verifyPortDefaultDot1pToTc(self, ports):
"""
Verifies port default tc
Args:
ports (list): list of ports
"""
for port in ports:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
def l2QosMapSamePCPToColorMultiIngresssPortTest(self):
''' L2 traffic test verifies the following:
1. Many PCP to one color mapping
The verification method:
- SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR mapping defined for ingress
and assigned to ports 0, 1, 2, and 3
- SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mapping defined for
ingress and assigned to ports 0, 1, 2, and 3
- various SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mappings
defined for egress and assigned to ports 0, 1, 2, and 3
egress pcp = 2 x egress port - 1 + color
'''
print("l2QosMapSamePCPToColorMultiIngresssPortTest")
# default PCP to TC mapping
test_cases = []
# priority vlan tagged packed
test_cases.append({
'pcp': None,
'port_default_tc': 0,
'tc': 0,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 1,
'tc': 1,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 2,
'tc': 2,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 3,
'tc': 3,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 4,
'tc': 4,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 5,
'tc': 5,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 6,
'tc': 6,
'color': 0
})
test_cases.append({
'pcp': None,
'port_default_tc': 7,
'tc': 7,
'color': 0
})
test_cases.append({
'pcp': 0,
'port_default_tc': 5,
'tc': 0,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 5,
'tc': 1,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 0,
'tc': 2,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 0,
'tc': 3,
'color': 1
})
test_cases.append({
'pcp': 4,
'port_default_tc': 0,
'tc': 4,
'color': 1
})
test_cases.append({
'pcp': 5,
'port_default_tc': 0,
'tc': 5,
'color': 1
})
test_cases.append({
'pcp': 6,
'port_default_tc': 0,
'tc': 6,
'color': 2
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'tc': 7,
'color': 2
})
for port, dot1p_to_tc, dot1p_color, tc_color in [
[self.port0, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port1, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port2, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p2_qos_tc_color_to_dot1q_id],
[self.port3, self.qos_dot1p_to_tc_map_id,
self.qos_dot1p_to_color_map_id,
self.p3_qos_tc_color_to_dot1q_id]]:
# set DOT1P -> TC
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# set DOT1P -> COLOR
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_color_map=dot1p_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dot1p_to_color_map=True)
self.assertEqual(attr['qos_dot1p_to_color_map'], dot1p_color)
# set TC and COLOR -> DOT1Q
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=tc_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dot1p_map'],
tc_color)
test_dev_ports_list = [self.dev_port0, self.dev_port1,
self.dev_port2, self.dev_port3]
for _, ingress_port in enumerate(test_dev_ports_list):
for test in test_cases:
if test['pcp'] is not None:
vlan = 1
ingress_pcp = str(test['pcp'])
else:
vlan = 0
ingress_pcp = 'None'
# define expected egress_pcp per egress port
egress_tc = test['tc']
egress_color = test['color']
p1_egress_pcp = 1 + test['color']
p2_egress_pcp = 3 + test['color']
p3_egress_pcp = 5 + test['color']
pkt = simple_tcp_packet(eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=vlan,
vlan_pcp=test['pcp'],
pktlen=104)
p1_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p1_egress_pcp,
pktlen=104)
p2_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p2_egress_pcp,
pktlen=104)
p3_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p3_egress_pcp,
pktlen=104)
egres_ports = []
flood_port_list = []
flood_pkt_list = []
pkt_list = [p1_exp_pkt, p1_exp_pkt, p2_exp_pkt, p3_exp_pkt]
for i, port in enumerate(test_dev_ports_list):
if port == ingress_port:
continue
flood_port_list.append([port])
flood_pkt_list.append(pkt_list[i])
egres_ports.append(port)
print("Sending eth packet port %d (pcp=%s) -> "
"port %d (tc=%d color=%d -> egress_pcp=%d)"
% (ingress_port, ingress_pcp,
egres_ports[0], egress_tc, egress_color,
p1_egress_pcp))
print("%47s port %d (tc=%d color=%d -> egress_pcp=%d))"
% (" ", egres_ports[1], egress_tc, egress_color,
p2_egress_pcp))
print("%47s port %d (tc=%d color=%d -> egress_pcp=%d))"
% (" ", egres_ports[2], egress_tc, egress_color,
p3_egress_pcp))
send_packet(self, ingress_port, pkt)
verify_each_packet_on_multiple_port_lists(
self, flood_pkt_list, flood_port_list)
print("\tPacket flooded. ok")
def l2QosMapDifferentPCPToColorMultiIngresssPortTest(self):
''' L2 traffic test verifies the following:
1. Many PCP to color mapping for various ingress ports
The verification method:
- SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR mapping defined for ingress
and assigned to ports 0, 1, 2, and 3
- SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mapping defined for
ingress and assigned to ports 0, 1, 2, and 3
- various SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P mappings
defined for egress and assigned to ports 0, 1, 2, and 3
egress pcp = 2 x egress port - 1 + color
'''
print("l2QosMapDifferentPCPToColorMultiIngresssPortTest")
# default PCP to TC mapping
test_cases = []
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 0,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 1,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 2,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 3,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 4,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 5,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 6,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port0,
'pcp': 7,
'p0_pcp': None,
'p1_pcp': 1,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 0,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 1,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 2,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 3,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 4,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 5,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 6,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port1,
'pcp': 7,
'p0_pcp': 1,
'p1_pcp': None,
'p2_pcp': 3,
'p3_pcp': 5
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 0,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 1,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 2,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 3,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 4,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 5,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 6,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port2,
'pcp': 7,
'p0_pcp': 2,
'p1_pcp': 2,
'p2_pcp': None,
'p3_pcp': 6
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 0,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 1,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 2,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 3,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 4,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 5,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 6,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
test_cases.append({
'ingress_port': self.dev_port3,
'pcp': 7,
'p0_pcp': 3,
'p1_pcp': 3,
'p2_pcp': 5,
'p3_pcp': None
})
for port, dot1p_to_tc, dot1p_color, tc_color_to_pcp in [
[self.port0, self.qos_dot1p_to_tc_map_id,
self.p1_qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port1, self.qos_dot1p_to_tc_map_id,
self.p1_qos_dot1p_to_color_map_id,
self.p1_qos_tc_color_to_dot1q_id],
[self.port2, self.qos_dot1p_to_tc_map_id,
self.p2_qos_dot1p_to_color_map_id,
self.p2_qos_tc_color_to_dot1q_id],
[self.port3, self.qos_dot1p_to_tc_map_id,
self.p3_qos_dot1p_to_color_map_id,
self.p3_qos_tc_color_to_dot1q_id]]:
# ingress set DOT1P -> TC
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# ingress set DOT1P -> COLOR
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_color_map=dot1p_color)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_dot1p_to_color_map=True)
self.assertEqual(attr['qos_dot1p_to_color_map'], dot1p_color)
# egress set TC and COLOR -> DOT1Q
status = sai_thrift_set_port_attribute(
self.client,
port,
qos_tc_and_color_to_dot1p_map=tc_color_to_pcp)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(
self.client, port, qos_tc_and_color_to_dot1p_map=True)
self.assertEqual(attr['qos_tc_and_color_to_dot1p_map'],
tc_color_to_pcp)
for test in test_cases:
ingress_port = test['ingress_port']
if test['pcp'] is not None:
vlan = 1
ingress_pcp = str(test['pcp'])
else:
vlan = 0
ingress_pcp = 'None'
# define expected egress_pcp per egress port
p0_egress_pcp = test['p0_pcp']
p1_egress_pcp = test['p1_pcp']
p2_egress_pcp = test['p2_pcp']
p3_egress_pcp = test['p3_pcp']
pkt = simple_tcp_packet(eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=vlan,
vlan_pcp=test['pcp'],
pktlen=104)
p0_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p0_egress_pcp,
pktlen=104)
p1_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p1_egress_pcp,
pktlen=104)
p2_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p2_egress_pcp,
pktlen=104)
p3_exp_pkt = simple_tcp_packet(
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_vlan_enable=True,
vlan_vid=1,
vlan_pcp=p3_egress_pcp,
pktlen=104)
egres_ports = []
flood_port_list = []
flood_pkt_list = []
pkt_list = [p0_exp_pkt, p1_exp_pkt, p2_exp_pkt, p3_exp_pkt]
egress_pcp_list = [p0_egress_pcp, p1_egress_pcp,
p2_egress_pcp, p3_egress_pcp]
egress_pcp = []
for i, port in enumerate(self.dev_test_port_list):
if port == ingress_port:
continue
flood_port_list.append([port])
flood_pkt_list.append(pkt_list[i])
egres_ports.append(port)
egress_pcp.append(egress_pcp_list[i])
print("Sending eth packet port %d (pcp=%s) -> "
" port %d (pcp=%d)"
% (ingress_port, ingress_pcp, egres_ports[0],
egress_pcp[0]))
print("%47s port %d (egress_pcp=%d))" %
(" ", egres_ports[1], egress_pcp[1]))
print("%47s port %d (egress_pcp=%d))" %
(" ", egres_ports[2], egress_pcp[2]))
send_packet(self, ingress_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded. ok")
@group("draft")
class L2QosMapPcpToTcTest(L2QosMapBaseClass):
''' L2 PCP to TC QOS map tests base class. '''
def setUp(self):
super(L2QosMapPcpToTcTest, self).setUp()
def runTest(self):
# PCP -> Tc Map
self.l2QosMapPCPToTcDefaultMappingTest()
self.l2QosMapMultiplePCPToOneTcMappingTest()
self.l2QosMapOneToOnePCPToTcMappingTest()
self.l2QosMapSamePcpToTcManyIngressPortsTest()
self.l2QosMapVariousPcpToTcManyIngressPortsTest()
def tearDown(self):
super(L2QosMapPcpToTcTest, self).tearDown()
def l2QosMapPCPToTcDefaultMappingTest(self):
''' Test verifies the following:
1. default L2 PCP to TC mapping (no mapping defined)
The verification method:
- setting the TC to QUEUE mapping
- verification of the queue stats
'''
print("l2QosMapPCPToTcDefaultMappingTest")
# default PCP to TC mapping
test_cases = []
# port default_tc Test Case
test_cases.append({
'pcp': 0,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 5,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 4,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 5,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 6,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
test_cases.append({
'pcp': 0,
'port_default_tc': 1,
'queue': 1,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': 2,
'queue': 2,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': 3,
'queue': 3,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': 4,
'queue': 4,
'color': 0
})
test_cases.append({
'pcp': 4,
'port_default_tc': 5,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 5,
'port_default_tc': 6,
'queue': 6,
'color': 0
})
test_cases.append({
'pcp': 6,
'port_default_tc': 7,
'queue': 7,
'color': 0
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'queue': 0,
'color': 0
})
# Test configured default_tc
# different default_tc per port
# port 0 -> default_tc = 5 ingress
# port 1 -> default_tc = 1 egress
# port 2 -> default_tc = 2 egress
# port 3 -> default_tc = 3 egress
test_cases.append({
'pcp': 0,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 1,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 2,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 3,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 4,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 5,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 6,
'port_default_tc': None,
'queue': 5,
'color': 0
})
test_cases.append({
'pcp': 7,
'port_default_tc': None,
'queue': 5,
'color': 0
})
try:
# setup tc to queue index mapping
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
# assign to port the tc_queue and tc_color_to_pcp qos map
for port, tc_to_queue in [[self.port0, qos_tc_to_queue_map_id],
[self.port1, qos_tc_to_queue_map_id],
[self.port2, qos_tc_to_queue_map_id],
[self.port3, qos_tc_to_queue_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
# verify port default tc
for port in [self.port0, self.port1, self.port2, self.port3]:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
for test in test_cases:
queue = test['queue']
# setup port default_tc
if test['port_default_tc'] is not None:
# every test port gets the same default_tc =
# test['port_default_tc']
port_default_tc = test['port_default_tc']
port_config = [[self.port0, port_default_tc],
[self.port1, port_default_tc],
[self.port2, port_default_tc],
[self.port3, port_default_tc]]
else:
# every port gets default_tc as its port number
# port 0 -> default tc = 5
# port 1 -> default tc = 1
# port 2 -> default tc = 2
# port 3 -> default tc = 3
port_config = [[self.port0, 5], [self.port1, 1],
[self.port2, 2], [self.port3, 3]]
for port, port_default_tc in port_config:
sai_thrift_set_port_attribute(
self.client, port, qos_default_tc=port_default_tc)
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'], port_default_tc)
p1_initial_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_initial_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_initial_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
if test['port_default_tc'] is not None:
port_default_tc = str(test['port_default_tc'])
else:
port_default_tc = str(1)
ingress_pcp = str(test['pcp'])
print("Sending packet port %d (default_tc=%s, pcp=%s)"
" -> port %d (queue=%d, pcp=%d)"
% (self.dev_port0, port_default_tc,
ingress_pcp, self.dev_port1, queue, 1))
print("\t\t\t\t\tport %d (queue=%d, pcp=%d))"
% (self.dev_port2, queue, 2))
print("\t\t\t\t\tport %d (queue=%d, pcp=%d))"
% (self.dev_port3, queue, 3))
ingress_pcp = test['pcp']
pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[ingress_pcp],
dl_vlanid_list=[1])
p1_exp_pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[1],
dl_vlanid_list=[1])
p2_exp_pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[1],
dl_vlanid_list=[1])
p3_exp_pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[3],
dl_vlanid_list=[1])
test_port = self.dev_port0
flood_port_list = [[self.dev_port1], [self.dev_port2],
[self.dev_port3]]
flood_pkt_list = [pkt, pkt, pkt]
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded. ok")
p1_post_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_post_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_post_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
p1_initial_q_cnt + 1, p1_post_q_cnt,
'PORT1 queue {} packets counter {} != {}'.format(
queue, p1_initial_q_cnt + 1, p1_post_q_cnt))
self.assertEqual(
p2_initial_q_cnt + 1, p2_post_q_cnt,
'PORT2 queue {} packets counter {} != {}'.format(
queue, p2_initial_q_cnt + 1, p2_post_q_cnt))
self.assertEqual(
p3_initial_q_cnt + 1, p3_post_q_cnt,
'PORT3 queue {} packets counter {} != {}'.format(
queue, p3_initial_q_cnt + 1, p3_post_q_cnt))
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_default_tc=0)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
def l2QosMapMultiplePCPToOneTcMappingTest(self):
''' Test verifies the following:
1. L2 traffic multiple PCP to TC mapping
The verification method:
- setting the TC to QUEUE mapping
- verification of the queue stats
'''
print("l2QosMapMultiplePCPToOneTcMappingTest")
test_cases = []
# port default_tc Test Case
test_cases.append({
'pcp': 0,
'port_default_tc': 0,
'p1_queue': 3,
'p2_queue': 3,
'p3_queue': 3
})
test_cases.append({
'pcp': 1,
'port_default_tc': 0,
'p1_queue': 3,
'p2_queue': 3,
'p3_queue': 3
})
test_cases.append({
'pcp': 2,
'port_default_tc': 0,
'p1_queue': 3,
'p2_queue': 3,
'p3_queue': 3
})
test_cases.append({
'pcp': 3,
'port_default_tc': 0,
'p1_queue': 3,
'p2_queue': 3,
'p3_queue': 3
})
test_cases.append({
'pcp': 4,
'port_default_tc': 0,
'p1_queue': 7,
'p2_queue': 7,
'p3_queue': 7
})
test_cases.append({
'pcp': 5,
'port_default_tc': 0,
'p1_queue': 7,
'p2_queue': 7,
'p3_queue': 7
})
test_cases.append({
'pcp': 6,
'port_default_tc': 0,
'p1_queue': 7,
'p2_queue': 7,
'p3_queue': 7
})
test_cases.append({
'pcp': 7,
'port_default_tc': 0,
'p1_queue': 7,
'p2_queue': 7,
'p3_queue': 7
})
try:
print("Create dot1p -> tc qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [3, 3, 3, 3, 7, 7, 7, 7]
qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_dot1p_list,
ingress_tc_list)
self.assertTrue(qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
print("Create tc -> queue index qos mapping")
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [3, 3, 3, 3, 7, 7, 7, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
# configure the ingress ports
for port, dot1p_to_tc in [[self.port0, qos_dot1p_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# configure the egress ports
for port, tc_to_queue in [[self.port1, qos_tc_to_queue_map_id],
[self.port2, qos_tc_to_queue_map_id],
[self.port3, qos_tc_to_queue_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
# verify port default tc
for port in [self.port0, self.port1, self.port2, self.port3]:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
for test in test_cases:
pcp = test['pcp']
# setup port default_tc
port_default_tc = 0
if test['port_default_tc'] is not None:
port_default_tc = test['port_default_tc']
for port in [self.port0]:
sai_thrift_set_port_attribute(
self.client, port, qos_default_tc=port_default_tc)
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'], port_default_tc)
p1_initial_q_cnt = self.getPortQueueIndexStats(
self.port1, test['p1_queue'], ['SAI_QUEUE_STAT_PACKETS'])
p2_initial_q_cnt = self.getPortQueueIndexStats(
self.port2, test['p2_queue'], ['SAI_QUEUE_STAT_PACKETS'])
p3_initial_q_cnt = self.getPortQueueIndexStats(
self.port3, test['p3_queue'], ['SAI_QUEUE_STAT_PACKETS'])
print("Sending packet port %d (pcp=%d) -> "
"port %d (port_default_tc=%d queue=%d)"
% (self.dev_port0, pcp, self.dev_port1,
test['port_default_tc'], test['p1_queue']))
pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[pcp],
dl_vlanid_list=[1])
test_port = self.dev_port0
flood_port_list = [[self.dev_port1], [self.dev_port2],
[self.dev_port3]]
flood_pkt_list = [pkt, pkt, pkt]
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded to ports 1,2,3. ok")
p1_post_q_cnt = self.getPortQueueIndexStats(
self.port1, test['p1_queue'], ['SAI_QUEUE_STAT_PACKETS'])
p2_post_q_cnt = self.getPortQueueIndexStats(
self.port2, test['p2_queue'], ['SAI_QUEUE_STAT_PACKETS'])
p3_post_q_cnt = self.getPortQueueIndexStats(
self.port3, test['p3_queue'], ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
p1_initial_q_cnt + 1, p1_post_q_cnt,
'PORT1 queue {} packets counter {} != {}'.format(
test['p1_queue'], p1_initial_q_cnt + 1, p1_post_q_cnt))
self.assertEqual(
p2_initial_q_cnt + 1, p2_post_q_cnt,
'PORT2 queue {} packets counter {} != {}'.format(
test['p2_queue'], p2_initial_q_cnt + 1, p2_post_q_cnt))
self.assertEqual(
p3_initial_q_cnt + 1, p3_post_q_cnt,
'PORT3 queue {} packets counter {} != {}'.format(
test['p3_queue'], p3_initial_q_cnt + 1, p3_post_q_cnt))
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_default_tc=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=0)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dot1p_to_tc_map_id)
def l2QosMapVariousPcpToTcManyIngressPortsTest(self):
''' Test verifies the following:
1. L2 traffic multiple PCP to various TC mapping
The verification method:
- setting the TC to QUEUE mapping
- verification of the queue stats
'''
print("l2QosMapVariousPcpToTcManyIngressPortsTest")
try:
print("Create and verify dot1p -> tc qos mapping")
p0_qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client,
SAI_QOS_MAP_TYPE_DOT1P_TO_TC, [0, 1, 2, 3, 4, 5, 6, 7],
[4, 5, 6, 7, 0, 1, 2, 3],
verify=True)
# expected queue number formula
# queue = (ingress port_number + 4 + pcp) mod 8
self.assertTrue(p0_qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
p1_qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client,
SAI_QOS_MAP_TYPE_DOT1P_TO_TC, [0, 1, 2, 3, 4, 5, 6, 7],
[5, 6, 7, 0, 1, 2, 3, 4],
verify=True)
self.assertTrue(p1_qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
p2_qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client,
SAI_QOS_MAP_TYPE_DOT1P_TO_TC, [0, 1, 2, 3, 4, 5, 6, 7],
[6, 7, 0, 1, 2, 3, 4, 5],
verify=True)
self.assertTrue(p2_qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
p3_qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client,
SAI_QOS_MAP_TYPE_DOT1P_TO_TC, [0, 1, 2, 3, 4, 5, 6, 7],
[7, 0, 1, 2, 3, 4, 5, 6],
verify=True)
self.assertTrue(p3_qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
print("Create tc -> queue index qos mapping")
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE,
[0, 1, 2, 3, 4, 5, 6, 7], [0, 1, 2, 3, 4, 5, 6, 7])
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
# configure the ingress ports
for port, dot1p_to_tc in [[self.port0, p0_qos_dot1p_to_tc_map_id],
[self.port1, p1_qos_dot1p_to_tc_map_id],
[self.port2, p2_qos_dot1p_to_tc_map_id],
[self.port3, p3_qos_dot1p_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# configure the egress ports tc -> queue mapping
# same for all ports.
for port, tc_to_queue in [[self.port0, qos_tc_to_queue_map_id],
[self.port1, qos_tc_to_queue_map_id],
[self.port2, qos_tc_to_queue_map_id],
[self.port3, qos_tc_to_queue_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
# verify port default_tc
ports = [self.port0, self.port1, self.port2, self.port3]
self.verifyPortDefaultDscpToTc(ports)
for p_idx in range(0, len(self.dev_test_port_list)):
test_port = self.dev_test_port_list[p_idx]
print("Testing tx_port=%d" % (test_port))
for pcp in [0, 1, 2, 3, 4, 5, 6, 7]:
pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[pcp],
dl_vlanid_list=[1])
flood_port_list = []
flood_pkt_list = []
for port in self.dev_test_port_list:
if port == test_port:
continue
flood_port_list.append([port])
flood_pkt_list.append(pkt)
port_queue = []
for port in range(0, len(self.dev_test_port_list)):
queue_index = (pcp + port + 4) % 8
port_queue.append(queue_index)
init_q_cnt = []
for port in [self.port0, self.port1, self.port2,
self.port3]:
queue = port_queue[p_idx]
init_q_cnt.append(
self.getPortQueueIndexStats(
port, queue, ['SAI_QUEUE_STAT_PACKETS']))
print("Sending packet port %d (pcp=%d) -> "
"port %d (queue=%d)"
% (test_port, pcp, flood_port_list[0][0],
port_queue[p_idx]))
print("\t\t\t\t\tport %d (queue=%d)"
% (flood_port_list[1][0], port_queue[p_idx]))
print("\t\t\t\t\tport %d (queue=%d)"
% (flood_port_list[2][0], port_queue[p_idx]))
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(
self, flood_pkt_list, flood_port_list)
print("\tPacket flooded to ports %s. ok" %
(flood_port_list))
print("\tVerify port queues packet counters.")
post_q_cnt = []
for port in [
self.port0, self.port1, self.port2, self.port3
]:
post_q_cnt.append(
self.getPortQueueIndexStats(
port, port_queue[p_idx],
['SAI_QUEUE_STAT_PACKETS']))
# verify the port queue counters
cnt_dict = {"init": init_q_cnt, "post": post_q_cnt}
self.verifyPortQueueCountersSamePcp(test_port, p_idx,
cnt_dict, port_queue)
print("\tok")
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_default_tc=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=0)
sai_thrift_remove_qos_map(self.client, p0_qos_dot1p_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p1_qos_dot1p_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p2_qos_dot1p_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, p3_qos_dot1p_to_tc_map_id)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
def verifyPortDefaultDscpToTc(self, ports):
"""
Verifies port default tc
Args:
ports (list): list of ports
"""
for port in ports:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
def verifyPortQueueCountersSamePcp(self, test_port, p_idx,
cnt_dict, port_queue):
"""
Verifies the port queue counters
Args:
test_port (int): test port number
p_idx (int): port id
cnt_dict (dict): dictionary of cnt lists
port_queue (list): port queue list
"""
i = 0
for port in self.dev_test_port_list:
if port == test_port:
# counter should remain unchanged
self.assertEqual(
cnt_dict["init"][i], cnt_dict["post"][i],
'PORT{} queue {} packets expected {} got {}'
.format(port, port_queue[p_idx], cnt_dict["init"][i],
cnt_dict["post"][i]))
else:
self.assertEqual(
cnt_dict["init"][i] + 1, cnt_dict["post"][i],
'PORT{} queue {} packets expected {} got {}'
.format(port, port_queue[p_idx],
cnt_dict["init"][i] + 1, cnt_dict["post"][i]))
i += 1
def l2QosMapSamePcpToTcManyIngressPortsTest(self):
''' Test verifies the following:
1. L2 traffic same PCP to many TC mapping
The verification method:
- setting the TC to QUEUE mapping
- verification of the queue stats
'''
print("l2QosMapSamePcpToTcManyIngressPortsTest")
test_cases = []
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 0,
'p1_queue': 0,
'p2_queue': 0,
'p3_queue': 0
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 1,
'p1_queue': 1,
'p2_queue': 1,
'p3_queue': 1
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 2,
'p1_queue': 2,
'p2_queue': 2,
'p3_queue': 2
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 3,
'p1_queue': 3,
'p2_queue': 3,
'p3_queue': 3
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 4,
'p1_queue': 4,
'p2_queue': 4,
'p3_queue': 4
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 5,
'p1_queue': 5,
'p2_queue': 5,
'p3_queue': 5
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 6,
'p1_queue': 6,
'p2_queue': 6,
'p3_queue': 6
})
test_cases.append({
'tx_port': self.dev_port0,
'pcp': 7,
'p1_queue': 7,
'p2_queue': 7,
'p3_queue': 7
})
try:
print("Create dot1p -> tc qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_dot1p_list,
ingress_tc_list)
self.assertTrue(qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
print("Create tc -> queue index qos mapping")
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
# configure the ingress ports
for port, dot1p_to_tc in [[self.port0, qos_dot1p_to_tc_map_id],
[self.port1, qos_dot1p_to_tc_map_id],
[self.port2, qos_dot1p_to_tc_map_id],
[self.port3, qos_dot1p_to_tc_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# configure the egress ports
for port, tc_to_queue in [[self.port0, qos_tc_to_queue_map_id],
[self.port1, qos_tc_to_queue_map_id],
[self.port2, qos_tc_to_queue_map_id],
[self.port3, qos_tc_to_queue_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
# verify port default_tc
ports = [self.port0, self.port1, self.port2, self.port3]
self.verifyPortDefaultDscpToTc(ports)
for test_port in self.dev_test_port_list:
print("Testing tx_port=%d" % (test_port))
for test in test_cases:
pcp = test['pcp']
pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[pcp],
dl_vlanid_list=[1])
flood_port_list = []
flood_pkt_list = []
for port in self.dev_test_port_list:
if port == test_port:
continue
flood_port_list.append([port])
flood_pkt_list.append(pkt)
init_q_cnt = []
for port in [
self.port0, self.port1, self.port2, self.port3
]:
init_q_cnt.append(
self.getPortQueueIndexStats(
port, test['p1_queue'],
['SAI_QUEUE_STAT_PACKETS']))
print("Sending packet port %d (pcp=%d) -> "
"port %d (queue=%d)"
% (test_port, pcp, flood_port_list[0][0],
test['p1_queue']))
print("\t\t\t\t\tport %d (queue=%d)"
% (flood_port_list[1][0], test['p2_queue']))
print("\t\t\t\t\tport %d (queue=%d)"
% (flood_port_list[2][0], test['p3_queue']))
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(
self, flood_pkt_list, flood_port_list)
print("\tPacket flooded to ports %s. ok" %
(flood_port_list))
print("\tVerify port queues packet counters.")
post_q_cnt = []
for port in [
self.port0, self.port1, self.port2, self.port3
]:
post_q_cnt.append(
self.getPortQueueIndexStats(
port, test['p1_queue'],
['SAI_QUEUE_STAT_PACKETS']))
# verify the port queue counters
print("Test")
print(type(test))
self.verifyPortQueueCountersVariousPcp(
test_port, test, init_q_cnt, post_q_cnt)
print("\tok")
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_default_tc=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=0)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dot1p_to_tc_map_id)
def verifyPortQueueCountersVariousPcp(self, test_port, test, init_q_cnt,
post_q_cnt):
"""
Verifies the port queue counters
Args:
test_port (int): test port number
test (dict): test dictionary
init_q_cnt (list): init cnt list
post_q_cnt (list): post cnt list
"""
i = 0
for port in self.dev_test_port_list:
if port == test_port:
# counter should remain unchanged
self.assertEqual(
init_q_cnt[i], post_q_cnt[i],
'PORT{} queue {} packets expected {} == {}'
.format(port, test['p1_queue'], init_q_cnt[i],
post_q_cnt[i]))
else:
self.assertEqual(
init_q_cnt[i] + 1, post_q_cnt[i],
'PORT{} queue {} packets expected {} == {}'
.format(port, test['p1_queue'],
init_q_cnt[i] + 1, post_q_cnt[i]))
i += 1
def l2QosMapOneToOnePCPToTcMappingTest(self):
''' Test verifies the following:
1. L2 traffic one to one PCP to TC mapping
The verification method:
- setting the TC to QUEUE mapping
- verification of the queue stats
'''
print("l2QosMapOneToOnePCPToTcMappingTest")
test_cases = []
test_cases.append({'pcp': 0, 'queue': 0})
test_cases.append({'pcp': 1, 'queue': 1})
test_cases.append({'pcp': 2, 'queue': 2})
test_cases.append({'pcp': 3, 'queue': 3})
test_cases.append({'pcp': 4, 'queue': 4})
test_cases.append({'pcp': 5, 'queue': 5})
test_cases.append({'pcp': 6, 'queue': 6})
test_cases.append({'pcp': 7, 'queue': 7})
try:
print("Create dot1p -> tc qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_dot1p_to_tc_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_dot1p_list,
ingress_tc_list)
self.assertTrue(qos_dot1p_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
print("Create tc -> queue index qos mapping")
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
# configure the ingress ports
for port, dot1p_to_tc in [[self.port0, qos_dot1p_to_tc_map_id]]:
# print("PORT 0x%x dot1p_to_tc=0x%x" %(port, dot1p_to_tc))
status = sai_thrift_set_port_attribute(
self.client, port, qos_dot1p_to_tc_map=dot1p_to_tc)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=True)
self.assertEqual(attr['qos_dot1p_to_tc_map'], dot1p_to_tc)
# configure the egress ports
for port, tc_to_queue in [[self.port1, qos_tc_to_queue_map_id],
[self.port2, qos_tc_to_queue_map_id],
[self.port3, qos_tc_to_queue_map_id]]:
status = sai_thrift_set_port_attribute(
self.client, port, qos_tc_to_queue_map=tc_to_queue)
self.assertEqual(status, SAI_STATUS_SUCCESS,
"Failed to set port attribute")
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_tc_to_queue_map=True)
self.assertEqual(attr['qos_tc_to_queue_map'], tc_to_queue)
# verify port default tc
for port in [self.port0, self.port1, self.port2, self.port3]:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_dscp_to_tc_map=True,
qos_default_tc=True)
self.assertEqual(attr['qos_dscp_to_tc_map'], 0)
self.assertEqual(attr['qos_default_tc'], 0)
for test in test_cases:
pcp = test['pcp']
queue = test['queue']
# setup port default_tc
port_default_tc = 0
for port in [self.port0]:
attr = sai_thrift_get_port_attribute(self.client,
port,
qos_default_tc=True)
self.assertEqual(attr['qos_default_tc'], port_default_tc)
p1_initial_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_initial_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_initial_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
print("Sending eth packet port %d (pcp=%d) -> "
"port %d (queue=%d)"
% (self.dev_port0, pcp, self.dev_port1,
queue))
print("\t\t\t\t\tport %d (queue=%d)"
% (self.dev_port2, queue))
print("\t\t\t\t\tport %d (queue=%d)"
% (self.dev_port3, queue))
pkt = simple_eth_raw_packet_with_taglist(
pktlen=104,
eth_dst='00:33:33:33:33:00',
eth_src='00:33:33:33:33:11',
dl_taglist_enable=True,
dl_vlan_pcp_list=[pcp],
dl_vlanid_list=[1])
test_port = self.dev_port0
flood_port_list = [[self.dev_port1], [self.dev_port2],
[self.dev_port3]]
flood_pkt_list = [pkt, pkt, pkt]
send_packet(self, test_port, pkt)
verify_each_packet_on_multiple_port_lists(self, flood_pkt_list,
flood_port_list)
print("\tPacket flooded to ports 1,2,3. ok")
p1_post_q_cnt = self.getPortQueueIndexStats(
self.port1, queue, ['SAI_QUEUE_STAT_PACKETS'])
p2_post_q_cnt = self.getPortQueueIndexStats(
self.port2, queue, ['SAI_QUEUE_STAT_PACKETS'])
p3_post_q_cnt = self.getPortQueueIndexStats(
self.port3, queue, ['SAI_QUEUE_STAT_PACKETS'])
self.assertEqual(
p1_initial_q_cnt + 1, p1_post_q_cnt,
'PORT1 queue {} packets counter {} != {}'.format(
queue, p1_initial_q_cnt + 1, p1_post_q_cnt))
self.assertEqual(
p2_initial_q_cnt + 1, p2_post_q_cnt,
'PORT2 queue {} packets counter {} != {}'.format(
queue, p2_initial_q_cnt + 1, p2_post_q_cnt))
self.assertEqual(
p3_initial_q_cnt + 1, p3_post_q_cnt,
'PORT3 queue {} packets counter {} != {}'.format(
queue, p3_initial_q_cnt + 1, p3_post_q_cnt))
finally:
for port in [self.port0, self.port1, self.port2, self.port3]:
sai_thrift_set_port_attribute(self.client,
port,
qos_tc_to_queue_map=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_default_tc=0)
sai_thrift_set_port_attribute(self.client,
port,
qos_dot1p_to_tc_map=0)
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
sai_thrift_remove_qos_map(self.client, qos_dot1p_to_tc_map_id)
@group("draft")
class QosMapCreateModifyTest(L2QosMapBaseClass):
''' QOS map create and modify test base class.
'''
def setUp(self):
super(QosMapCreateModifyTest, self).setUp()
def runTest(self):
self.qosMapTcToQueueModifyTest()
self.qosMapTcColorToDscpCreateModifyTest()
self.qosMapDscpToTcCreateModifyTest()
self.qosMapDscpToColorCreateModifyTest()
self.qosMapPrioToQueueModifyTest()
self.qosMapDot1ToTcCreateModifyTest()
self.qosMapDot1ToColorCreateModifyTest()
self.qosMapTcColorToDot1pCreateModifyTest()
self.qosMapPfcPrioToPrioGroupCreateModifyTest()
self.qosMapTcPgCreateModifyTest()
def tearDown(self):
super(QosMapCreateModifyTest, self).tearDown()
def qosMapDscpToTcCreateModifyTest(self):
''' QOS DSCP -> TC map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapDscpToTcCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create dscp -> tc qos mapping")
ingress_dscp_list = [63, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_dscp_to_tc_map_id = create_and_verify_qos_map(
self.client,
SAI_QOS_MAP_TYPE_DSCP_TO_TC,
ingress_dscp_list,
ingress_tc_list,
verify=False)
self.assertTrue(qos_dscp_to_tc_map_id != 0,
"Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({'dscp': [0, 1, 2, 4, 5], 'tc': [0, 1, 2, 4, 5]})
test_cases.append({'dscp': [5, 6, 7], 'tc': [2, 2, 2]})
test_cases.append({'dscp': [0], 'tc': [0]})
test_cases.append({'dscp': [], 'tc': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map dscp -> "
"tc with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_dscp_to_tc_map_id,
SAI_QOS_MAP_TYPE_DSCP_TO_TC,
test['dscp'], test['tc']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_dscp_to_tc_map_id)
def qosMapTcToQueueModifyTest(self):
''' QOS TC -> QUEUE map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapTcToQueueModifyTest")
try:
# setup tc to queue index mapping
print("Create tc -> queue index qos mapping")
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_tc_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_QUEUE, ingress_tc_list,
ingress_queue_list)
self.assertTrue(qos_tc_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'tc': [0, 1, 2, 4, 5],
'queue': [0, 1, 2, 4, 5]
})
test_cases.append({
'tc': [0, 1, 2, 4, 5],
'queue': [0, 0, 0, 0, 0]})
test_cases.append({
'tc': [0, 1, 2, 4, 5, 6, 7],
'queue': [0, 0, 0, 0, 0, 7, 7]
})
test_cases.append({'tc': [5, 6, 7], 'queue': [2, 2, 2]})
test_cases.append({'tc': [0], 'queue': [0]})
i = 0
for test in test_cases:
print("[tc]%d]: Update existing qos_map tc -> "
"queue index with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_tc_to_queue_map_id,
SAI_QOS_MAP_TYPE_TC_TO_QUEUE,
test['tc'], test['queue']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_tc_to_queue_map_id)
def qosMapDscpToColorCreateModifyTest(self):
''' QOS DSCP -> COLOR map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapDscpToColorCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create dscp -> color qos mapping")
ingress_dscp_list = [63, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [0, 1, 2, 2, 2, 2, 2, 2]
qos_dscp_to_color_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DSCP_TO_COLOR, ingress_dscp_list,
ingress_color_list)
self.assertTrue(qos_dscp_to_color_map_id != 0,
"Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'dscp': [0, 1, 2, 4, 5],
'color': [0, 1, 2, 0, 0]
})
test_cases.append({
'dscp': [0, 1, 2, 4, 5, 19, 20],
'color': [0, 1, 2, 0, 0, 2, 2]
})
test_cases.append({'dscp': [5, 6, 7], 'color': [2, 2, 2]})
test_cases.append({'dscp': [0], 'color': [0]})
test_cases.append({'dscp': [], 'color': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map dscp -> "
"color with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_dscp_to_color_map_id,
SAI_QOS_MAP_TYPE_DSCP_TO_COLOR,
test['dscp'], test['color']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_dscp_to_color_map_id)
def qosMapPrioToQueueModifyTest(self):
''' QOS PRIO -> QUEUE map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapPrioToQueueModifyTest")
try:
# setup tc to queue index mapping
print("Create prio -> queue index qos mapping")
ingress_prio_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_queue_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_prio_to_queue_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE,
ingress_prio_list, ingress_queue_list)
self.assertTrue(qos_prio_to_queue_map_id != 0,
"Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'prio': [0, 1, 2, 4, 5],
'queue': [0, 1, 2, 4, 5]
})
test_cases.append({'prio': [5, 6, 7], 'queue': [2, 2, 2]})
test_cases.append({'prio': [7], 'queue': [7]})
test_cases.append({'prio': [], 'queue': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map prio -> "
" queue index with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_prio_to_queue_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_QUEUE, test['prio'],
test['queue']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_prio_to_queue_map_id)
def qosMapDot1ToColorCreateModifyTest(self):
''' QOS DOT1P -> COLOR map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapDot1ToColorCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create dot1p -> color qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_color_list = [0, 0, 0, 1, 1, 1, 2, 2]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR,
ingress_dot1p_list, ingress_color_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'dot1p': [0, 1, 2, 4, 5],
'color': [0, 1, 2, 2, 2]
})
test_cases.append({'dot1p': [5, 6, 7], 'color': [2, 2, 2]})
test_cases.append({'dot1p': [5, 6, 7], 'color': [0, 0, 0]})
test_cases.append({'dot1p': [5, 6, 7, 0], 'color': [0, 0, 0, 1]})
test_cases.append({'dot1p': [0], 'color': [0]})
test_cases.append({'dot1p': [], 'color': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map dot1p -> "
" color with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_DOT1P_TO_COLOR,
test['dot1p'], test['color']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)
def qosMapPfcPrioToPrioGroupCreateModifyTest(self):
''' QOS PFC PRIORITY -> PRIORITY GROUP map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapPfcPrioToPrioGroupCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create PFC priority -> priority group mapping")
ingress_pfc_prio_list = [0, 1, 2]
ingress_pg_list = [3, 4, 5]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP,
ingress_pfc_prio_list, ingress_pg_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'pfc_prio': [0, 1, 2, 4, 5],
'pg': [0, 1, 2, 2, 2]
})
test_cases.append({'pfc_prio': [5, 6, 7], 'pg': [2, 2, 2]})
test_cases.append({'pfc_prio': [5, 6, 7], 'pg': [0, 2, 2]})
test_cases.append({'pfc_prio': [5, 6, 7], 'pg': [0, 2, 3]})
test_cases.append({'pfc_prio': [5, 6, 7, 0], 'pg': [0, 0, 0, 1]})
test_cases.append({'pfc_prio': [0], 'pg': [0]})
test_cases.append({'pfc_prio': [], 'pg': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map pfc_priority -> "
" priority_group with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_PFC_PRIORITY_TO_PRIORITY_GROUP,
test['pfc_prio'], test['pg']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)
def qosMapDot1ToTcCreateModifyTest(self):
''' QOS DOT1P -> TC map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapDot1ToTcCreateModifyTest")
try:
# setup dot1p to tc mapping
print("Create dot1p -> tc qos mapping")
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_DOT1P_TO_TC, ingress_dot1p_list,
ingress_tc_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({'dot1p': [0, 1, 2, 4, 5],
'tc': [0, 1, 2, 4, 5]})
test_cases.append({'dot1p': [5, 6, 7], 'tc': [2, 2, 2]})
test_cases.append({'dot1p': [0], 'tc': [0]})
test_cases.append({'dot1p': [], 'tc': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map dot1p -> "
"tc with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_DOT1P_TO_TC,
test['dot1p'], test['tc']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)
def qosMapTcColorToDscpCreateModifyTest(self):
''' QOS TC + COLOR -> DSCP map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapTcColorToDscpCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create tc and color -> dscp qos mapping")
ingress_tc_color_list = [[0, 1], [1, 1], [2, 0], [3, 0], [4, 1],
[5, 0], [6, 1], [7, 0]]
ingress_dscp_list = [0, 21, 32, 13, 44, 25, 16, 9]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP,
ingress_tc_color_list, ingress_dscp_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'tc_color': [[1, 0], [2, 0], [7, 0]],
'dscp': [0, 1, 2]
})
test_cases.append({
'tc_color': [[1, 1], [1, 0], [2, 0]],
'dscp': [0, 1, 2]
})
test_cases.append({
'tc_color': [[1, 1], [2, 2], [3, 1], [4, 0]],
'dscp': [12, 9, 27, 32]
})
test_cases.append({'tc_color': [], 'dscp': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map_id tc_color -> "
" dscp with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DSCP,
test['tc_color'], test['dscp']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)
def qosMapTcColorToDot1pCreateModifyTest(self):
''' QOS TC + COLOR -> DOT1P map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapTcColorToDot1pCreateModifyTest")
try:
# setup tc to queue index mapping
print("Create tc and color -> dot1p qos mapping")
ingress_tc_color_list = [[0, 1], [1, 1], [2, 0], [3, 0], [4, 1],
[5, 0], [6, 1], [7, 0]]
ingress_dot1p_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P,
ingress_tc_color_list, ingress_dot1p_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({
'tc_color': [[1, 2], [2, 0], [7, 0]],
'dot1p': [0, 1, 2]
})
test_cases.append({
'tc_color': [[1, 1], [1, 0], [2, 0]],
'dot1p': [0, 1, 2]
})
test_cases.append({
'tc_color': [[1, 1], [2, 2], [3, 1], [4, 0]],
'dot1p': [7, 4, 5, 7]
})
test_cases.append({'tc_color': [], 'dot1p': []})
i = 0
for test in test_cases:
print("[tc:%d]: Update existing qos_map tc_color -> "
" dot1p with new map_to_value_list" % (i))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_TC_AND_COLOR_TO_DOT1P,
test['tc_color'], test['dot1p']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)
def qosMapTcPgCreateModifyTest(self):
''' QOS TC -> PRIORITY GROUP map create and modify test.
Test verifies creation of the qos map object.
In addition it:
- verifies created qos map and its map_to_value_list.
- updates the created qos map object map_to_value_list
with the new data list and verifies it
'''
print("qosMapTcPgCreateModifyTest")
try:
print("Create tc -> priority group qos mapping")
ingress_tc_list = [0, 1, 2, 3, 4, 5, 6, 7]
ingress_pg_list = [0, 1, 2, 3, 4, 5, 6, 7]
qos_map_id = create_and_verify_qos_map(
self.client, SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP,
ingress_tc_list, ingress_pg_list)
self.assertTrue(qos_map_id != 0, "Failed to create qos_map")
print("\tok")
test_cases = []
test_cases.append({'tc': [0, 1, 2], 'pg': [0, 1, 2]})
test_cases.append({'tc': [0, 1, 2], 'pg': [2, 1, 0]})
test_cases.append({'tc': [0], 'pg': [7]})
test_cases.append({'tc': [0], 'pg': [6]})
test_cases.append({
'tc': [0, 1, 2, 3, 4, 5, 6, 7],
'pg': [0, 0, 0, 0, 1, 2, 3, 4]
})
test_cases.append({'tc': [], 'pg': []})
i = 0
for test in test_cases:
print("%d: Update qos_map tc [%s] -> pg [%s]" %
(i, test['tc'], test['pg']))
self.assertEqual(
update_and_verify_qos_map(
self.client, qos_map_id,
SAI_QOS_MAP_TYPE_TC_TO_PRIORITY_GROUP, test['tc'],
test['pg']), True,
"Failed verify updated qos_map attribute")
print("\tok")
i += 1
finally:
sai_thrift_remove_qos_map(self.client, qos_map_id)