#include static perfmon_intel_pmc_cpu_model_t cpu_model_table[] = { {0x4F, 0x00, 0}, }; static perfmon_intel_pmc_event_t event_table[] = { { .event_code = {0x00}, .umask = 0x01, .event_name = "inst_retired.any", }, { .event_code = {0x00}, .umask = 0x02, .event_name = "cpu_clk_unhalted.thread", }, { .event_code = {0x00}, .umask = 0x02, .event_name = "cpu_clk_unhalted.thread_any", }, { .event_code = {0x00}, .umask = 0x03, .event_name = "cpu_clk_unhalted.ref_tsc", }, { .event_code = {0x03}, .umask = 0x02, .event_name = "ld_blocks.store_forward", }, { .event_code = {0x03}, .umask = 0x08, .event_name = "ld_blocks.no_sr", }, { .event_code = {0x05}, .umask = 0x01, .event_name = "misalign_mem_ref.loads", }, { .event_code = {0x05}, .umask = 0x02, .event_name = "misalign_mem_ref.stores", }, { .event_code = {0x07}, .umask = 0x01, .event_name = "ld_blocks_partial.address_alias", }, { .event_code = {0x08}, .umask = 0x01, .event_name = "dtlb_load_misses.miss_causes_a_walk", }, { .event_code = {0x08}, .umask = 0x02, .event_name = "dtlb_load_misses.walk_completed_4k", }, { .event_code = {0x08}, .umask = 0x04, .event_name = "dtlb_load_misses.walk_completed_2m_4m", }, { .event_code = {0x08}, .umask = 0x08, .event_name = "dtlb_load_misses.walk_completed_1g", }, { .event_code = {0x08}, .umask = 0x0e, .event_name = "dtlb_load_misses.walk_completed", }, { .event_code = {0x08}, .umask = 0x10, .event_name = "dtlb_load_misses.walk_duration", }, { .event_code = {0x08}, .umask = 0x20, .event_name = "dtlb_load_misses.stlb_hit_4k", }, { .event_code = {0x08}, .umask = 0x40, .event_name = "dtlb_load_misses.stlb_hit_2m", }, { .event_code = {0x08}, .umask = 0x60, .event_name = "dtlb_load_misses.stlb_hit", }, { .event_code = {0x0D}, .umask = 0x03, .event_name = "int_misc.recovery_cycles", }, { .event_code = {0x0D}, .umask = 0x03, .event_name = "int_misc.recovery_cycles_any", }, { .event_code = {0x0D}, .umask = 0x08, .event_name = "int_misc.rat_stall_cycles", }, { .event_code = {0x0E}, .umask = 0x01, .event_name = "uops_issued.any", }, { .event_code = {0x0E}, .umask = 0x01, .event_name = "uops_issued.stall_cycles", }, { .event_code = {0x0E}, .umask = 0x10, .event_name = "uops_issued.flags_merge", }, { .event_code = {0x0E}, .umask = 0x20, .event_name = "uops_issued.slow_lea", }, { .event_code = {0x0E}, .umask = 0x40, .event_name = "uops_issued.single_mul", }, { .event_code = {0x14}, .umask = 0x01, .event_name = "arith.fpu_div_active", }, { .event_code = {0x24}, .umask = 0x21, .event_name = "l2_rqsts.demand_data_rd_miss", }, { .event_code = {0x24}, .umask = 0x22, .event_name = "l2_rqsts.rfo_miss", }, { .event_code = {0x24}, .umask = 0x24, .event_name = "l2_rqsts.code_rd_miss", }, { .event_code = {0x24}, .umask = 0x27, .event_name = "l2_rqsts.all_demand_miss", }, { .event_code = {0x24}, .umask = 0x30, .event_name = "l2_rqsts.l2_pf_miss", }, { .event_code = {0x24}, .umask = 0x3F, .event_name = "l2_rqsts.miss", }, { .event_code = {0x24}, .umask = 0xc1, .event_name = "l2_rqsts.demand_data_rd_hit", }, { .event_code = {0x24}, .umask = 0xc2, .event_name = "l2_rqsts.rfo_hit", }, { .event_code = {0x24}, .umask = 0xc4, .event_name = "l2_rqsts.code_rd_hit", }, { .event_code = {0x24}, .umask = 0xd0, .event_name = "l2_rqsts.l2_pf_hit", }, { .event_code = {0x24}, .umask = 0xE1, .event_name = "l2_rqsts.all_demand_data_rd", }, { .event_code = {0x24}, .umask = 0xE2, .event_name = "l2_rqsts.all_rfo", }, { .event_code = {0x24}, .umask = 0xE4, .event_name = "l2_rqsts.all_code_rd", }, { .event_code = {0x24}, .umask = 0xe7, .event_name = "l2_rqsts.all_demand_references", }, { .event_code = {0x24}, .umask = 0xF8, .event_name = "l2_rqsts.all_pf", }, { .event_code = {0x24}, .umask = 0xFF, .event_name = "l2_rqsts.references", }, { .event_code = {0x27}, .umask = 0x50, .event_name = "l2_demand_rqsts.wb_hit", }, { .event_code = {0x2E}, .umask = 0x41, .event_name = "longest_lat_cache.miss", }, { .event_code = {0x2E}, .umask = 0x4F, .event_name = "longest_lat_cache.reference", }, { .event_code = {0x3C}, .umask = 0x00, .event_name = "cpu_clk_unhalted.thread_p", }, { .event_code = {0x3C}, .umask = 0x00, .event_name = "cpu_clk_unhalted.thread_p_any", }, { .event_code = {0x3C}, .umask = 0x01, .event_name = "cpu_clk_thread_unhalted.ref_xclk", }, { .event_code = {0x3C}, .umask = 0x01, .event_name = "cpu_clk_thread_unhalted.ref_xclk_any", }, { .event_code = {0x3c}, .umask = 0x02, .event_name = "cpu_clk_thread_unhalted.one_thread_active", }, { .event_code = {0x48}, .umask = 0x01, .event_name = "l1d_pend_miss.pending", }, { .event_code = {0x48}, .umask = 0x01, .event_name = "l1d_pend_miss.pending_cycles", }, { .event_code = {0x49}, .umask = 0x01, .event_name = "dtlb_store_misses.miss_causes_a_walk", }, { .event_code = {0x49}, .umask = 0x02, .event_name = "dtlb_store_misses.walk_completed_4k", }, { .event_code = {0x49}, .umask = 0x04, .event_name = "dtlb_store_misses.walk_completed_2m_4m", }, { .event_code = {0x49}, .umask = 0x08, .event_name = "dtlb_store_misses.walk_completed_1g", }, { .event_code = {0x49}, .umask = 0x0e, .event_name = "dtlb_store_misses.walk_completed", }, { .event_code = {0x49}, .umask = 0x10, .event_name = "dtlb_store_misses.walk_duration", }, { .event_code = {0x49}, .umask = 0x20, .event_name = "dtlb_store_misses.stlb_hit_4k", }, { .event_code = {0x49}, .umask = 0x40, .event_name = "dtlb_store_misses.stlb_hit_2m", }, { .event_code = {0x49}, .umask = 0x60, .event_name = "dtlb_store_misses.stlb_hit", }, { .event_code = {0x4c}, .umask = 0x01, .event_name = "load_hit_pre.sw_pf", }, { .event_code = {0x4C}, .umask = 0x02, .event_name = "load_hit_pre.hw_pf", }, { .event_code = {0x4F}, .umask = 0x10, .event_name = "ept.walk_cycles", }, { .event_code = {0x51}, .umask = 0x01, .event_name = "l1d.replacement", }, { .event_code = {0x54}, .umask = 0x01, .event_name = "tx_mem.abort_conflict", }, { .event_code = {0x54}, .umask = 0x02, .event_name = "tx_mem.abort_capacity_write", }, { .event_code = {0x54}, .umask = 0x04, .event_name = "tx_mem.abort_hle_store_to_elided_lock", }, { .event_code = {0x54}, .umask = 0x08, .event_name = "tx_mem.abort_hle_elision_buffer_not_empty", }, { .event_code = {0x54}, .umask = 0x10, .event_name = "tx_mem.abort_hle_elision_buffer_mismatch", }, { .event_code = {0x54}, .umask = 0x20, .event_name = "tx_mem.abort_hle_elision_buffer_unsupported_alignment", }, { .event_code = {0x54}, .umask = 0x40, .event_name = "tx_mem.hle_elision_buffer_full", }, { .event_code = {0x58}, .umask = 0x01, .event_name = "move_elimination.int_eliminated", }, { .event_code = {0x58}, .umask = 0x02, .event_name = "move_elimination.simd_eliminated", }, { .event_code = {0x58}, .umask = 0x04, .event_name = "move_elimination.int_not_eliminated", }, { .event_code = {0x58}, .umask = 0x08, .event_name = "move_elimination.simd_not_eliminated", }, { .event_code = {0x5C}, .umask = 0x01, .event_name = "cpl_cycles.ring0", }, { .event_code = {0x5C}, .umask = 0x01, .event_name = "cpl_cycles.ring0_trans", }, { .event_code = {0x5C}, .umask = 0x02, .event_name = "cpl_cycles.ring123", }, { .event_code = {0x5d}, .umask = 0x01, .event_name = "tx_exec.misc1", }, { .event_code = {0x5d}, .umask = 0x02, .event_name = "tx_exec.misc2", }, { .event_code = {0x5d}, .umask = 0x04, .event_name = "tx_exec.misc3", }, { .event_code = {0x5d}, .umask = 0x08, .event_name = "tx_exec.misc4", }, { .event_code = {0x5d}, .umask = 0x10, .event_name = "tx_exec.misc5", }, { .event_code = {0x5E}, .umask = 0x01, .event_name = "rs_events.empty_cycles", }, { .event_code = {0x5E}, .umask = 0x01, .event_name = "rs_events.empty_end", }, { .event_code = {0x60}, .umask = 0x01, .event_name = "offcore_requests_outstanding.demand_data_rd", }, { .event_code = {0x60}, .umask = 0x01, .event_name = "offcore_requests_outstanding.cycles_with_demand_data_rd", }, { .event_code = {0x60}, .umask = 0x02, .event_name = "offcore_requests_outstanding.demand_code_rd", }, { .event_code = {0x60}, .umask = 0x04, .event_name = "offcore_requests_outstanding.demand_rfo", }, { .event_code = {0x60}, .umask = 0x04, .event_name = "offcore_requests_outstanding.cycles_with_demand_rfo", }, { .event_code = {0x60}, .umask = 0x08, .event_name = "offcore_requests_outstanding.all_data_rd", }, { .event_code = {0x60}, .umask = 0x08, .event_name = "offcore_requests_outstanding.cycles_with_data_rd", }, { .event_code = {0x63}, .umask = 0x01, .event_name = "lock_cycles.split_lock_uc_lock_duration", }, { .event_code = {0x63}, .umask = 0x02, .event_name = "lock_cycles.cache_lock_duration", }, { .event_code = {0x79}, .umask = 0x02, .event_name = "idq.empty", }, { .event_code = {0x79}, .umask = 0x04, .event_name = "idq.mite_uops", }, { .event_code = {0x79}, .umask = 0x04, .event_name = "idq.mite_cycles", }, { .event_code = {0x79}, .umask = 0x08, .event_name = "idq.dsb_uops", }, { .event_code = {0x79}, .umask = 0x08, .event_name = "idq.dsb_cycles", }, { .event_code = {0x79}, .umask = 0x10, .event_name = "idq.ms_dsb_uops", }, { .event_code = {0x79}, .umask = 0x10, .event_name = "idq.ms_dsb_cycles", }, { .event_code = {0x79}, .umask = 0x10, .event_name = "idq.ms_dsb_occur", }, { .event_code = {0x79}, .umask = 0x18, .event_name = "idq.all_dsb_cycles_4_uops", }, { .event_code = {0x79}, .umask = 0x18, .event_name = "idq.all_dsb_cycles_any_uops", }, { .event_code = {0x79}, .umask = 0x20, .event_name = "idq.ms_mite_uops", }, { .event_code = {0x79}, .umask = 0x24, .event_name = "idq.all_mite_cycles_4_uops", }, { .event_code = {0x79}, .umask = 0x24, .event_name = "idq.all_mite_cycles_any_uops", }, { .event_code = {0x79}, .umask = 0x30, .event_name = "idq.ms_uops", }, { .event_code = {0x79}, .umask = 0x30, .event_name = "idq.ms_cycles", }, { .event_code = {0x79}, .umask = 0x30, .event_name = "idq.ms_switches", }, { .event_code = {0x79}, .umask = 0x3C, .event_name = "idq.mite_all_uops", }, { .event_code = {0x80}, .umask = 0x01, .event_name = "icache.hit", }, { .event_code = {0x80}, .umask = 0x02, .event_name = "icache.misses", }, { .event_code = {0x80}, .umask = 0x04, .event_name = "icache.ifdata_stall", }, { .event_code = {0x85}, .umask = 0x01, .event_name = "itlb_misses.miss_causes_a_walk", }, { .event_code = {0x85}, .umask = 0x02, .event_name = "itlb_misses.walk_completed_4k", }, { .event_code = {0x85}, .umask = 0x04, .event_name = "itlb_misses.walk_completed_2m_4m", }, { .event_code = {0x85}, .umask = 0x08, .event_name = "itlb_misses.walk_completed_1g", }, { .event_code = {0x85}, .umask = 0x0e, .event_name = "itlb_misses.walk_completed", }, { .event_code = {0x85}, .umask = 0x10, .event_name = "itlb_misses.walk_duration", }, { .event_code = {0x85}, .umask = 0x20, .event_name = "itlb_misses.stlb_hit_4k", }, { .event_code = {0x85}, .umask = 0x40, .event_name = "itlb_misses.stlb_hit_2m", }, { .event_code = {0x85}, .umask = 0x60, .event_name = "itlb_misses.stlb_hit", }, { .event_code = {0x87}, .umask = 0x01, .event_name = "ild_stall.lcp", }, { .event_code = {0x88}, .umask = 0x41, .event_name = "br_inst_exec.nontaken_conditional", }, { .event_code = {0x88}, .umask = 0x81, .event_name = "br_inst_exec.taken_conditional", }, { .event_code = {0x88}, .umask = 0x82, .event_name = "br_inst_exec.taken_direct_jump", }, { .event_code = {0x88}, .umask = 0x84, .event_name = "br_inst_exec.taken_indirect_jump_non_call_ret", }, { .event_code = {0x88}, .umask = 0x88, .event_name = "br_inst_exec.taken_indirect_near_return", }, { .event_code = {0x88}, .umask = 0x90, .event_name = "br_inst_exec.taken_direct_near_call", }, { .event_code = {0x88}, .umask = 0xA0, .event_name = "br_inst_exec.taken_indirect_near_call", }, { .event_code = {0x88}, .umask = 0xC1, .event_name = "br_inst_exec.all_conditional", }, { .event_code = {0x88}, .umask = 0xC2, .event_name = "br_inst_exec.all_direct_jmp", }, { .event_code = {0x88}, .umask = 0xC4, .event_name = "br_inst_exec.all_indirect_jump_non_call_ret", }, { .event_code = {0x88}, .umask = 0xC8, .event_name = "br_inst_exec.all_indirect_near_return", }, { .event_code = {0x88}, .umask = 0xD0, .event_name = "br_inst_exec.all_direct_near_call", }, { .event_code = {0x88}, .umask = 0xFF, .event_name = "br_inst_exec.all_branches", }, { .event_code = {0x89}, .umask = 0x41, .event_name = "br_misp_exec.nontaken_conditional", }, { .event_code = {0x89}, .umask = 0x81, .event_name = "br_misp_exec.taken_conditional", }, { .event_code = {0x89}, .umask = 0x84, .event_name = "br_misp_exec.taken_indirect_jump_non_call_ret", }, { .event_code = {0x89}, .umask = 0x88, .event_name = "br_misp_exec.taken_return_near", }, { .event_code = {0x89}, .umask = 0xA0, .event_name = "br_misp_exec.taken_indirect_near_call", }, { .event_code = {0x89}, .umask = 0xC1, .event_name = "br_misp_exec.all_conditional", }, { .event_code = {0x89}, .umask = 0xC4, .event_name = "br_misp_exec.all_indirect_jump_non_call_ret", }, { .event_code = {0x89}, .umask = 0xFF, .event_name = "br_misp_exec.all_branches", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.core", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.cycles_0_uops_deliv.core", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.cycles_le_1_uop_deliv.core", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.cycles_le_2_uop_deliv.core", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.cycles_le_3_uop_deliv.core", }, { .event_code = {0x9C}, .umask = 0x01, .event_name = "idq_uops_not_delivered.cycles_fe_was_ok", }, { .event_code = {0xA1}, .umask = 0x01, .event_name = "uops_dispatched_port.port_0", }, { .event_code = {0xA1}, .umask = 0x01, .event_name = "uops_executed_port.port_0_core", }, { .event_code = {0xA1}, .umask = 0x01, .event_name = "uops_executed_port.port_0", }, { .event_code = {0xA1}, .umask = 0x02, .event_name = "uops_dispatched_port.port_1", }, { .event_code = {0xA1}, .umask = 0x02, .event_name = "uops_executed_port.port_1_core", }, { .event_code = {0xA1}, .umask = 0x02, .event_name = "uops_executed_port.port_1", }, { .event_code = {0xA1}, .umask = 0x04, .event_name = "uops_dispatched_port.port_2", }, { .event_code = {0xA1}, .umask = 0x04, .event_name = "uops_executed_port.port_2_core", }, { .event_code = {0xA1}, .umask = 0x04, .event_name = "uops_executed_port.port_2", }, { .event_code = {0xA1}, .umask = 0x08, .event_name = "uops_dispatched_port.port_3", }, { .event_code = {0xA1}, .umask = 0x08, .event_name = "uops_executed_port.port_3_core", }, { .event_code = {0xA1}, .umask = 0x08, .event_name = "uops_executed_port.port_3", }, { .event_code = {0xA1}, .umask = 0x10, .event_name = "uops_dispatched_port.port_4", }, { .event_code = {0xA1}, .umask = 0x10, .event_name = "uops_executed_port.port_4_core", }, { .event_code = {0xA1}, .umask = 0x10, .event_name = "uops_executed_port.port_4", }, { .event_code = {0xA1}, .umask = 0x20, .event_name = "uops_dispatched_port.port_5", }, { .event_code = {0xA1}, .umask = 0x20, .event_name = "uops_executed_port.port_5_core", }, { .event_code = {0xA1}, .umask = 0x20, .event_name = "uops_executed_port.port_5", }, { .event_code = {0xA1}, .umask = 0x40, .event_name = "uops_dispatched_port.port_6", }, { .event_code = {0xA1}, .umask = 0x40, .event_name = "uops_executed_port.port_6_core", }, { .event_code = {0xA1}, .umask = 0x40, .event_name = "uops_executed_port.port_6", }, { .event_code = {0xA1}, .umask = 0x80, .event_name = "uops_dispatched_port.port_7", }, { .event_code = {0xA1}, .umask = 0x80, .event_name = "uops_executed_port.port_7_core", }, { .event_code = {0xA1}, .umask = 0x80, .event_name = "uops_executed_port.port_7", }, { .event_code = {0xa2}, .umask = 0x01, .event_name = "resource_stalls.any", }, { .event_code = {0xA2}, .umask = 0x04, .event_name = "resource_stalls.rs", }, { .event_code = {0xA2}, .umask = 0x08, .event_name = "resource_stalls.sb", }, { .event_code = {0xA2}, .umask = 0x10, .event_name = "resource_stalls.rob", }, { .event_code = {0xA3}, .umask = 0x01, .event_name = "cycle_activity.cycles_l2_pending", }, { .event_code = {0xA3}, .umask = 0x02, .event_name = "cycle_activity.cycles_ldm_pending", }, { .event_code = {0xA3}, .umask = 0x04, .event_name = "cycle_activity.cycles_no_execute", }, { .event_code = {0xA3}, .umask = 0x05, .event_name = "cycle_activity.stalls_l2_pending", }, { .event_code = {0xA3}, .umask = 0x06, .event_name = "cycle_activity.stalls_ldm_pending", }, { .event_code = {0xA3}, .umask = 0x08, .event_name = "cycle_activity.cycles_l1d_pending", }, { .event_code = {0xA3}, .umask = 0x0C, .event_name = "cycle_activity.stalls_l1d_pending", }, { .event_code = {0xA8}, .umask = 0x01, .event_name = "lsd.uops", }, { .event_code = {0xA8}, .umask = 0x01, .event_name = "lsd.cycles_4_uops", }, { .event_code = {0xA8}, .umask = 0x01, .event_name = "lsd.cycles_active", }, { .event_code = {0xAB}, .umask = 0x02, .event_name = "dsb2mite_switches.penalty_cycles"
# Copyright (c) 2016 Cisco and/or its affiliates.
# 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.

