def create_memif_interface(node, filename, mid, sid, rxq=1, txq=1, role="SLAVE"): """Create Memif interface on the given node. :param node: Given node to create Memif interface on. :param filename: Memif interface socket filename. :param mid: Memif interface ID. :param sid: Socket ID. :param rxq: Number of RX queues; 0 means do not set. :param txq: Number of TX queues; 0 means do not set. :param role: Memif interface role [master=0|slave=1]. Default is master. :type node: dict :type filename: str :type mid: str :type sid: str :type rxq: int :type txq: int :type role: str :returns: SW interface index. :rtype: int :raises ValueError: If command 'create memif' fails. """ role = getattr(MemifRole, role.upper()).value # Create socket Memif._memif_socket_filename_add_del(node, True, filename, sid) # Create memif sw_if_index = Memif._memif_create(node, mid, sid, rxq=rxq, txq=txq, role=role) # Update Topology if_key = Topology.add_new_port(node, 'memif') Topology.update_interface_sw_if_index(node, if_key, sw_if_index) ifc_name = Memif.vpp_get_memif_interface_name(node, sw_if_index) Topology.update_interface_name(node, if_key, ifc_name) ifc_mac = Memif.vpp_get_memif_interface_mac(node, sw_if_index) Topology.update_interface_mac_address(node, if_key, ifc_mac) Topology.update_interface_memif_socket(node, if_key, '/tmp/' + filename) Topology.update_interface_memif_id(node, if_key, mid) Topology.update_interface_memif_role(node, if_key, str(role)) return sw_if_index
def create_memif_interface(node, socket, mid, role='master'): """Create Memif interface on the given node. :param node: Given node to create Memif interface on. :param socket: Memif interface socket path. :param mid: Memif interface ID. :param role: Memif interface role [master|slave]. Default is master. :type node: dict :type socket: str :type mid: str :type role: str :returns: SW interface index. :rtype: int :raises ValueError: If command 'create memif' fails. """ with VatTerminal(node, json_param=False) as vat: vat.vat_terminal_exec_cmd_from_template( 'memif_create.vat', socket=socket, id=mid, role=role) if 'sw_if_index' in vat.vat_stdout: try: sw_if_idx = int(vat.vat_stdout.split()[4]) if_key = Topology.add_new_port(node, 'memif') Topology.update_interface_sw_if_index( node, if_key, sw_if_idx) ifc_name = Memif.vpp_get_memif_interface_name( node, sw_if_idx) Topology.update_interface_name(node, if_key, ifc_name) ifc_mac = Memif.vpp_get_memif_interface_mac(node, sw_if_idx) Topology.update_interface_mac_address(node, if_key, ifc_mac) Topology.update_interface_memif_socket(node, if_key, socket) Topology.update_interface_memif_id(node, if_key, mid) Topology.update_interface_memif_role(node, if_key, role) return sw_if_idx except KeyError: raise ValueError('Create Memif interface failed on node ' '{}'.format(node['host'])) else: raise ValueError('Create Memif interface failed on node ' '{}'.format(node['host']))
def create_memif_interface(node, filename, mid, sid, rxq=1, txq=1, role='slave'): """Create Memif interface on the given node. :param node: Given node to create Memif interface on. :param filename: Memif interface socket filename. :param mid: Memif interface ID. :param sid: Socket ID. :param rxq: Number of RX queues. :param txq: Number of TX queues. :param role: Memif interface role [master|slave]. Default is master. :type node: dict :type filename: str :type mid: str :type sid: str :type rxq: int :type txq: int :type role: str :returns: SW interface index. :rtype: int :raises ValueError: If command 'create memif' fails. """ with VatTerminal(node, json_param=False) as vat: vat.vat_terminal_exec_cmd_from_template( 'memif_socket_filename_add_del.vat', add_del='add', id=sid, filename='/tmp/' + filename) vat.vat_terminal_exec_cmd_from_template('memif_create.vat', id=mid, socket=sid, rxq=rxq, txq=txq, role=role) if 'sw_if_index' in vat.vat_stdout: try: sw_if_idx = int(vat.vat_stdout.split()[4]) if_key = Topology.add_new_port(node, 'memif') Topology.update_interface_sw_if_index( node, if_key, sw_if_idx) ifc_name = Memif.vpp_get_memif_interface_name( node, sw_if_idx) Topology.update_interface_name(node, if_key, ifc_name) ifc_mac = Memif.vpp_get_memif_interface_mac( node, sw_if_idx) Topology.update_interface_mac_address( node, if_key, ifc_mac) Topology.update_interface_memif_socket( node, if_key, '/tmp/' + filename) Topology.update_interface_memif_id(node, if_key, mid) Topology.update_interface_memif_role(node, if_key, role) return sw_if_idx except KeyError: raise ValueError('Create Memif interface failed on node ' '{}'.format(node['host'])) else: raise ValueError('Create Memif interface failed on node ' '{}'.format(node['host']))