def cos_counters_checking(value=None): queue_dict_list = asicapi.get_counters(vars.D1) for queue_dict in queue_dict_list: if (queue_dict['key'] == 'WRED_PKT_GRE.'): if int(queue_dict['value'].replace(",", "")) == 0: st.error("{} queue_traffic_failed".format(value)) return False return True
def get_counter_cpu(dut, queue, value='diff'): cli_out = asicapi.get_counters(dut) queue = 'PERQ_PKT(' + queue + ').cpu0' fil_out = filter_and_select(cli_out, [value], {"key": queue}) if not fil_out: st.error('queue: {} not found in output: {}'.format(queue, cli_out)) return False else: fil_out = fil_out[0] fil_out[value] = re.sub(r"\+", "", fil_out[value]) return fil_out[value]
def verify_counter_cpu_asic_bcm(dut, queue, value, tol): queue_mc = queue nooftimes = 3 queue = 'PERQ_PKT(' + queue + ').cpu0' queue_mc = 'MC_PERQ_PKT(' + queue_mc + ').cpu0' for itercountvar in range(nooftimes): if itercountvar != 0: st.wait(5) cli_out = asicapi.get_counters(dut) fil_out = filter_and_select(cli_out, ["time"], {"key": queue}) if not fil_out: fil_out = filter_and_select(cli_out, ["time"], {"key": queue_mc}) if not fil_out: st.error('queue: {} not found in output: {}'.format( queue, cli_out)) if itercountvar < (nooftimes - 1): continue return False else: if not fil_out[0]['time']: st.error('queue: {} value is null in the output: {}'.format( queue, fil_out)) if itercountvar < (nooftimes - 1): asicapi.clear_counters(dut) continue return False fil_out = fil_out[0] if not fil_out['time']: st.error('queue: {} value is null in the output: {}'.format( queue, cli_out)) if itercountvar < (nooftimes - 1): continue return False fil_out['time'] = re.sub(r'|'.join((',', '/s')), "", fil_out['time']) ob_value = int(fil_out['time']) start_value = int(value) - int(tol) end_value = int(value) + int(tol) if ob_value >= start_value and ob_value <= end_value: st.log('obtained value {} for queue: {} is in the range b/w ' '{} and {}'.format(ob_value, queue, start_value, end_value)) return True else: st.error('obtained value {} for queue: {} is NOT in the range b/w ' '{} and {}'.format(ob_value, queue, start_value, end_value)) if itercountvar < (nooftimes - 1): asicapi.clear_counters(dut) continue return False
def get_show_c_cpuq_counter(dut,queue): """ Author: Gangadhara Sahu ([email protected]) API to return CPU queue counters from show c :param dut: :param queue: <0-31> :return: Example : get_show_c_cpuq_counter(dut1) get_show_c_cpuq_counter(dut1,queue="0") """ queue_mc = queue nooftimes = 3 queue = 'PERQ_PKT(' + queue + ').cpu0' queue_mc = 'MC_PERQ_PKT(' + queue_mc + ').cpu0' for itercountvar in range(nooftimes): if itercountvar != 0: st.wait(5) cli_out = asicapi.get_counters(dut) fil_out = filter_and_select(cli_out, ["value"], {"key": queue}) if not fil_out: fil_out = filter_and_select(cli_out, ["value"], {"key": queue_mc}) if not fil_out: st.error('queue: {} not found in output: {}'.format(queue, cli_out)) if itercountvar < (nooftimes - 1): continue return False else: if not fil_out[0]['value']: st.error('queue: {} value is null in the output: {}'.format(queue, fil_out)) if itercountvar < (nooftimes - 1): asicapi.clear_counters(dut) continue return False fil_out = fil_out[0] if not fil_out['value']: st.error('queue: {} value is null in the output: {}'.format(queue, cli_out)) if itercountvar < (nooftimes - 1): continue return False fil_out['value'] = re.sub(r'|'.join((',', '/s')), "", fil_out['value']) return int(fil_out['value']) return False
def sched_verify_queue_rate_ratio_dwrr(q_priority_1, percent_1, q_priority_2, percent_2): num_of_iterations = 5 bcm_ce = scheduling_data.pmap_details[vars.D1D2P1] try: for i in range(0, num_of_iterations): st.banner("Iteration: {}".format(i)) asicapi.clear_counters(vars.D1) asicapi.dump_counters(vars.D1, bcm_ce) st.wait(5, "Wait till rate interval") output = asicapi.get_counters(vars.D1, bcm_ce) cntr_uc_perq_byte_1 = "UC_PERQ_BYTE({}).{}".format( q_priority_1, bcm_ce) cntr_uc_perq_byte_2 = "UC_PERQ_BYTE({}).{}".format( q_priority_2, bcm_ce) st.debug("cntr_uc_perq_byte_1 = {}".format(cntr_uc_perq_byte_1)) st.debug("cntr_uc_perq_byte_2 = {}".format(cntr_uc_perq_byte_2)) queue_tx_rate_1 = filter_and_select(output, ['time'], {'key': cntr_uc_perq_byte_1}) queue_tx_rate_2 = filter_and_select(output, ['time'], {'key': cntr_uc_perq_byte_2}) if not (queue_tx_rate_1 and queue_tx_rate_1[0]['time'] and queue_tx_rate_2 and queue_tx_rate_2[0]['time']): st.debug('Actual Queue rate for Queue-{}: {}'.format( q_priority_1, queue_tx_rate_1)) st.debug('Actual Queue rate for Queue-{}: {}'.format( q_priority_2, queue_tx_rate_2)) st.debug('Output is: {}'.format(output)) st.debug("bcm_ce: {}".format(bcm_ce)) continue queue_tx_rate_1 = int(queue_tx_rate_1[0]['time'].replace( ',', '').replace('/s', '')) queue_tx_rate_2 = int(queue_tx_rate_2[0]['time'].replace( ',', '').replace('/s', '')) st.debug("Queue-{} rate:{}".format(q_priority_1, queue_tx_rate_1)) st.debug("Queue-{} rate:{}".format(q_priority_2, queue_tx_rate_2)) result_1 = False result_2 = False if not (queue_tx_rate_1 and queue_tx_rate_2): continue actual_ratio_1 = int( (queue_tx_rate_1 * 100) / (queue_tx_rate_1 + queue_tx_rate_2)) actual_ratio_2 = int( (queue_tx_rate_2 * 100) / (queue_tx_rate_1 + queue_tx_rate_2)) diff_rate_1 = abs(actual_ratio_1 - percent_1) diff_rate_2 = abs(actual_ratio_2 - percent_2) st.debug("The actual ratio of Queue: {} is {}".format( q_priority_1, actual_ratio_1)) st.debug("The actual ratio of Queue: {} is {}".format( q_priority_2, actual_ratio_2)) st.debug("The given ratio of Queue: {} is {}".format( q_priority_1, percent_1)) st.debug("The given ratio of Queue: {} is {}".format( q_priority_2, percent_2)) st.debug("diff_1:{}".format(diff_rate_1)) st.debug("diff_2:{}".format(diff_rate_2)) if diff_rate_1 <= scheduling_data.rate_tolerance: result_1 = True if diff_rate_2 <= scheduling_data.rate_tolerance: result_2 = True if result_1 and result_2: return True return False except Exception as e: st.error('Exception occurred is: {}'.format(e)) return False