"""Implements IPv4 RobotFramework keywords"""

from robot.api import logger as log
from robot.api.deco import keyword

from resources.libraries.python.topology import Topology
from resources.libraries.python.IPv4Setup import get_node
from resources.libraries.python.ssh import exec_cmd


class IPv4Util(object):
    """Implements keywords for IPv4 tests."""

    @staticmethod
    @keyword('From node "${node}" interface "${port}" ARP-ping '
             'IPv4 address "${ip_address}"')
    def arp_ping(node, interface, ip_address):
        log.debug('From node {} interface {} ARP-ping IPv4 address {}'.
                  format(Topology.get_node_hostname(node),
                         interface, ip_address))
        get_node(node).arp_ping(ip_address, interface)

    @staticmethod
    def set_interface_address(node, interface, address, prefix_length):
        """See IPv4Node.set_ip for more information.

        :param node: Node where IP address should be set to.
        :param interface: Interface name.
        :param address: IP address.
        :param prefix_length: Prefix length.
        :type node: dict
        :type interface: str
        :type address: str
        :type prefix_length: int
        """
        log.debug('Node {} interface {} has IPv4 address {} with prefix '
                  'length {}'.format(Topology.get_node_hostname(node),
                                     interface, address, prefix_length))
        get_node(node).set_ip(interface, address, int(prefix_length))

    @staticmethod
    def set_route(node, network, prefix_length, interface, gateway):
        """See IPv4Node.set_route for more information.

        :param node: Node where IP address should be set to.
        :param network: IP network.
        :param prefix_length: Prefix length.
        :param interface: Interface name.
        :param gateway: Gateway.
        :type node: dict
        :type network: str
        :type prefix_length: int
        :type interface: str
        :type gateway: str
        """
        log.debug('Node {} routes to network {} with prefix length {} '
                  'via {} interface {}'.format(Topology.get_node_hostname(node),