Note: A single interface may have multiple IP addresses assigned.
:rtype: list
"""
- sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+
+ try:
+ sw_if_index = Topology.convert_interface_reference(
+ node, interface, "sw_if_index")
+ except RuntimeError:
+ if isinstance(interface, basestring):
+ sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+ else:
+ raise
with VatTerminal(node) as vat:
response = vat.vat_terminal_exec_cmd_from_template(
ssh = SSH()
ssh.connect(node)
- cmd = 'lspci -vmmks {0}'.format(pci_addr)
-
- (ret_code, stdout, _) = ssh.exec_command(cmd)
- if int(ret_code) != 0:
- raise RuntimeError("'{0}' failed on '{1}'"
- .format(cmd, node['host']))
+ for i in range(3):
+ logger.trace('Try {}: Get interface driver'.format(i))
+ cmd = 'sh -c "echo 1 > /sys/bus/pci/rescan"'
+ (ret_code, _, _) = ssh.exec_command_sudo(cmd)
+ if int(ret_code) != 0:
+ raise RuntimeError("'{0}' failed on '{1}'"
+ .format(cmd, node['host']))
- for line in stdout.splitlines():
- if len(line) == 0:
- continue
- (name, value) = line.split("\t", 1)
- if name == 'Driver:':
- return value
+ cmd = 'lspci -vmmks {0}'.format(pci_addr)
+ (ret_code, stdout, _) = ssh.exec_command(cmd)
+ if int(ret_code) != 0:
+ raise RuntimeError("'{0}' failed on '{1}'"
+ .format(cmd, node['host']))
- return None
+ for line in stdout.splitlines():
+ if len(line) == 0:
+ continue
+ try:
+ (name, value) = line.split("\t", 1)
+ except ValueError:
+ if name != "Driver:":
+ pass
+ else:
+ return None
+ if name == 'Driver:':
+ return value if value else None
+ else:
+ raise RuntimeError('Get interface driver for: {0}'
+ .format(pci_addr))
@staticmethod
def tg_set_interfaces_udev_rules(node):
sw_if_index=sw_if_index)
return data[0]
+ @staticmethod
+ def get_interface_vrf_table(node, interface):
+ """Get vrf ID for the given interface.
+
+ :param node: VPP node.
+ :param interface: Name or sw_if_index of a specific interface.
+ :type node: dict
+ :type interface: str or int
+ :returns: vrf ID of the specified interface.
+ :rtype: int
+ """
+
+ if isinstance(interface, basestring):
+ sw_if_index = InterfaceUtil.get_sw_if_index(node, interface)
+ else:
+ sw_if_index = interface
+
+ with VatTerminal(node) as vat:
+ data = vat.vat_terminal_exec_cmd_from_template(
+ "interface_vrf_dump.vat",
+ sw_if_index=sw_if_index)
+ return data[0]["vrf_id"]
+
@staticmethod
def get_sw_if_index(node, interface_name):
"""Get sw_if_index for the given interface from actual interface dump.
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,
- ipv6=ipv6)
+ ret = vat.vat_terminal_exec_cmd_from_template(
+ "set_fib_to_interface.vat",
+ sw_index=sw_if_index, vrf=table_id, ipv6=ipv6)
+
+ if ret[0]["retval"] != 0:
+ raise RuntimeError('Unable to assign interface to FIB node {}.'
+ .format(node))
+
@staticmethod
def set_linux_interface_mac(node, interface, mac, namespace=None):