aboutsummaryrefslogtreecommitdiffstats
path: root/samples/vnf_samples
diff options
context:
space:
mode:
authorDeepak S <deepak.s@linux.intel.com>2016-12-30 09:24:52 -0800
committerDeepak S <deepak.s@linux.intel.com>2017-01-19 08:29:35 +0530
commit8d7b81187071891317245a7e47a10dcfe70b3809 (patch)
tree6905348146fc77e6cfaa4d81d42ae901336432fb /samples/vnf_samples
parent06432a93864b7c742e3194cc1296cbdcb68d5cfc (diff)
Adding trex trafficgen example.
This patch uses trex trafficgen example to define dynamic traffic profiles and how it can be mapped to real world traffic. JIRA: YARDSTICK-492 Change-Id: Ica24957ebf43315a8d81adabd4745c27d3c7c36a Signed-off-by: Deepak S <deepak.s@linux.intel.com>
Diffstat (limited to 'samples/vnf_samples')
-rw-r--r--samples/vnf_samples/nsut/2trex/tc_trex_baremetal_context.yaml43
-rw-r--r--samples/vnf_samples/nsut/2trex/trex_tg_topology.yaml50
-rw-r--r--samples/vnf_samples/traffic_profiles/example.yaml198
-rw-r--r--samples/vnf_samples/traffic_profiles/fixed.yaml24
-rw-r--r--samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml75
5 files changed, 390 insertions, 0 deletions
diff --git a/samples/vnf_samples/nsut/2trex/tc_trex_baremetal_context.yaml b/samples/vnf_samples/nsut/2trex/tc_trex_baremetal_context.yaml
new file mode 100644
index 000000000..e0ba6d96f
--- /dev/null
+++ b/samples/vnf_samples/nsut/2trex/tc_trex_baremetal_context.yaml
@@ -0,0 +1,43 @@
+# 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.
+
+---
+schema: "yardstick:task:0.1"
+
+scenarios:
+-
+ type: NSPerf
+ traffic_profile: ../../traffic_profiles/fixed.yaml
+ topology: trex_tg_topology.yaml # TODO: look in relative path where the tc.yaml is found
+
+ nodes: # This section is copied from pod.xml or resolved via Heat
+ trexgen__1: trafficgen_1.yardstick
+ trexvnf__1: vnf.yardstick
+
+ vnf_options:
+ trexgen__1:
+ target_ip: trexvnf__1.xe0.local_ip # TODO: resolve to config vars
+ trexvnf__1:
+ target_ip: trexgen__1.xe1.local_ip # TODO: resolve to config vars
+ runner:
+ type: Duration
+ duration: 10
+
+context:
+ type: Node # Heat, Node(baremetal), Node-ovs, Node-sriov
+ name: yardstick
+ #file: pod.yaml
+ # image: yardstick-baremetal # only important for heat context
+ nfvi_type: baremetal # options: baremetal, sriov, ovs-virtio TODO: what about mixed scenarios?
+ file: /etc/yardstick/nodes/pod.yaml
diff --git a/samples/vnf_samples/nsut/2trex/trex_tg_topology.yaml b/samples/vnf_samples/nsut/2trex/trex_tg_topology.yaml
new file mode 100644
index 000000000..1a9b50c84
--- /dev/null
+++ b/samples/vnf_samples/nsut/2trex/trex_tg_topology.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.
+
+nsd:nsd-catalog:
+ nsd:
+ - id: trex-tg-topology
+ name: trex-tg-topology
+ short-name: trex-tg-topology
+ description: trex-tg-topology
+ constituent-vnfd:
+ - member-vnf-index: '1'
+ vnfd-id-ref: trexgen__1
+ VNF model: ../../vnf_descriptors/tg_trex_tpl.yaml #VNF type
+ - member-vnf-index: '2'
+ vnfd-id-ref: trexvnf__1
+ VNF model: ../../vnf_descriptors/tg_trex_tpl.yaml #VNF type
+
+ vld:
+ - id: private
+ name: trexgen__1 to trexvnf__1 link 1
+ type: ELAN
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: '1'
+ vnfd-connection-point-ref: xe0
+ vnfd-id-ref: trexgen
+ - member-vnf-index-ref: '2'
+ vnfd-connection-point-ref: xe0
+ vnfd-id-ref: trexgen
+
+ - id: public
+ name: trexvnf__1 to trexgen__1 link 2
+ type: ELAN
+ vnfd-connection-point-ref:
+ - member-vnf-index-ref: '1'
+ vnfd-connection-point-ref: xe1
+ vnfd-id-ref: trexgen
+ - member-vnf-index-ref: '2'
+ vnfd-connection-point-ref: xe1
+ vnfd-id-ref: trexgen
diff --git a/samples/vnf_samples/traffic_profiles/example.yaml b/samples/vnf_samples/traffic_profiles/example.yaml
new file mode 100644
index 000000000..71371995e
--- /dev/null
+++ b/samples/vnf_samples/traffic_profiles/example.yaml
@@ -0,0 +1,198 @@
+# 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.
+
+schema: "nsb:traffic_profile:0.1"
+
+# This file is a template, it will be filled with values from tc.yaml before passing to the traffic generator
+
+name: rfc2544
+description: Traffic profile to run RFC2544 latency
+traffic_profile:
+ traffic_type : rfc2544 # defines traffic behavior - constant or look for highest possible throughput
+ frame_rate : 100 # pc of linerate
+ flow_number: {{ flow.number }} #This decides how many frames should be generated. Each frame should have a random of the field
+ # that specifies a range (e.g. ipv4 address, port)
+
+private:
+ - ipv4_1:
+ outer_l2:
+ framesize:
+ 64B: {{ get(imix_small, 12) }}
+ 128B: {{get(imix_128B, 12) }}
+ 256B: {{get(imix_256B, 12) }}
+ 373b: {{ get(imix_373B, 12) }}
+ 570B: {{get(imix_570B, 12) }}
+ 1400B: {{get(imix_1400B, 12) }}
+ 1518b: {{get(imix_1500B, 12) }}
+ srcmac: {{src_mac}} # xe0.local_mac
+ dstmac: {{dst_mac}} # xe0.dst_mac
+ QinQ:
+ S-VLAN:
+ id: {{ get(flow.s_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ C-VLAN:
+ id: {{ get(flow.c_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ mpls:
+ label: {{ get(flow.mpls_label, "0") }}
+
+ outer_l3v4:
+ proto: {{ get(flow.outer_proto, "udp") }},
+ srcip4: {{ get(flow.outer_srcip4, "1.1.1.1") }}
+ dstip4: {{ get(flow.outer_dstip4, "90.90.90.90") }}
+ ttl: 32
+ dscp: {{ get(flow.tos, 0) }}
+
+ outer_l4:
+ srcport: {{ get(flow.outer_srcport, "3002") }}
+ dstport: {{ get(flow.outer_dstport, "3001") }}
+ vni: {{ get(flow.vxlan_vni, "2345") }} #optional
+ inner_l2: #optional
+ srcmac: {{ get(flow.inner_srcmac, "00:00:00:00:00:00") }}
+ dstmac: {{ get(flow.inner_dstmac, "00:00:00:00:00:00") }}
+
+ inner_l3v4: #optional
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip4: {{ get(flow.inner_srcip4, "1.1.1.1") }}
+ dstip4: {{ get(flow.inner_dstip4, "90.90.90.90") }}
+ ttl: 32
+ dscp: {{ get(flow.inner_tos, 0) }}
+
+ inner_l3v6:
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip6: {{ get(flow.inner_srcip6, "2001::1") }}
+ dstip6: {{ get(flow.outer_dstip6, "2001::11") }}
+ ttl: 32
+ tc: {{ get(flow.inner_tos, 0) }}
+
+ inner_l4:
+ srcport: {{ get(flow.inner_srcport, "3002") }}
+ dstport: {{ get(flow.inner_dstport, "3001") }}
+
+ - ipv6_2:
+ outer_l2:
+ framesize:
+ 64B: {{ get(imix_small, 12) }}
+ 128B: {{get(imix_128B, 12) }}
+ 256B: {{get(imix_256B, 12) }}
+ 373b: {{ get(imix_373B, 12) }}
+ 570B: {{get(imix_570B, 12) }}
+ 1400B: {{get(imix_1400B, 12) }}
+ 1518b: {{get(imix_1500B, 12) }}
+ srcmac: {{src_mac}} # xe0.local_mac
+ dstmac: {{dst_mac}} # xe0.dst_mac
+ QinQ:
+ S-VLAN:
+ id: {{ get(flow.s_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ C-VLAN:
+ id: {{ get(flow.c_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ mpls:
+ label: {{ get(flow.mpls_label, "0") }}
+
+ outer_l3v6:
+ proto: {{ get(flow.outer_proto, "udp") }},
+ srcip6: {{ get(flow.outer_srcip6, "2001::1") }}
+ dstip6: {{ get(flow.outer_dstip6, "2001::11") }}
+ ttl: 32
+ tc: {{ get(flow.outer_tos, 0) }}
+
+ outer_l4:
+ srcport: {{ get(flow.outer_srcport, "3002") }}
+ dstport: {{ get(flow.outer_dstport, "3001") }}
+ vni: {{ get(flow.vxlan_vni, "2345") }} #optional
+ inner_l2: #optional
+ srcmac: {{ get(flow.inner_srcmac, "00:00:00:00:00:00") }}
+ dstmac: {{ get(flow.inner_dstmac, "00:00:00:00:00:00") }}
+
+ inner_l3v4: #optional
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip4: {{ get(flow.inner_srcip4, "1.1.1.1") }}
+ dstip4: {{ get(flow.inner_dstip4, "90.90.90.90") }}
+ ttl: 32
+ dscp: {{ get(flow.inner_tos, 0) }}
+
+ inner_l3v6:
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip6: {{ get(flow.inner_srcip6, "2001::1") }}
+ dstip6: {{ get(flow.outer_dstip6, "2001::11") }}
+ ttl: 32
+ tc: {{ get(flow.inner_tos, 0) }}
+
+ inner_l4:
+ srcport: {{ get(flow.inner_srcport, "3002") }}
+ dstport: {{ get(flow.inner_dstport, "3001") }}
+
+public:
+ - ipv4_2:
+ outer_l2:
+ framesize:
+ 64B: {{ get(imix_small, 12) }}
+ 128B: {{get(imix_128B, 12) }}
+ 256B: {{get(imix_256B, 12) }}
+ 373b: {{ get(imix_373B, 12) }}
+ 570B: {{get(imix_570B, 12) }}
+ 1400B: {{get(imix_1400B, 12) }}
+ 1518b: {{get(imix_1500B, 12) }}
+ srcmac: {{get(private.ipv4_1.dst_mac}} # xe0.local_mac
+ dstmac: {{get)private.ipv4_1.src_mac}} # xe0.dst_mac
+ QinQ:
+ S-VLAN:
+ id: {{ get(flow.s_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ C-VLAN:
+ id: {{ get(flow.c_vlan_range, "0") }}
+ priority: 0
+ cfi: 0
+ mpls:
+ label: {{ get(flow.mpls_label, "0") }}
+
+ outer_l3v4:
+ proto: {{ get(flow.outer_proto, "udp") }},
+ srcip4: {{ get(private.ipv4_1.outer_l3v4.dstip4) }}
+ dstip4: {{ get(private.ipv4_1.outer_l3v4.srcip4) }}
+ ttl: 32
+ dscp: {{ get(flow.tos, 0) }}
+
+ outer_l4:
+ srcport: {{ get(private.ipv4_1.outer_l4.dstport) }}
+ dstport: {{ get(private.ipv4_1.outer_l4.srcport) }}
+ vni: {{ get(flow.vxlan_vni, "2345") }} #optional
+ inner_l2: #optional
+ srcmac: {{ get(private.ipv4_1.outer_l4.inner_l2.dstmac) }}
+ dstmac: {{ get(private.ipv4_1.outer_l4.inner_l2.srcmac) }}
+
+ inner_l3v4: #optional
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip4: {{ get(private.ipv4_1.inner_l3v4.dstip4) }}
+ dstip4: {{ get(private.ipv4_1.inner_l3v4.srcip4) }}
+ ttl: 32
+ dscp: {{ get(flow.inner_tos, 0) }}
+
+ inner_l3v6:
+ proto: {{ get(flow.inner_proto, "udp") }},
+ srcip6: {{ get(private.ipv4_1.inner_l3v6.dstip6) }}
+ dstip6: {{ get(private.ipv4_1.inner_l3v6.srcip6) }}
+ ttl: 32
+ tc: {{ get(flow.inner_tos, 0) }}
+
+ inner_l4:
+ srcport: {{ get(private.ipv4_1.inner_l4.dstport) }}
+ dstport: {{ get(private.ipv4_1.inner_l4.srcport) }}
diff --git a/samples/vnf_samples/traffic_profiles/fixed.yaml b/samples/vnf_samples/traffic_profiles/fixed.yaml
new file mode 100644
index 000000000..afccd6fd4
--- /dev/null
+++ b/samples/vnf_samples/traffic_profiles/fixed.yaml
@@ -0,0 +1,24 @@
+# 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.
+
+schema: "nsb:traffic_profile:0.1"
+
+name: fixed
+description: Fixed traffic profile to run UDP traffic
+
+traffic_profile:
+ traffic_type: FixedProfile
+ frame_rate: 100 # pps
+ flow_number: 10
+ frame_size: 64
diff --git a/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml b/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml
new file mode 100644
index 000000000..b1641836b
--- /dev/null
+++ b/samples/vnf_samples/vnf_descriptors/tg_trex_tpl.yaml
@@ -0,0 +1,75 @@
+# 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.
+
+vnfd:vnfd-catalog:
+ vnfd:
+ - id: TrexTrafficGen # NSPerf class mapping
+ name: trexgen
+ short-name: trexgen
+ description: TRex stateless traffic generator for tests
+ vm-flavor:
+ vcpu-count: '4'
+ memory-mb: '4096'
+ mgmt-interface:
+ vdu-id: trexgen-baremetal
+ user: '{{user}}' # Value filled by vnfdgen
+ password: '{{password}}' # Value filled by vnfdgen
+ ip: '{{ip}}' # Value filled by vnfdgen
+ connection-point:
+ - name: xe0
+ type: VPORT
+ - name: xe1
+ type: VPORT
+ vdu:
+ - id: trexgen-baremetal
+ name: trexgen-baremetal
+ description: TRex stateless traffic generator for tests
+ 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_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
+ vld_id: '{{ interfaces.xe0.vld_id }}' # 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_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
+ vld_id: '{{ interfaces.xe1.vld_id }}' # Value filled by vnfdgen
+ bandwidth: 10 Gbps
+ vnfd-connection-point-ref: xe1
+
+ benchmark:
+ kpi:
+ - rx_throughput_fps
+ - tx_throughput_fps
+ - tx_throughput_mbps
+ - rx_throughput_mbps
+ - tx_throughput_pc_linerate
+ - rx_throughput_pc_linerate
+ - min_latency
+ - max_latency
+ - avg_latency