-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 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:
"""Defines nodes and topology structure."""
+import re
+
from collections import Counter
from yaml import load
# IxNetwork
IXNET = 'IXNET'
+
DICT__nodes = load_topo_from_yaml()
: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.
"""
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.
return retval
@staticmethod
- def get_interface_by_sw_index(node, sw_index):
+ def get_interface_by_sw_index(node, sw_if_index):
"""Return interface name of link on node.
This method returns the interface name associated with a software
interface index assigned to the interface by vpp for a given node.
:param node: The node topology dictionary.
- :param sw_index: Sw_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_index: int
+ :type sw_if_index: int
:returns: Interface name of the interface connected to the given link.
:rtype: str
"""
return Topology._get_interface_by_key_value(node, "vpp_sw_index",
- sw_index)
+ sw_if_index)
@staticmethod
def get_interface_sw_index(node, iface_key):
"""Get VPP sw_if_index for the interface using interface key.
:param node: Node to get interface sw_if_index on.
- :param iface_key: Interface key from topology file, or sw_index.
+ :param iface_key: Interface key from topology file, or sw_if_index.
:type node: dict
:type iface_key: str/int
:returns: Return sw_if_index or None if not found.
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.
def get_node_link_mac(node, link_name):
"""Return interface mac address by link name.
- :param node: Node to get interface sw_index on.
+ :param node: Node to get interface sw_if_index on.
:param link_name: Link name.
:type node: dict
:type link_name: str