X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2Ftopology.py;h=1e5ce4bd62c478ac0df6f8bb6adb6a6394bb4003;hp=b06cf7dc4e87724f48ebaeb90aabefb568cc4f4c;hb=e6dd772435e4736170aaa43a779840196e714254;hpb=33fb34665214bbbd0a4b3154169b21c2da01f69b diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py index b06cf7dc4e..1e5ce4bd62 100644 --- a/resources/libraries/python/topology.py +++ b/resources/libraries/python/topology.py @@ -13,6 +13,8 @@ """Defines nodes and topology structure.""" +import re + from collections import Counter from yaml import load @@ -59,6 +61,7 @@ class NodeSubTypeTG(object): # IxNetwork IXNET = 'IXNET' + DICT__nodes = load_topo_from_yaml() @@ -138,13 +141,40 @@ class Topology(object): :returns: Nothing """ port_types = ('subinterface', 'vlan_subif', 'memif', 'tap', 'vhost', - 'loopback', 'gre_tunnel', 'vxlan_tunnel', 'eth_bond') + 'loopback', 'gre_tunnel', 'vxlan_tunnel', 'eth_bond', + 'eth_avf') for node_data in nodes.values(): if node_data['type'] == NodeType.DUT: for ptype in port_types: Topology.remove_all_ports(node_data, ptype) + @staticmethod + def remove_all_vif_ports(node): + """Remove all Virtual Interfaces on DUT node. + + :param node: Node to remove VIF ports on. + :type node: dict + :returns: Nothing + """ + reg_ex = re.compile(r'port\d+_vif\d+') + for if_key in list(node['interfaces']): + if re.match(reg_ex, if_key): + node['interfaces'].pop(if_key) + + @staticmethod + def remove_all_added_vif_ports_on_all_duts_from_topology(nodes): + """Remove all added Virtual Interfaces on all DUT nodes in + the topology. + + :param nodes: Nodes in the topology. + :type nodes: dict + :returns: Nothing + """ + for node_data in nodes.values(): + if node_data['type'] == NodeType.DUT: + Topology.remove_all_vif_ports(node_data) + @staticmethod def update_interface_sw_if_index(node, iface_key, sw_if_index): """Update sw_if_index on the interface from the node. @@ -197,6 +227,19 @@ class Topology(object): """ node['interfaces'][iface_key]['pci_address'] = str(pci_address) + @staticmethod + def update_interface_vlan(node, iface_key, vlan): + """Update VLAN on the interface from the node. + + :param node: Node to update VLAN on. + :param iface_key: Topology key of the interface. + :param vlan: VLAN ID. + :type node: dict + :type iface_key: str + :type vlan: str + """ + node['interfaces'][iface_key]['vlan'] = int(vlan) + @staticmethod def update_interface_vhost_socket(node, iface_key, vhost_socket): """Update vhost socket name on the interface from the node. @@ -389,7 +432,8 @@ class Topology(object): interface index assigned to the interface by vpp for a given node. :param node: The node topology dictionary. - :param sw_if_index: sw_if_index of the link that a interface is connected to. + :param sw_if_index: sw_if_index of the link that a interface is + connected to. :type node: dict :type sw_if_index: int :returns: Interface name of the interface connected to the given link. @@ -695,6 +739,21 @@ class Topology(object): except KeyError: return None + @staticmethod + def get_interface_vlan(node, iface_key): + """Get interface vlan. + + :param node: Node to get interface driver on. + :param iface_key: Interface key from topology file. + :type node: dict + :type iface_key: str + :returns: Return interface vlan or None if not found. + """ + try: + return node['interfaces'][iface_key].get('vlan') + except KeyError: + return None + @staticmethod def get_node_interfaces(node): """Get all node interfaces.