X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FInterfaceUtil.py;h=bfc0ba7a0838fac889eb766f8d241d9507e3b7dd;hb=79f5ba9bf7656972dd988508eff9465562dde42c;hp=9dcd1f8321b78957caaf423849989b2e059521e6;hpb=316988e4fe98d9fb6ed99514e95f820033e4895b;p=csit.git diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 9dcd1f8321..bfc0ba7a08 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -25,7 +25,7 @@ from resources.libraries.python.IPAddress import IPAddress from resources.libraries.python.L2Util import L2Util from resources.libraries.python.PapiExecutor import PapiSocketExecutor from resources.libraries.python.parsers.JsonParser import JsonParser -from resources.libraries.python.ssh import SSH, exec_cmd_no_error +from resources.libraries.python.ssh import SSH, exec_cmd, exec_cmd_no_error from resources.libraries.python.topology import NodeType, Topology from resources.libraries.python.VPPUtil import VPPUtil @@ -228,45 +228,59 @@ class InterfaceUtil: ) @staticmethod - def set_interface_ethernet_mtu(node, iface_key, mtu): - """Set Ethernet MTU for specified interface. + def set_interface_mtu(node, pf_pcis, mtu=9200): + """Set Ethernet MTU for specified interfaces. - Function can be used only for TGs. - - :param node: Node where the interface is. - :param iface_key: Interface key from topology file. - :param mtu: MTU to set. - :type node: dict - :type iface_key: str + :param node: Topology node. + :param pf_pcis: List of node's interfaces PCI addresses. + :param mtu: MTU to set. Default: 9200. + :type nodes: dict + :type pf_pcis: list :type mtu: int - :returns: Nothing. - :raises ValueError: If the node type is "DUT". - :raises ValueError: If the node has an unknown node type. + :raises RuntimeError: If failed to set MTU on interface. """ - if node[u"type"] == NodeType.DUT: - msg = f"Node {node[u'host']}: Setting Ethernet MTU for interface " \ - f"on DUT nodes not supported" - elif node[u"type"] != NodeType.TG: - msg = f"Node {node[u'host']} has unknown NodeType: {node[u'type']}" - else: - iface_name = Topology.get_interface_name(node, iface_key) - cmd = f"ip link set {iface_name} mtu {mtu}" + for pf_pci in pf_pcis: + pf_eth = InterfaceUtil.pci_to_eth(node, pf_pci) + cmd = f"ip link set {pf_eth} mtu {mtu}" exec_cmd_no_error(node, cmd, sudo=True) - return - raise ValueError(msg) @staticmethod - def set_default_ethernet_mtu_on_all_interfaces_on_node(node): - """Set default Ethernet MTU on all interfaces on node. + def set_interface_flow_control(node, pf_pcis, rx=u"off", tx=u"off"): + """Set Ethernet flow control for specified interfaces. - Function can be used only for TGs. + :param node: Topology node. + :param pf_pcis: List of node's interfaces PCI addresses. + :param rx: RX flow. Default: off. + :param tx: TX flow. Default: off. + :type nodes: dict + :type pf_pcis: list + :type rx: str + :type tx: str + """ + for pf_pci in pf_pcis: + pf_eth = InterfaceUtil.pci_to_eth(node, pf_pci) + cmd = f"ethtool -A {pf_eth} rx off tx off" + ret_code, _, _ = exec_cmd(node, cmd, sudo=True) + if int(ret_code) not in (0, 78): + raise RuntimeError("Failed to set MTU on {pf_eth}!") - :param node: Node where to set default MTU. - :type node: dict - :returns: Nothing. + + @staticmethod + def set_pci_parameter(node, pf_pcis, key, value): + """Set PCI parameter for specified interfaces. + + :param node: Topology node. + :param pf_pcis: List of node's interfaces PCI addresses. + :param key: Key to set. + :param value: Value to set. + :type nodes: dict + :type pf_pcis: list + :type key: str + :type value: str """ - for ifc in node[u"interfaces"]: - InterfaceUtil.set_interface_ethernet_mtu(node, ifc, 1500) + for pf_pci in pf_pcis: + cmd = f"setpci -s {pf_pci} {key}={value}" + exec_cmd_no_error(node, cmd, sudo=True) @staticmethod def vpp_set_interface_mtu(node, interface, mtu=9200):