1010import sai_base_test
1111import operator
1212import sys
13+ import math
1314from ptf .testutils import (ptf_ports ,
1415 simple_arp_packet ,
1516 send_packet ,
@@ -857,10 +858,24 @@ def setUp(self):
857858 self .pgs_num = self .test_params ['pgs_num' ]
858859 self .asic_type = self .test_params ['sonic_asic_type' ]
859860 self .pkts_num_leak_out = self .test_params ['pkts_num_leak_out' ]
860- self .pkts_num_trig_pfc = self .test_params ['pkts_num_trig_pfc' ]
861+ self .pkts_num_trig_pfc = self .test_params .get ('pkts_num_trig_pfc' )
862+ if not self .pkts_num_trig_pfc :
863+ self .pkts_num_trig_pfc_shp = self .test_params .get ('pkts_num_trig_pfc_shp' )
861864 self .pkts_num_hdrm_full = self .test_params ['pkts_num_hdrm_full' ]
862865 self .pkts_num_hdrm_partial = self .test_params ['pkts_num_hdrm_partial' ]
863- print >> sys .stderr , ("pkts num: leak_out: %d, trig_pfc: %d, hdrm_full: %d, hdrm_partial: %d" % (self .pkts_num_leak_out , self .pkts_num_trig_pfc , self .pkts_num_hdrm_full , self .pkts_num_hdrm_partial ))
866+ packet_size = self .test_params .get ('packet_size' )
867+ if packet_size :
868+ self .pkt_size = packet_size
869+ cell_size = self .test_params .get ('cell_size' )
870+ self .pkt_size_factor = int (math .ceil (float (packet_size )/ cell_size ))
871+ else :
872+ self .pkt_size = 64
873+ self .pkt_size_factor = 1
874+
875+ if self .pkts_num_trig_pfc :
876+ print >> sys .stderr , ("pkts num: leak_out: %d, trig_pfc: %d, hdrm_full: %d, hdrm_partial: %d, pkt_size %d" % (self .pkts_num_leak_out , self .pkts_num_trig_pfc , self .pkts_num_hdrm_full , self .pkts_num_hdrm_partial , self .pkt_size ))
877+ elif self .pkts_num_trig_pfc_shp :
878+ print >> sys .stderr , ("pkts num: leak_out: {}, trig_pfc: {}, hdrm_full: {}, hdrm_partial: {}, pkt_size {}" .format (self .pkts_num_leak_out , self .pkts_num_trig_pfc_shp , self .pkts_num_hdrm_full , self .pkts_num_hdrm_partial , self .pkt_size ))
864879 sys .stderr .flush ()
865880
866881 self .dst_port_mac = self .dataplane .get_mac (0 , self .dst_port_id )
@@ -894,7 +909,9 @@ def tearDown(self):
894909 sai_base_test .ThriftInterfaceDataPlane .tearDown (self )
895910
896911 def runTest (self ):
897- margin = 0
912+ margin = self .test_params .get ('margin' )
913+ if not margin :
914+ margin = 0
898915 sidx_dscp_pg_tuples = [(sidx , dscp , self .pgs [pgidx ]) for sidx , sid in enumerate (self .src_port_ids ) for pgidx , dscp in enumerate (self .dscps )]
899916 assert (len (sidx_dscp_pg_tuples ) >= self .pgs_num )
900917 print >> sys .stderr , sidx_dscp_pg_tuples
@@ -911,7 +928,7 @@ def runTest(self):
911928 try :
912929 # send packets to leak out
913930 sidx = 0
914- pkt = simple_tcp_packet (pktlen = 64 ,
931+ pkt = simple_tcp_packet (pktlen = self . pkt_size ,
915932 eth_dst = self .router_mac if self .router_mac != '' else self .dst_port_mac ,
916933 eth_src = self .src_port_macs [sidx ],
917934 ip_src = self .src_port_ips [sidx ],
@@ -926,15 +943,19 @@ def runTest(self):
926943 tos = sidx_dscp_pg_tuples [i ][1 ] << 2
927944 tos |= self .ecn
928945 ttl = 64
929- default_packet_length = 64
946+ default_packet_length = self . pkt_size
930947 pkt = simple_tcp_packet (pktlen = default_packet_length ,
931948 eth_dst = self .router_mac if self .router_mac != '' else self .dst_port_mac ,
932949 eth_src = self .src_port_macs [sidx_dscp_pg_tuples [i ][0 ]],
933950 ip_src = self .src_port_ips [sidx_dscp_pg_tuples [i ][0 ]],
934951 ip_dst = self .dst_port_ip ,
935952 ip_tos = tos ,
936953 ip_ttl = ttl )
937- send_packet (self , self .src_port_ids [sidx_dscp_pg_tuples [i ][0 ]], pkt , self .pkts_num_trig_pfc )
954+ if self .pkts_num_trig_pfc :
955+ pkts_num_trig_pfc = self .pkts_num_trig_pfc
956+ else :
957+ pkts_num_trig_pfc = self .pkts_num_trig_pfc_shp [i ]
958+ send_packet (self , self .src_port_ids [sidx_dscp_pg_tuples [i ][0 ]], pkt , pkts_num_trig_pfc / self .pkt_size_factor )
938959
939960 print >> sys .stderr , "Service pool almost filled"
940961 sys .stderr .flush ()
@@ -946,7 +967,7 @@ def runTest(self):
946967 tos = sidx_dscp_pg_tuples [i ][1 ] << 2
947968 tos |= self .ecn
948969 ttl = 64
949- default_packet_length = 64
970+ default_packet_length = self . pkt_size
950971 pkt = simple_tcp_packet (pktlen = default_packet_length ,
951972 eth_dst = self .router_mac if self .router_mac != '' else self .dst_port_mac ,
952973 eth_src = self .src_port_macs [sidx_dscp_pg_tuples [i ][0 ]],
@@ -982,7 +1003,7 @@ def runTest(self):
9821003 tos = sidx_dscp_pg_tuples [i ][1 ] << 2
9831004 tos |= self .ecn
9841005 ttl = 64
985- default_packet_length = 64
1006+ default_packet_length = self . pkt_size
9861007 pkt = simple_tcp_packet (pktlen = default_packet_length ,
9871008 eth_dst = self .router_mac if self .router_mac != '' else self .dst_port_mac ,
9881009 eth_src = self .src_port_macs [sidx_dscp_pg_tuples [i ][0 ]],
@@ -991,7 +1012,7 @@ def runTest(self):
9911012 ip_tos = tos ,
9921013 ip_ttl = ttl )
9931014
994- send_packet (self , self .src_port_ids [sidx_dscp_pg_tuples [i ][0 ]], pkt , self .pkts_num_hdrm_full if i != self .pgs_num - 1 else self .pkts_num_hdrm_partial )
1015+ send_packet (self , self .src_port_ids [sidx_dscp_pg_tuples [i ][0 ]], pkt , self .pkts_num_hdrm_full / self . pkt_size_factor if i != self .pgs_num - 1 else self .pkts_num_hdrm_partial / self . pkt_size_factor )
9951016 # allow enough time for the dut to sync up the counter values in counters_db
9961017 time .sleep (8 )
9971018
0 commit comments