in ptf/saiqosmap.py [0:0]
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")