X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FInterfaceUtil.py;h=bf1ba1e8aa785de1c34d77326f2016cd0f473df9;hp=4631ccce7a5fc260e9510f5a25f0ed3a8bed4ee9;hb=a8c8bf7eb1130c1d9dedfd03b2437f1ac9c51d9b;hpb=5a2fd159dce96a70f2e5157314391aceb6d80197 diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 4631ccce7a..bf1ba1e8aa 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -36,9 +36,9 @@ class InterfaceUtil(object): Function can be used for DUTs as well as for TGs. - :param node: node where the interface is - :param interface: interface name or sw_if_index - :param state: one of 'up' or 'down' + :param node: Node where the interface is. + :param interface: Interface name or sw_if_index. + :param state: One of 'up' or 'down'. :type node: dict :type interface: str or int :type state: str @@ -73,9 +73,9 @@ class InterfaceUtil(object): Function can be used only for TGs. - :param node: node where the interface is - :param interface: interface name - :param mtu: MTU to set + :param node: Node where the interface is. + :param interface: Interface name. + :param mtu: MTU to set. :type node: dict :type interface: str :type mtu: int @@ -97,7 +97,7 @@ class InterfaceUtil(object): Function can be used only for TGs. - :param node: node where to set default MTU + :param node: Node where to set default MTU. :type node: dict :return: nothing """ @@ -109,7 +109,7 @@ class InterfaceUtil(object): """Wait until all interfaces with admin-up are in link-up state. :param node: Node to wait on. - :param timeout: Waiting timeout in seconds (optional, default 10s) + :param timeout: Waiting timeout in seconds (optional, default 10s). :type node: dict :type timeout: int :raises: RuntimeError if the timeout period value has elapsed. @@ -172,6 +172,7 @@ class InterfaceUtil(object): """Get all interface data from a VPP node. If a name or sw_interface_index is provided, return only data for the matching interface. + :param node: VPP node to get interface data from. :param interface: Numeric index or name string of a specific interface. :type node: dict @@ -325,7 +326,7 @@ class InterfaceUtil(object): @staticmethod def update_vpp_interface_data_on_node(node): - """Update vpp generated interface data for a given node in DICT__nodes + """Update vpp generated interface data for a given node in DICT__nodes. Updates interface names, software if index numbers and any other details generated specifically by vpp that are unknown before testcase run. @@ -333,7 +334,7 @@ class InterfaceUtil(object): devices using vpp_api_test, and pairing known information from topology (mac address/pci address of interface) to state from VPP. - :param node: Node selected from DICT__nodes + :param node: Node selected from DICT__nodes. :type node: dict """ vat_executor = VatExecutor() @@ -399,6 +400,38 @@ class InterfaceUtil(object): elif node_data['type'] == NodeType.TG: InterfaceUtil.update_tg_interface_data_on_node(node_data) + @staticmethod + def create_vlan_subinterface(node, interface, vlan): + """Create VLAN subinterface on node. + + :param node: Node to add VLAN subinterface on. + :param interface: Interface name on which create VLAN subinterface. + :param vlan: VLAN ID of the subinterface to be created. + :type node: dict + :type interface: str + :type vlan: int + :return: Name and index of created subinterface. + :rtype: tuple + """ + sw_if_index = Topology.get_interface_sw_index(node, interface) + + output = VatExecutor.cmd_from_template(node, "create_vlan_subif.vat", + sw_if_index=sw_if_index, + vlan=vlan) + if output[0]["retval"] == 0: + sw_subif_index = output[0]["sw_if_index"] + logger.trace('VLAN subinterface with sw_if_index {} and VLAN ID {} ' + 'created on node {}'.format(sw_subif_index, + vlan, node['host'])) + else: + raise RuntimeError('Unable to create VLAN subinterface on node {}' + .format(node['host'])) + + with VatTerminal(node, False) as vat: + vat.vat_terminal_exec_cmd('exec show interfaces') + + return '{}.{}'.format(interface, vlan), sw_subif_index + @staticmethod def create_vxlan_interface(node, vni, source_ip, destination_ip): """Create VXLAN interface and return sw if index of created interface.