Example #1
0
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
Example #2
0
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]
Example #3
0
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
Example #4
0
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