return dict()
return data
+ @staticmethod
+ def vpp_get_interface_mac(node, interface=None):
+ """Get MAC address for the given interface from actual interface dump.
+
+ :param node: VPP node to get interface data from.
+ :param interface: Numeric index or name string of a specific interface.
+ :type node: dict
+ :type interface: int or str
+ :return: MAC address.
+ :rtype: str
+ """
+
+ if_data = InterfaceUtil.vpp_get_interface_data(node, interface)
+ if if_data['sup_sw_if_index'] != if_data['sw_if_index']:
+ if_data = InterfaceUtil.vpp_get_interface_data(
+ node, if_data['sup_sw_if_index'])
+ mac_data = [str(hex(item))[2:] for item in if_data['l2_address'][:6]]
+ mac_data_nice = []
+ for item in mac_data:
+ if len(item) == 1:
+ item = '0' + item
+ mac_data_nice.append(item)
+ mac = ":".join(mac_data_nice)
+ return mac
+
@staticmethod
def vpp_get_interface_ip_addresses(node, interface, ip_version):
"""Get list of IP addresses from an interface on a VPP node.
if_pci = Topology.get_interface_pci_addr(node, if_key)
ssh.connect(node)
cmd = "cat /sys/bus/pci/devices/{}/numa_node".format(if_pci)
- (ret, out, _) = ssh.exec_command(cmd)
- if ret == 0:
- Topology.set_interface_numa_node(node, if_key, int(out))
+ for _ in range(3):
+ (ret, out, _) = ssh.exec_command(cmd)
+ if ret == 0:
+ try:
+ numa_node = int(out)
+ if numa_node < 0:
+ raise ValueError
+ except ValueError:
+ logger.trace('Reading numa location failed for: {0}'\
+ .format(if_pci))
+ else:
+ Topology.set_interface_numa_node(node, if_key,
+ numa_node)
+ break
+ else:
+ raise RuntimeError('Update numa node failed for: {0}'\
+ .format(if_pci))
@staticmethod
def update_all_interface_data_on_all_nodes(nodes, skip_tg=False,
interface_name=interface)
@staticmethod
- def assign_interface_to_fib_table(node, interface, table_id):
+ def assign_interface_to_fib_table(node, interface, table_id, ipv6=False):
"""Assign VPP interface to specific VRF/FIB table.
:param node: VPP node where the FIB and interface are located.
:param interface: Interface to be assigned to FIB.
:param table_id: VRF table ID.
+ :param ipv6: Assign to IPv6 table. Default False.
:type node: dict
:type interface: str or int
:type table_id: int
+ :type ipv6: bool
"""
if isinstance(interface, basestring):
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
+ ipv6 = 'ipv6' if ipv6 else ''
+
with VatTerminal(node) as vat:
vat.vat_terminal_exec_cmd_from_template("set_fib_to_interface.vat",
sw_index=sw_if_index,
- vrf=table_id)
+ vrf=table_id,
+ ipv6=ipv6)
@staticmethod
def set_linux_interface_mac(node, interface, mac, namespace=None):