- def modify_tap_interface(node, if_index, tap_name, mac=None):
- """Modify tap interface like linux interface name or VPP MAC.
-
- :param node: Node to modify tap on.
- :param if_index: Index of tap interface to be modified.
- :param tap_name: Tap interface name for linux tap.
- :param mac: Optional MAC address for VPP tap.
- :type node: dict
- :type if_index: int
- :type tap_name: str
- :type mac: str
- :returns: Returns a interface index.
- :rtype: int
- """
- command = 'modify'
- if mac is not None:
- args = 'sw_if_index {} tapname {} mac {}'.format(
- if_index, tap_name, mac)
- else:
- args = 'sw_if_index {} tapname {}'.format(if_index, tap_name)
- with VatTerminal(node) as vat:
- resp = vat.vat_terminal_exec_cmd_from_template('tap.vat',
- tap_command=command,
- tap_arguments=args)
- if_key = Topology.get_interface_by_sw_index(node, if_index)
- Topology.update_interface_tap_dev_name(node, if_key, tap_name)
- if mac:
- Topology.update_interface_mac_address(node, if_key, mac)
-
- return resp[0]['sw_if_index']
-
- @staticmethod
- def delete_tap_interface(node, if_index):
- """Delete tap interface.
-
- :param node: Node to delete tap on.
- :param if_index: Index of tap interface to be deleted.
- :type node: dict
- :type if_index: int
- :raises RuntimeError: Deletion was not successful.
- """
- command = 'delete'
- args = 'sw_if_index {}'.format(if_index)
- with VatTerminal(node) as vat:
- resp = vat.vat_terminal_exec_cmd_from_template('tap.vat',
- tap_command=command,
- tap_arguments=args)
- if int(resp[0]['retval']) != 0:
- raise RuntimeError(
- 'Could not remove tap interface: {}'.format(resp))
- if_key = Topology.get_interface_sw_index(node, if_index)
- Topology.remove_port(node, if_key)
-
- @staticmethod
- def check_tap_present(node, tap_name):
- """Check whether specific tap interface exists.