X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Ftopology.py;h=338ccb6b575d1b3b014ab9755befce1598866701;hp=ed87edfa7e7600388a60b2d5ab939809490f9e14;hb=a318ebefc569c5c1b1527c5de6dd3e3ac2f9c163;hpb=3d5a75be5a88931690898e0fe52e4f48bc67c5ed diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py index ed87edfa7e..338ccb6b57 100644 --- a/resources/libraries/python/topology.py +++ b/resources/libraries/python/topology.py @@ -1,4 +1,4 @@ -# Copyright (c) 2019 Cisco and/or its affiliates. +# Copyright (c) 2020 Cisco and/or its affiliates. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at: @@ -22,6 +22,8 @@ from yaml import safe_load from robot.api import logger from robot.libraries.BuiltIn import BuiltIn, RobotNotRunningError +from resources.libraries.python.Constants import Constants + __all__ = [ u"DICT__nodes", u"Topology", u"NodeType", u"SocketType", u"NodeSubTypeTG" ] @@ -171,7 +173,8 @@ class Topology: """ port_types = ( u"subinterface", u"vlan_subif", u"memif", u"tap", u"vhost", - u"loopback", u"gre_tunnel", u"vxlan_tunnel", u"eth_bond", u"eth_avf" + u"loopback", u"gre_tunnel", u"vxlan_tunnel", u"eth_bond", + u"eth_avf", u"eth_rdma" ) for node_data in nodes.values(): @@ -703,6 +706,22 @@ class Topology: except KeyError: return None + @staticmethod + def get_interface_ip4_prefix_length(node, iface_key): + """Get IP4 address prefix length for the interface. + + :param node: Node to get prefix length on. + :param iface_key: Interface key from topology file. + :type node: dict + :type iface_key: str + :returns: Prefix length from topology file or the default + IP4 prefix length if not found. + :rtype: int + :raises: KeyError if iface_key is not found. + """ + return node[u"interfaces"][iface_key].get(u"ip4_prefix_length", \ + Constants.DEFAULT_IP4_PREFIX_LENGTH) + @staticmethod def get_adjacent_node_and_interface(nodes_info, node, iface_key): """Get node and interface adjacent to specified interface @@ -860,8 +879,6 @@ class Topology: :rtype: list """ - logger.trace(f"node1: {str(node1)}") - logger.trace(f"node2: {str(node2)}") node1_links = self._get_node_active_link_names( node1, filter_list=filter_list_node1 ) @@ -875,7 +892,10 @@ class Topology: elif node2_links is None: logger.error(u"Unable to find active links for node2") else: - connecting_links = list(set(node1_links).intersection(node2_links)) + # Not using set operations, as we need deterministic order. + connecting_links = [ + link for link in node1_links if link in node2_links + ] return connecting_links @@ -1051,8 +1071,10 @@ class Topology: :param node: Node to set numa_node on. :param iface_key: Interface key from topology file. + :param numa_node_id: Num_node ID. :type node: dict :type iface_key: str + :type numa_node_id: int :returns: Return iface_key or None if not found. """ try: