X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FInterfaceUtil.py;h=838ba3bb69deea6fd349a87347b5f5815e2afe57;hb=5db24a985316c70a707f2a11b30dd00f7a98dca7;hp=6790fb7221a4dc049b633e334cad6a75636367e2;hpb=981bc57e281bc2f6920f7690eccc3106419474d2;p=csit.git diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 6790fb7221..838ba3bb69 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -490,7 +490,7 @@ class InterfaceUtil(object): if output["retval"] == 0: return output["sw_if_index"] else: - raise RuntimeError('Unable to create VXLAN interface on node {}' + raise RuntimeError('Unable to create VXLAN interface on node {0}' .format(node)) @staticmethod @@ -504,7 +504,7 @@ class InterfaceUtil(object): :type interface: int or str :return: Dictionary containing data for the given VxLAN interface or if interface=None, the list of dictionaries with all VxLAN interfaces. - :rtype dict or list + :rtype: dict or list """ param = "sw_if_index" if interface is None: @@ -528,6 +528,45 @@ class InterfaceUtil(object): return {} return response[0] + @staticmethod + def vhost_user_dump(node): + """Get vhost-user data for the given node. + + :param node: VPP node to get interface data from. + :type node: dict + :return: List of dictionaries with all vhost-user interfaces. + :rtype: list + """ + with VatTerminal(node) as vat: + response = vat.vat_terminal_exec_cmd_from_template( + "vhost_user_dump.vat") + + return response[0] + + @staticmethod + def tap_dump(node, name=None): + """Get all TAP interface data from the given node, or data about + a specific TAP interface. + + :param node: VPP node to get data from. + :param name: Optional name of a specific TAP interface. + :type node: dict + :type name: str + :return: Dictionary of information about a specific TAP interface, or + a List of dictionaries containing all TAP data for the given node. + :rtype: dict or list + """ + with VatTerminal(node) as vat: + response = vat.vat_terminal_exec_cmd_from_template( + "tap_dump.vat") + if name is None: + return response[0] + else: + for item in response[0]: + if name == item['dev_name']: + return item + return {} + @staticmethod def create_subinterface(node, interface, sub_id, outer_vlan_id, inner_vlan_id, type_subif): @@ -572,7 +611,40 @@ class InterfaceUtil(object): with VatTerminal(node) as vat: vat.vat_terminal_exec_cmd('exec show interfaces') - return '{}.{}'.format(interface, sub_id), sw_subif_index + name = '{}.{}'.format(interface, sub_id) + return name, sw_subif_index + + @staticmethod + def create_gre_tunnel_interface(node, source_ip, destination_ip): + """Create GRE tunnel interface on node. + + :param node: VPP node to add tunnel interface. + :param source_ip: Source of the GRE tunnel. + :param destination_ip: Destination of the GRE tunnel. + :type node: dict + :type source_ip: str + :type destination_ip: str + :return: Name and index of created GRE tunnel interface. + :rtype: tuple + :raises RuntimeError: If unable to create GRE tunnel interface. + """ + output = VatExecutor.cmd_from_template(node, "create_gre.vat", + src=source_ip, + dst=destination_ip) + output = output[0] + + if output["retval"] == 0: + sw_if_index = output["sw_if_index"] + + vat_executor = VatExecutor() + vat_executor.execute_script_json_out("dump_interfaces.vat", node) + interface_dump_json = vat_executor.get_script_stdout() + name = VatJsonUtil.get_interface_name_from_json( + interface_dump_json, sw_if_index) + return name, sw_if_index + else: + raise RuntimeError('Unable to create GRE tunnel on node {}.' + .format(node)) @staticmethod def vpp_create_loopback(node):