X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FInterfaceUtil.py;h=9ecdb7503aa9df3fb190e29a27d0ef09309d4949;hb=147ce6e1ab9e6f557172d05aa0c09d44a34b0fdc;hp=69d0a59680e18ca3e64f2391fea5ee4de27c5c1c;hpb=5d2ce55a8641a030ec6984089c51aa9313f46af1;p=csit.git diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py index 69d0a59680..9ecdb7503a 100644 --- a/resources/libraries/python/InterfaceUtil.py +++ b/resources/libraries/python/InterfaceUtil.py @@ -427,21 +427,50 @@ class InterfaceUtil(object): InterfaceUtil.tg_set_interfaces_udev_rules(node) @staticmethod - def update_all_interface_data_on_all_nodes(nodes): + def iface_update_numa_node(node): + """For all interfaces from topology file update numa node based on + information from the node. + + :param node: Node from topology. + :type node: dict + :return: nothing + """ + ssh = SSH() + for if_key in Topology.get_node_interfaces(node): + if_pci = Topology.get_interface_pci_addr(node, if_key) + ssh.connect(node) + cmd = "cat /sys/bus/pci/devices/{}/numa_node".format(if_pci) + (ret, out, _) = ssh.exec_command(cmd) + if ret == 0: + Topology.set_interface_numa_node(node, if_key, int(out)) + + @staticmethod + def update_all_interface_data_on_all_nodes(nodes, skip_tg=False, + numa_node=False): """Update interface names on all nodes in DICT__nodes. This method updates the topology dictionary by querying interface lists of all nodes mentioned in the topology dictionary. :param nodes: Nodes in the topology. + :param skip_tg: Skip TG node + :param numa_node: Retrieve numa_node location. :type nodes: dict + :type skip_tg: bool + :type numa_node: bool """ for node_data in nodes.values(): if node_data['type'] == NodeType.DUT: InterfaceUtil.update_vpp_interface_data_on_node(node_data) - elif node_data['type'] == NodeType.TG: + elif node_data['type'] == NodeType.TG and not skip_tg: InterfaceUtil.update_tg_interface_data_on_node(node_data) + if numa_node: + if node_data['type'] == NodeType.DUT: + InterfaceUtil.iface_update_numa_node(node_data) + elif node_data['type'] == NodeType.TG and not skip_tg: + InterfaceUtil.iface_update_numa_node(node_data) + @staticmethod def create_vlan_subinterface(node, interface, vlan): """Create VLAN subinterface on node. @@ -837,3 +866,23 @@ class InterfaceUtil(object): vat.vat_terminal_exec_cmd_from_template("set_fib_to_interface.vat", sw_index=sw_if_index, vrf=table_id) + + @staticmethod + def set_linux_interface_mac(node, interface, mac, namespace=None): + """Set MAC address for interface in linux. + + :param node: Node where to execute command. + :param interface: Interface in namespace. + :param mac: MAC to be assigned to interface. + :param namespace: Execute command in namespace. Optional + :type node: dict + :type interface: str + :type mac: str + :type namespace: str + """ + if namespace is not None: + cmd = 'ip netns exec {} ip link set {} address {}'.format( + namespace, interface, mac) + else: + cmd = 'ip link set {} address {}'.format(interface, mac) + exec_cmd_no_error(node, cmd, sudo=True)