From c2a8982e943aff22945884fa3f7c9218a1dd5e0c Mon Sep 17 00:00:00 2001 From: John O Loughlin Date: Wed, 24 Oct 2018 15:36:36 +0100 Subject: Add option to pass config file to vPE Yardstick should not generate config files for vPE. The current autogenerated configfile is incorrect. Therefore this patch is removing the auto-generation functionality. JIRA: YARDSTICK-1473 Change-Id: I9d909fcd0ac517d5ccdefb024c89b6bf979ef9c0 Signed-off-by: John O Loughlin --- .../nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml | 5 +- .../vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml | 4 +- .../vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml | 4 +- .../tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml | 4 +- ...2544_ipv4_1flow_64B_trex_corelated_traffic.yaml | 4 +- .../vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml | 4 +- .../vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml | 4 +- .../vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml | 4 +- .../nsut/vpe/vpe_config/vpe_config_2_ports | 86 ++++++++++++++++++++++ .../traffic_profiles/ixia_ipv4_latency_vpe.yaml | 24 +++--- yardstick/network_services/pipeline.py | 2 +- .../network_services/vnf_generic/vnf/sample_vnf.py | 4 +- .../network_services/vnf_generic/vnf/vpe_vnf.py | 38 ++++++---- 13 files changed, 149 insertions(+), 38 deletions(-) create mode 100644 samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml index 04668d38f..cbe6cf196 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_http_ipv4_ixload.yaml @@ -32,11 +32,12 @@ scenarios: traffic_type: 4 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Duration duration: 4 - ixia_profile: ../../traffic_profiles/vpe/HTTP-vPE_IPv4_2Ports.rxf # Need vlan update context: type: Node name: yardstick diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml index 4f8395b53..158768094 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_1518B.yaml @@ -34,7 +34,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml index 271cb8978..b7d209eab 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B.yaml @@ -34,7 +34,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml index 852242187..330d8e85e 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_ixia.yaml @@ -34,7 +34,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml index a552730a5..b68716492 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_64B_trex_corelated_traffic.yaml @@ -36,7 +36,9 @@ scenarios: correlated_traffic: true vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml index 47b9a6f2e..421697ff0 100644 --- a/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_baremetal_rfc2544_ipv4_1flow_IMIX.yaml @@ -35,7 +35,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml b/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml index 1bb57117b..56c7147db 100644 --- a/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_ixia.yaml @@ -34,7 +34,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml b/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml index ce239808e..39aea1382 100644 --- a/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml +++ b/samples/vnf_samples/nsut/vpe/tc_ovs_rfc2544_ipv4_1rule_64B_trex.yaml @@ -34,7 +34,9 @@ scenarios: allowed_drop_rate: 0.0001 - 0.0001 vnf__0: nfvi_enable: True - vnf_config: vpe_config + vnf_config: {file: './vpe_config/vpe_config_2_ports', + action_bulk_file: './vpe_config/action_bulk_512.txt', + full_tm_profile_file: './vpe_config/full_tm_profile_10G.cfg'} runner: type: Iteration iterations: 10 diff --git a/samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports b/samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports new file mode 100644 index 000000000..35443c877 --- /dev/null +++ b/samples/vnf_samples/nsut/vpe/vpe_config/vpe_config_2_ports @@ -0,0 +1,86 @@ +[PIPELINE0] +type = MASTER +core = 0 + +[TM0] +burst_read = 24 +burst_write = 32 +cfg = /tmp/full_tm_profile_10G.cfg + +[PIPELINE1] +type = FIREWALL +core = s0c1 +pktq_in = RXQ0.0 +pktq_out = SWQ0 SINK0 +n_rules = 4096 +pkt_type = qinq_ipv4 + +[PIPELINE2] +type = FLOW_CLASSIFICATION +core = s0c2 +pktq_in = SWQ0 +pktq_out = SWQ1 SINK1 +n_flows = 65536 +key_size = 8 +key_offset = 268 +key_mask = 00000FFF00000FFF +flowid_offset = 172 + +[PIPELINE3] +type = FLOW_ACTIONS +core = s0c2 +pktq_in = SWQ1 +pktq_out = SWQ2 +n_flows = 65536 +n_meters_per_flow = 1 +flow_id_offset = 172 +ip_hdr_offset = 278 +color_offset = 176 + +[PIPELINE4] +type = FLOW_ACTIONS +core = s0c1 +pktq_in = SWQ2 +pktq_out = SWQ3 +n_flows = 65536 +n_meters_per_flow = 4 +flow_id_offset = 172 +ip_hdr_offset = 278 +color_offset = 176 + +[PIPELINE5] +type = ROUTING +core = s0c3 +pktq_in = SWQ3 +pktq_out = TXQ1.0 SINK2 +encap = ethernet_mpls +mpls_color_mark = yes +ip_hdr_offset = 278 +color_offset = 176 + +[PIPELINE6] +type = ROUTING +core = s0c4 +pktq_in = RXQ1.0 +pktq_out = SWQ4 SINK3 +encap = ethernet_qinq +qinq_sched = yes +ip_hdr_offset = 270 + +[PIPELINE7] +type = PASS-THROUGH +core = s0c5 +pktq_in = SWQ4 +pktq_out = SWQ5 + +[PIPELINE8] +type = PASS-THROUGH +core = s0c5 +pktq_in = SWQ5 TM0 +pktq_out = TM0 SWQ6 + +[PIPELINE9] +type = PASS-THROUGH +core = s0c5 +pktq_in = SWQ6 +pktq_out = TXQ0.0 diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml index 7942fbf4d..a21227f38 100644 --- a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml +++ b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency_vpe.yaml @@ -41,7 +41,7 @@ name: rfc2544 description: Traffic profile to run RFC2544 latency traffic_profile: traffic_type : IXIARFC2544Profile # defines traffic behavior - constant or look for highest possible throughput - frame_rate : 100 # pc of linerate + frame_rate : 100% # pc of linerate injection_time: {{ injection_time }} enable_latency: True @@ -50,7 +50,7 @@ uplink_0: id: 1 outer_l2: framesize: - 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}" + 64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}" 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}" 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}" 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}" @@ -69,7 +69,7 @@ uplink_0: cfi: 0 outer_l3v4: - proto: "tcp" + proto: "udp" srcip4: "{{get(flow, 'flow.src_ip_0', '192.168.0.0-192.168.255.255') }}" dstip4: "{{get(flow, 'flow.dst_ip_0', '192.16.0.0-192.16.0.31') }}" count: "{{get(flow, 'flow.count', '1') }}" @@ -84,11 +84,11 @@ uplink_0: count: "{{get(flow, 'flow.count', '1') }}" seed: "{{get(flow, 'flow.seed', '1') }}" downlink_0: - id: 2 ipv4: + id: 2 outer_l2: framesize: - 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}" + 64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}" 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}" 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}" 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}" @@ -97,7 +97,7 @@ downlink_0: 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}" outer_l3v4: - proto: "tcp" + proto: "udp" srcip4: "{{get(flow, 'flow.dst_ip_0', '192.16.0.0-192.16.0.31') }}" dstip4: "{{get(flow, 'flow.src_ip_0', '192.168.0.0-192.168.255.255') }}" count: "{{get(flow, 'flow.count', '1') }}" @@ -112,11 +112,11 @@ downlink_0: count: "{{get(flow, 'flow.count', '1') }}" seed: "{{get(flow, 'flow.seed', '1') }}" uplink_1: - id: 3 ipv4: + id: 3 outer_l2: framesize: - 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}" + 64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}" 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}" 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}" 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}" @@ -135,7 +135,7 @@ uplink_1: cfi: 0 outer_l3v4: - proto: "tcp" + proto: "udp" srcip4: "{{get(flow, 'flow.srcip_1', '192.168.0.0-192.168.255.255') }}" dstip4: "{{get(flow, 'flow.dstip_1', '192.16.0.0-192.16.0.31') }}" count: "{{get(flow, 'flow.count', '1') }}" @@ -150,11 +150,11 @@ uplink_1: count: "{{get(flow, 'flow.count', '1') }}" seed: "{{get(flow, 'flow.seed', '1') }}" downlink_1: - id: 4 ipv4: + id: 4 outer_l2: framesize: - 64B: "{{ get(imix, 'imix.uplink.imix_small', '0') }}" + 64B: "{{ get(imix, 'imix.uplink.imix_64B', '0') }}" 128B: "{{ get(imix, 'imix.uplink.imix_128B', '0') }}" 256B: "{{ get(imix, 'imix.uplink.imix_256B', '0') }}" 373b: "{{ get(imix, 'imix.uplink.imix_373B', '0') }}" @@ -163,7 +163,7 @@ downlink_1: 1518B: "{{get(imix, 'imix.uplink.imix_1500B', '0') }}" outer_l3v4: - proto: "tcp" + proto: "udp" srcip4: "{{get(flow, 'flow.dst_ip_1', '192.16.0.0-192.16.0.31') }}" dstip4: "{{get(flow, 'flow.src_ip_1', '192.168.0.0-192.168.255.255') }}" count: "{{get(flow, 'flow.count', '1') }}" diff --git a/yardstick/network_services/pipeline.py b/yardstick/network_services/pipeline.py index 7155480d4..4fbe7967f 100644 --- a/yardstick/network_services/pipeline.py +++ b/yardstick/network_services/pipeline.py @@ -22,7 +22,7 @@ from yardstick.common import utils FIREWALL_ADD_DEFAULT = "p {0} firewall add default 1" FIREWALL_ADD_PRIO = """\ -p {0} firewall add priority 1 ipv4 {1} 24 0.0.0.0 0 0 65535 0 65535 6 0xFF port 0""" +p {0} firewall add priority 1 ipv4 {1} 24 0.0.0.0 0 0 65535 0 65535 17 0xFF port 0""" FLOW_ADD_QINQ_RULES = """\ p {0} flow add qinq 128 512 port 0 id 1 diff --git a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py index b2c5a98bc..673344f4e 100644 --- a/yardstick/network_services/vnf_generic/vnf/sample_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/sample_vnf.py @@ -180,7 +180,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper): """No actions/rules (flows) by default""" return None - def _build_pipeline_kwargs(self): + def _build_pipeline_kwargs(self, cfg_file=None): tool_path = self.ssh_helper.provision_tool(tool_file=self.APP_NAME) # count the number of actual ports in the list of pairs # remove duplicate ports @@ -200,7 +200,7 @@ class DpdkVnfSetupEnvHelper(SetupEnvHelper): hwlb = ' --hwlb %s' % worker_threads self.pipeline_kwargs = { - 'cfg_file': self.CFG_CONFIG, + 'cfg_file': cfg_file if cfg_file else self.CFG_CONFIG, 'script': self.CFG_SCRIPT, 'port_mask_hex': ports_mask_hex, 'tool_path': tool_path, diff --git a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py index b7cf8b35e..642894e07 100644 --- a/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py +++ b/yardstick/network_services/vnf_generic/vnf/vpe_vnf.py @@ -24,6 +24,7 @@ import posixpath from six.moves import configparser, zip +from yardstick.common import utils from yardstick.common.process import check_if_process_failed from yardstick.network_services.helpers.samplevnf_helper import PortPairs from yardstick.network_services.pipeline import PipelineRules @@ -236,11 +237,9 @@ class ConfigCreate(object): if os.path.exists(vnf_cfg): return open(vnf_cfg).read() - class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): APP_NAME = 'vPE_vnf' - CFG_CONFIG = "/tmp/vpe_config" CFG_SCRIPT = "/tmp/vpe_script" TM_CONFIG = "/tmp/full_tm_profile_10G.cfg" CORES = ['0', '1', '2', '3', '4', '5'] @@ -253,33 +252,44 @@ class VpeApproxSetupEnvHelper(DpdkVnfSetupEnvHelper): self.all_ports = self._port_pairs.all_ports def build_config(self): + vnf_cfg = self.scenario_helper.vnf_cfg + task_path = self.scenario_helper.task_path + action_bulk_file = vnf_cfg.get('action_bulk_file', '/tmp/action_bulk_512.txt') + full_tm_profile_file = vnf_cfg.get('full_tm_profile_file', '/tmp/full_tm_profile_10G.cfg') + config_file = vnf_cfg.get('file', '/tmp/vpe_config') vpe_vars = { "bin_path": self.ssh_helper.bin_path, "socket": self.socket, } - self._build_vnf_ports() vpe_conf = ConfigCreate(self.vnfd_helper, self.socket) - vpe_conf.create_vpe_config(self.scenario_helper.vnf_cfg) - config_basename = posixpath.basename(self.CFG_CONFIG) + config_basename = posixpath.basename(config_file) script_basename = posixpath.basename(self.CFG_SCRIPT) - tm_basename = posixpath.basename(self.TM_CONFIG) - with open(self.CFG_CONFIG) as handle: - vpe_config = handle.read() - self.ssh_helper.upload_config_file(config_basename, vpe_config.format(**vpe_vars)) + with utils.open_relative_file(action_bulk_file, task_path) as handle: + action_bulk = handle.read() + + with utils.open_relative_file(full_tm_profile_file, task_path) as handle: + full_tm_profile = handle.read() + with utils.open_relative_file(config_file, task_path) as handle: + vpe_config = handle.read() + + # vpe_script needs to be autogenerated vpe_script = vpe_conf.generate_vpe_script(self.vnfd_helper.interfaces) + # upload the 4 config files to the target server + self.ssh_helper.upload_config_file(config_basename, vpe_config.format(**vpe_vars)) self.ssh_helper.upload_config_file(script_basename, vpe_script.format(**vpe_vars)) - - tm_config = vpe_conf.generate_tm_cfg(self.scenario_helper.vnf_cfg) - self.ssh_helper.upload_config_file(tm_basename, tm_config) + self.ssh_helper.upload_config_file(posixpath.basename(action_bulk_file), + action_bulk.format(**vpe_vars)) + self.ssh_helper.upload_config_file(posixpath.basename(full_tm_profile_file), + full_tm_profile.format(**vpe_vars)) LOG.info("Provision and start the %s", self.APP_NAME) - LOG.info(self.CFG_CONFIG) + LOG.info(config_file) LOG.info(self.CFG_SCRIPT) - self._build_pipeline_kwargs() + self._build_pipeline_kwargs(cfg_file='/tmp/' + config_basename) return self.PIPELINE_COMMAND.format(**self.pipeline_kwargs) -- cgit 1.2.3-korg