from __future__ import absolute_import
import logging
+from yardstick.network_services.helpers.samplevnf_helper import PortPairs
+
LOG = logging.getLogger(__name__)
class VnfdHelper(dict):
+ def __init__(self, *args, **kwargs):
+ super(VnfdHelper, self).__init__(*args, **kwargs)
+ self.port_pairs = PortPairs(self['vdu'][0]['external-interface'])
+ # port num is not present until binding so we have to memoize
+ self._port_num_map = {}
+
@property
def mgmt_interface(self):
return self["mgmt-interface"]
virtual_intf = interface["virtual-interface"]
if virtual_intf[key] == value:
return interface
+ raise KeyError()
def find_interface(self, **kwargs):
key, value = next(iter(kwargs.items()))
for interface in self.interfaces:
if interface[key] == value:
return interface
+ raise KeyError()
+
+ # hide dpdk_port_num key so we can abstract
+ def find_interface_by_port(self, port):
+ for interface in self.interfaces:
+ virtual_intf = interface["virtual-interface"]
+ # we have to convert to int to compare
+ if int(virtual_intf['dpdk_port_num']) == port:
+ return interface
+ raise KeyError()
+
+ def port_num(self, port):
+ # we need interface name -> DPDK port num (PMD ID) -> LINK ID
+ # LINK ID -> PMD ID is governed by the port mask
+ """
+
+ :rtype: int
+ :type port: str
+ """
+ if isinstance(port, dict):
+ intf = port
+ else:
+ intf = self.find_interface(name=port)
+ return self._port_num_map.setdefault(intf["name"],
+ int(intf["virtual-interface"]["dpdk_port_num"]))
+
+ def port_nums(self, intfs):
+ return [self.port_num(i) for i in intfs]
+
+ def ports_iter(self):
+ for port_name in self.port_pairs.all_ports:
+ port_num = self.port_num(port_name)
+ yield port_name, port_num
class VNFObject(object):
+ # centralize network naming convention
+ UPLINK = PortPairs.UPLINK
+ DOWNLINK = PortPairs.DOWNLINK
+
def __init__(self, name, vnfd):
super(VNFObject, self).__init__()
self.name = name
"""
raise NotImplementedError()
+ def wait_for_instantiate(self):
+ """ Wait for VNF to start
+
+ :return: True/False
+ """
+ raise NotImplementedError()
+
def terminate(self):
""" Kill all VNF processes