Create a SampleVNF MQ consumer class
[yardstick.git] / yardstick / network_services / vnf_generic / vnf / cgnapt_vnf.py
index f9980b1..14f1e2e 100644 (file)
 # limitations under the License.
 
 from __future__ import absolute_import
-import time
 import logging
+import time
 
-from six.moves import zip
 from yardstick.network_services.vnf_generic.vnf.sample_vnf import SampleVNF, DpdkVnfSetupEnvHelper
 
 LOG = logging.getLogger(__name__)
 
 # CGNAPT should work the same on all systems, we can provide the binary
-CGNAPT_PIPELINE_COMMAND = 'sudo {tool_path} -p {ports_len_hex} -f {cfg_file} -s {script}'
+CGNAPT_PIPELINE_COMMAND = 'sudo {tool_path} -p {port_mask_hex} -f {cfg_file} -s {script} {hwlb}'
 WAIT_FOR_STATIC_NAPT = 4
 
-CGNAPT_COLLECT_KPI = """\
+CGNAPT_COLLECT_KPI = r"""\
 CG-NAPT(.*\n)*\
 Received\s(\d+),\
 Missed\s(\d+),\
@@ -55,7 +54,7 @@ class CgnaptApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
             yield '.'.join(ip_parts)
 
     @staticmethod
-    def _update_cgnat_script_file(ip_pipeline_cfg, mcpi, vnf_str):
+    def _update_cgnat_script_file(ip_pipeline_cfg, mcpi):
         pipeline_config_str = str(ip_pipeline_cfg)
         input_cmds = '\n'.join(mcpi)
         icmp_flag = 'link 0 down' in input_cmds
@@ -66,17 +65,12 @@ class CgnaptApproxSetupEnvHelper(DpdkVnfSetupEnvHelper):
     def scale(self, flavor=""):
         raise NotImplementedError
 
-    def _get_cgnapt_config(self, interfaces=None):
-        if interfaces is None:
-            interfaces = self.vnfd_helper.interfaces
-
-        gateway_ips = []
-
+    def _get_cgnapt_config(self):
         # fixme: Get private port and gateway from port list
-        priv_ports = interfaces[::2]
-        for interface in priv_ports:
-            gateway_ips.append(self._get_ports_gateway(interface["name"]))
-        return gateway_ips
+        uplink_ports = self.vnfd_helper.port_pairs.uplink_ports
+        return \
+            [self.vnfd_helper.find_interface(name=intf)["virtual-interface"]['dst_ip']
+             for intf in uplink_ports]
 
 
 class CgnaptApproxVnf(SampleVNF):
@@ -91,19 +85,21 @@ class CgnaptApproxVnf(SampleVNF):
         "packets_dropped": 4,
     }
 
-    def __init__(self, name, vnfd, setup_env_helper_type=None, resource_helper_type=None):
+    def __init__(self, name, vnfd, task_id, setup_env_helper_type=None,
+                 resource_helper_type=None):
         if setup_env_helper_type is None:
             setup_env_helper_type = CgnaptApproxSetupEnvHelper
-
-        super(CgnaptApproxVnf, self).__init__(name, vnfd, setup_env_helper_type,
-                                              resource_helper_type)
+        super(CgnaptApproxVnf, self).__init__(
+            name, vnfd, task_id, setup_env_helper_type, resource_helper_type)
 
     def _vnf_up_post(self):
         super(CgnaptApproxVnf, self)._vnf_up_post()
         if self.scenario_helper.options.get('napt', 'static') != 'static':
             return
 
-        ip_iter = self.setup_helper._generate_ip_from_pool("152.16.40.10")
+        flow = self.scenario_helper.all_options.get('flow', {})
+        public_ip = flow.get('public_ip', ['152.16.40.10']).pop()
+        ip_iter = self.setup_helper._generate_ip_from_pool(public_ip)
         gw_ips = self.setup_helper._get_cgnapt_config()
         if self.scenario_helper.vnf_cfg.get("lb_config", "SW") == 'HW':
             pipeline = self.setup_helper.HW_DEFAULT_CORE
@@ -113,11 +109,14 @@ class CgnaptApproxVnf(SampleVNF):
             offset = 0
 
         worker_threads = int(self.scenario_helper.vnf_cfg["worker_threads"])
+        # p <pipeline id> entry addm <prv_ipv4/6> prvport> <pub_ip> <pub_port> <phy_port> <ttl>
+        # <no_of_entries> <end_prv_port> <end_pub_port>
         cmd_template = "p {0} entry addm {1} 1 {2} 1 0 32 65535 65535 65535"
         for gw, ip in zip(gw_ips, ip_iter):
             cmd = cmd_template.format(pipeline, gw, ip)
             pipeline += worker_threads
             pipeline += offset
+            LOG.info(cmd)
             self.vnf_execute(cmd)
 
         time.sleep(WAIT_FOR_STATIC_NAPT)