From 4bce5a017eecb80914ca4395cd380d9ff0e361ab Mon Sep 17 00:00:00 2001 From: Deepak S Date: Sun, 24 Sep 2017 21:57:08 -0700 Subject: [PATCH] Adding multi-port support for ixia taffic generator Change-Id: Ic8aa130f3cdc7bd8dec39d06a6b824340bf658b2 Signed-off-by: Deepak S Signed-off-by: Ross Brattain --- ...al_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml | 50 ++++++++++++++ .../nsut/vfw/vfw_vnf_topology_ixia_4port.yaml | 72 +++++++++++++++++++++ .../traffic_profiles/ixia_ipv4_latency.yaml | 4 +- .../vfw/vfw_ipv4_profile_muttiport.ixncfg | Bin 0 -> 77930 bytes .../vnf_descriptors/ixia_rfc2544_tpl.yaml | 32 ++------- samples/vnf_samples/vnf_descriptors/tg_ixload.yaml | 36 +++-------- .../network_services/libs/ixia_libs/test_IxNet.py | 12 ++-- .../network_services/libs/ixia_libs/IxNet/IxNet.py | 46 +++++++------ .../traffic_profile/ixia_rfc2544.py | 62 +++++++++--------- 9 files changed, 201 insertions(+), 113 deletions(-) create mode 100644 samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml create mode 100644 samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia_4port.yaml create mode 100644 samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg diff --git a/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml new file mode 100644 index 000000000..89842bee9 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/tc_baremetal_rfc2544_ipv4_1rule_1flow_64B_ixia_4port.yaml @@ -0,0 +1,50 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# vfw_ipv4_profile_1flows.ixncfg + +--- +schema: yardstick:task:0.1 +scenarios: +- type: NSPerf + traffic_profile: "../../traffic_profiles/ixia_ipv4_latency.yaml" + topology: vfw_vnf_topology_ixia_4port.yaml + nodes: + tg__0: trafficgen_1.yardstick + vnf__0: vnf.yardstick + options: + framesize: + private: {64B: 100} + public: {64B: 100} + flow: + src_ip: [{'tg__0': 'xe0'}, {'tg__0': 'xe2'}] + dst_ip: [{'tg__0': 'xe1'}, {'tg__0': 'xe3'}] + count: 1 + traffic_type: 4 + rfc2544: + allowed_drop_rate: 0.0001 - 0.0001 + vnf__0: + rules: acl_1rule.yaml + vnf_config: {lb_config: 'SW', lb_count: 2, worker_config: '1C/1T', worker_threads: 1} + nfvi_enable: True + runner: + type: Iteration + iterations: 10 + interval: 35 + ixia_profile: ../../traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg +context: + type: Node + name: yardstick + nfvi_type: baremetal + file: /etc/yardstick/nodes/pod_ixia_4port.yaml +#/etc/yardstick/nodes/pod_ixia.yaml diff --git a/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia_4port.yaml b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia_4port.yaml new file mode 100644 index 000000000..04b3de9f0 --- /dev/null +++ b/samples/vnf_samples/nsut/vfw/vfw_vnf_topology_ixia_4port.yaml @@ -0,0 +1,72 @@ +# Copyright (c) 2016-2017 Intel Corporation +# +# 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 +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +nsd:nsd-catalog: + nsd: + - id: vFW + name: vFW + short-name: vFW + description: scenario with vFW VNF + constituent-vnfd: + - member-vnf-index: '1' + vnfd-id-ref: tg__0 + VNF model: ../../vnf_descriptors/ixia_rfc2544_tpl.yaml + - member-vnf-index: '2' + vnfd-id-ref: vnf__0 + VNF model: ../../vnf_descriptors/vfw_vnf.yaml + + vld: + - id: uplink_0 + name: tg__0 to vnf__0 link 1 + type: ELAN + vnfd-connection-point-ref: + - member-vnf-index-ref: '1' + vnfd-connection-point-ref: xe0 + vnfd-id-ref: tg__0 + - member-vnf-index-ref: '2' + vnfd-connection-point-ref: xe0 + vnfd-id-ref: vnf__0 + + - id: downlink_0 + name: vnf__0 to tg__0 link 2 + type: ELAN + vnfd-connection-point-ref: + - member-vnf-index-ref: '2' + vnfd-connection-point-ref: xe1 + vnfd-id-ref: vnf__0 + - member-vnf-index-ref: '1' + vnfd-connection-point-ref: xe1 + vnfd-id-ref: tg__0 + + - id: uplink_1 + name: tg__0 to vnf__0 link 3 + type: ELAN + vnfd-connection-point-ref: + - member-vnf-index-ref: '1' + vnfd-connection-point-ref: xe2 + vnfd-id-ref: tg__0 + - member-vnf-index-ref: '2' + vnfd-connection-point-ref: xe2 + vnfd-id-ref: vnf__0 + + - id: downlink_1 + name: vnf__0 to tg__0 link 4 + type: ELAN + vnfd-connection-point-ref: + - member-vnf-index-ref: '2' + vnfd-connection-point-ref: xe3 + vnfd-id-ref: vnf__0 + - member-vnf-index-ref: '1' + vnfd-connection-point-ref: xe3 + vnfd-id-ref: tg__0 diff --git a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml index af74df2c9..a475173f2 100644 --- a/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml +++ b/samples/vnf_samples/traffic_profiles/ixia_ipv4_latency.yaml @@ -122,8 +122,8 @@ downlink_1: outer_l3v4: proto: "udp" - srcip4: "{{get(flow, 'flow.dst_ip1', '1.1.1.1-1.15.255.255') }}" - dstip4: "{{get(flow, 'flow.src_ip1', '90.90.1.1-90.105.255.255') }}" + srcip4: "{{get(flow, 'flow.dst_ip_1', '1.1.1.1-1.15.255.255') }}" + dstip4: "{{get(flow, 'flow.src_ip_1', '90.90.1.1-90.105.255.255') }}" count: "{{get(flow, 'flow.count', '1') }}" ttl: 32 dscp: 0 diff --git a/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg b/samples/vnf_samples/traffic_profiles/vfw/vfw_ipv4_profile_muttiport.ixncfg new file mode 100644 index 0000000000000000000000000000000000000000..76accc1ed55a4263faa187c0ea4d8b063405f38c GIT binary patch literal 77930 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 >O{ULR{{-- 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 literal 0 HcmV?d00001 diff --git a/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml b/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml index 69442b7c8..9b2a152f3 100644 --- a/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml +++ b/samples/vnf_samples/vnf_descriptors/ixia_rfc2544_tpl.yaml @@ -41,34 +41,10 @@ vnfd:vnfd-catalog: vdu: - id: trexgen-baremetal name: trexgen-baremetal - description: IXIAstateless traffic verifier - external-interface: - - name: xe0 - virtual-interface: - type: PCI-PASSTHROUGH - # Substitution variables MUST be quoted. Otherwise Python can misinterpet them. - vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen - local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen - local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen - driver: '{{ interfaces.xe0.driver}}' # Value filled by vnfdgen - dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen - local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen - dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen - bandwidth: 10 Gbps - vnfd-connection-point-ref: xe0 - - name: xe1 - virtual-interface: - type: PCI-PASSTHROUGH - vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen - local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen - local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen - driver: '{{ interfaces.xe1.driver}}' # Value filled by vnfdgen - dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen - local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen - dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen - bandwidth: 10 Gbps - vnfd-connection-point-ref: xe1 - + description: IXIAstateless traffic verifier + vm-flavor: + vcpu-count: '4' + memory-mb: '4096' benchmark: kpi: - rx_throughput_fps diff --git a/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml b/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml index b430d35bd..ad4953fce 100644 --- a/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml +++ b/samples/vnf_samples/vnf_descriptors/tg_ixload.yaml @@ -16,10 +16,11 @@ vnfd:vnfd-catalog: vnfd: - id: IxLoadTrafficGen - name: IxLoadTrafficGenVnfSshIntel + name: IxLoadTrafficGen short-name: IxLoadTrafficGenVnf description: IxLoad client/server connection details mgmt-interface: + vdu-id: ixloadgen-baremetal user: '{{user}}' # Value filled by vnfdgen password: '{{password}}' # Value filled by vnfdgen ip: '{{ip}}' # Value filled by vnfdgen @@ -32,35 +33,16 @@ vnfd:vnfd-catalog: py_bin_path: '{{tg_config.py_bin_path}}' dut_result_dir: '{{tg_config.dut_result_dir}}' version: '{{tg_config.version}}' + connection-point: + - name: xe0 + type: VPORT + - name: xe1 + type: VPORT + vdu: - id: abclient-baremetal name: abclient-baremetal description: AB client interface details - external-interface: - - name: xe0 - virtual-interface: - type: PCI-PASSTHROUGH - vpci: '{{ interfaces.xe0.vpci }}' # Value filled by vnfdgen - local_iface_name: '{{ interfaces.xe0.local_iface_name }}' # Value filled by vnfdgen - local_ip: '{{ interfaces.xe0.local_ip }}' # Value filled by vnfdgen - dst_ip: '{{ interfaces.xe0.dst_ip }}' # Value filled by vnfdgen - local_mac: '{{ interfaces.xe0.local_mac }}' # Value filled by vnfdgen - dst_mac: '{{ interfaces.xe0.dst_mac }}' # Value filled by vnfdgen - netmask: '{{ interfaces.xe0.netmask }}' # Value filled by vnfdgen - bandwidth: 10 Gbps - vnfd-connection-point-ref: xe0 - - name: xe1 - virtual-interface: - type: PCI-PASSTHROUGH - vpci: '{{ interfaces.xe1.vpci }}' # Value filled by vnfdgen - local_iface_name: '{{ interfaces.xe1.local_iface_name }}' # Value filled by vnfdgen - local_ip: '{{ interfaces.xe1.local_ip }}' # Value filled by vnfdgen - dst_ip: '{{ interfaces.xe1.dst_ip }}' # Value filled by vnfdgen - local_mac: '{{ interfaces.xe1.local_mac }}' # Value filled by vnfdgen - dst_mac: '{{ interfaces.xe1.dst_mac }}' # Value filled by vnfdgen - netmask: '{{ interfaces.xe1.netmask }}' # Value filled by vnfdgen - bandwidth: 10 Gbps - vnfd-connection-point-ref: xe1 benchmark: kpi: - complete_requests @@ -77,4 +59,4 @@ vnfd:vnfd-catalog: - requests_served_95% (ms) - requests_served_98% (ms) - requests_served_99% (ms) - - requests_served_100% (ms) \ No newline at end of file + - requests_served_100% (ms) diff --git a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py index 0c82d74a8..3f374fb50 100644 --- a/tests/unit/network_services/libs/ixia_libs/test_IxNet.py +++ b/tests/unit/network_services/libs/ixia_libs/test_IxNet.py @@ -82,10 +82,8 @@ class TestIxNextgen(unittest.TestCase): config = { 'chassis': '1.1.1.1', - 'card1': '1', - 'card2': '2', - 'port1': '2', - 'port2': '2', + 'cards': ['1', '2'], + 'ports': ['2', '2'], } ixnet_gen = IxNextgen(ixnet) @@ -673,10 +671,8 @@ class TestIxNextgen(unittest.TestCase): 'machine': 'test1', 'port': 'test5', 'chassis': 'test4', - 'card1': '0000', - 'port1': '07', - 'card2': '0001', - 'port2': '08', + 'cards': ['0000', '0001'], + 'ports': ['07', '08'], 'output_dir': 'test2', 'version': 'test3', 'bidir': True, diff --git a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py index 4b906508c..358e6e761 100644 --- a/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py +++ b/yardstick/network_services/libs/ixia_libs/IxNet/IxNet.py @@ -113,10 +113,10 @@ class IxNextgen(object): } MODE_SEEDS_MAP = { - 0: ('uplink_0', ['256', '2048']), + 0: ('uplink', ['256', '2048']), } - MODE_SEEDS_DEFAULT = 'downlink_0', ['2048', '256'] + MODE_SEEDS_DEFAULT = 'downlink', ['2048', '256'] @staticmethod def find_view_obj(view_name, views): @@ -125,24 +125,27 @@ class IxNextgen(object): @staticmethod def get_config(tg_cfg): + card = [] + port = [] external_interface = tg_cfg["vdu"][0]["external-interface"] - card_port0 = external_interface[0]["virtual-interface"]["vpci"] - card_port1 = external_interface[1]["virtual-interface"]["vpci"] - card0, port0 = card_port0.split(':')[:2] - card1, port1 = card_port1.split(':')[:2] + for intf in external_interface: + card_port0 = intf["virtual-interface"]["vpci"] + card0, port0 = card_port0.split(':')[:2] + card.append(card0) + port.append(port0) + cfg = { 'py_lib_path': tg_cfg["mgmt-interface"]["tg-config"]["py_lib_path"], 'machine': tg_cfg["mgmt-interface"]["ip"], 'port': tg_cfg["mgmt-interface"]["tg-config"]["tcl_port"], 'chassis': tg_cfg["mgmt-interface"]["tg-config"]["ixchassis"], - 'card1': card0, - 'port1': port0, - 'card2': card1, - 'port2': port1, + 'cards': card, + 'ports': port, 'output_dir': tg_cfg["mgmt-interface"]["tg-config"]["dut_result_dir"], 'version': tg_cfg["mgmt-interface"]["tg-config"]["version"], 'bidir': True, } + return cfg def __init__(self, ixnet=None): @@ -183,9 +186,13 @@ class IxNextgen(object): self.set_random_ip_multi_attribute(ip, seeds[1], fixed_bits, random_mask, l3_count) def add_ip_header(self, params, version): - for it, ep, i in self.iter_over_get_lists('/traffic', 'trafficItem', "configElement"): - mode, seeds = self.MODE_SEEDS_MAP.get(i, self.MODE_SEEDS_DEFAULT) - l3 = params[mode]['outer_l3'] + for it, ep, i in self.iter_over_get_lists('/traffic', 'trafficItem', "configElement", 1): + iter1 = (v['outer_l3'] for v in params.values() if str(v['id']) == str(i)) + try: + l3 = next(iter1, {}) + seeds = self.MODE_SEEDS_MAP.get(i, self.MODE_SEEDS_DEFAULT)[1] + except (KeyError, IndexError): + continue for ip, ip_bits, _ in self.iter_over_get_lists(ep, 'stack', 'field'): self.set_random_ip_multi_attributes(ip_bits, version, seeds, l3) @@ -222,10 +229,11 @@ class IxNextgen(object): def ix_assign_ports(self): vports = self.ixnet.getList(self.ixnet.getRoot(), 'vport') - ports = [ - (self._cfg['chassis'], self._cfg['card1'], self._cfg['port1']), - (self._cfg['chassis'], self._cfg['card2'], self._cfg['port2']), - ] + ports = [] + + chassis = self._cfg['chassis'] + ports = [(chassis, card, port) for card, port in + zip(self._cfg['cards'], self._cfg['ports'])] vport_list = self.ixnet.getList("/", "vport") self.ixnet.execute('assignPorts', ports, [], vport_list, True) @@ -276,10 +284,10 @@ class IxNextgen(object): def update_ether_multi_attributes(self, ether, l2): if "ethernet.header.destinationAddress" in ether: - self.update_ether_multi_attribute(ether, str(l2['dstmac'])) + self.update_ether_multi_attribute(ether, str(l2.get('dstmac', "00:00:00:00:00:02"))) if "ethernet.header.sourceAddress" in ether: - self.update_ether_multi_attribute(ether, str(l2['srcmac'])) + self.update_ether_multi_attribute(ether, str(l2.get('srcmac', "00:00:00:00:00:01"))) def ix_update_ether(self, params): for ti, ep, index in self.iter_over_get_lists('/traffic', 'trafficItem', diff --git a/yardstick/network_services/traffic_profile/ixia_rfc2544.py b/yardstick/network_services/traffic_profile/ixia_rfc2544.py index ee58172d8..28480b8e9 100644 --- a/yardstick/network_services/traffic_profile/ixia_rfc2544.py +++ b/yardstick/network_services/traffic_profile/ixia_rfc2544.py @@ -43,35 +43,39 @@ class IXIARFC2544Profile(TrexProfile): traffic = static_traffic[traffickey] # outer_l2 index = 0 - for key, value in profile_data[traffickey].items(): - framesize = value['outer_l2']['framesize'] - traffic['outer_l2']['framesize'] = framesize - traffic['framesPerSecond'] = True - traffic['bidir'] = False - traffic['outer_l2']['srcmac'] = \ - mac["src_mac_{}".format(traffic['id'])] - traffic['outer_l2']['dstmac'] = \ - mac["dst_mac_{}".format(traffic['id'])] - - # outer_l3 - if "outer_l3v6" in list(value.keys()): - traffic['outer_l3'] = value['outer_l3v6'] - srcip4 = value['outer_l3v6']['srcip6'] - traffic['outer_l3']['srcip4'] = srcip4.split("-")[0] - dstip4 = value['outer_l3v6']['dstip6'] - traffic['outer_l3']['dstip4'] = dstip4.split("-")[0] - else: - traffic['outer_l3'] = value['outer_l3v4'] - srcip4 = value['outer_l3v4']['srcip4'] - traffic['outer_l3']['srcip4'] = srcip4.split("-")[0] - dstip4 = value['outer_l3v4']['dstip4'] - traffic['outer_l3']['dstip4'] = dstip4.split("-")[0] - - traffic['outer_l3']['type'] = key - traffic['outer_l3']['count'] = value['outer_l3v4']['count'] - # outer_l4 - traffic['outer_l4'] = value['outer_l4'] - index = index + 1 + try: + for key, value in profile_data[traffickey].items(): + framesize = value['outer_l2']['framesize'] + traffic['outer_l2']['framesize'] = framesize + traffic['framesPerSecond'] = True + traffic['bidir'] = False + traffic['outer_l2']['srcmac'] = \ + mac["src_mac_{}".format(traffic['id'])] + traffic['outer_l2']['dstmac'] = \ + mac["dst_mac_{}".format(traffic['id'])] + + # outer_l3 + if "outer_l3v6" in list(value.keys()): + traffic['outer_l3'] = value['outer_l3v6'] + srcip4 = value['outer_l3v6']['srcip6'] + traffic['outer_l3']['srcip4'] = srcip4.split("-")[0] + dstip4 = value['outer_l3v6']['dstip6'] + traffic['outer_l3']['dstip4'] = dstip4.split("-")[0] + else: + traffic['outer_l3'] = value['outer_l3v4'] + srcip4 = value['outer_l3v4']['srcip4'] + traffic['outer_l3']['srcip4'] = srcip4.split("-")[0] + dstip4 = value['outer_l3v4']['dstip4'] + traffic['outer_l3']['dstip4'] = dstip4.split("-")[0] + + traffic['outer_l3']['type'] = key + traffic['outer_l3']['count'] = value['outer_l3v4']['count'] + # outer_l4 + traffic['outer_l4'] = value['outer_l4'] + index = index + 1 + except Exception: + continue + result.update({traffickey: traffic}) return result -- 2.16.6