aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincenzo Riccobene <vincenzox.m.riccobene@intel.com>2015-12-24 14:08:58 +0000
committerJörgen Karlsson <jorgen.w.karlsson@ericsson.com>2015-12-27 23:19:37 +0000
commit3f55749cad3033219adfb47885b6269b207f1588 (patch)
treed53bbbeb9af0535611ab3c50893d0659a1169e67
parentd09c1cf0ed3a1af45546129ecd8d648ce703f650 (diff)
Complete all the code and files required to run ApexLake
Inludes the last files required by ApexLake for a complete execution. JIRA: YARDSTICK-35 Change-Id: I4315b8081554c8fad98c8fa72f9e2796ecb9360b Signed-off-by: Vincenzo Riccobene <vincenzox.m.riccobene@intel.com>
-rw-r--r--yardstick/vTC/apexlake/MANIFEST.in7
-rw-r--r--yardstick/vTC/apexlake/README.md116
-rw-r--r--yardstick/vTC/apexlake/apexlake.conf69
-rw-r--r--yardstick/vTC/apexlake/heat_templates/stress_workload.yaml112
-rw-r--r--yardstick/vTC/apexlake/heat_templates/vTC.yaml167
-rw-r--r--yardstick/vTC/apexlake/setup.py38
-rw-r--r--yardstick/vTC/apexlake/tests/data/common/conf.cfg43
-rw-r--r--yardstick/vTC/apexlake/tests/data/common/file_replacement.txt1
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp199
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv3
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv5
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp199
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json1
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml199
-rw-r--r--yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json1
25 files changed, 2160 insertions, 0 deletions
diff --git a/yardstick/vTC/apexlake/MANIFEST.in b/yardstick/vTC/apexlake/MANIFEST.in
new file mode 100644
index 000000000..57649e597
--- /dev/null
+++ b/yardstick/vTC/apexlake/MANIFEST.in
@@ -0,0 +1,7 @@
+recursive-include bin *.py
+recursive-include benchmarks *.py
+recursive-include heat_templates *
+recursive-include packet_generators *
+recursive-include etc *.cfg *.json
+include *.py
+include README.md
diff --git a/yardstick/vTC/apexlake/README.md b/yardstick/vTC/apexlake/README.md
new file mode 100644
index 000000000..ca4f4ded6
--- /dev/null
+++ b/yardstick/vTC/apexlake/README.md
@@ -0,0 +1,116 @@
+Welcome to ApexLake's documentation!
+====================================
+ApexLake is a framework that provides automatic execution of experiment and related data collection to help
+the user validating the infrastructure from a Virtual Network Function perspective.
+
+Install framework and dependencies
+----------------------------------
+Before to start the framework, a set of dependencies are required.
+In the following a set of instructions to be executed on the Linux shell to install dependencies and configure the environment.
+
+1. Install dependencies
+ - # apt-get install python-dev
+ - # apt-get install python-pip
+ - # apt-get install python-mock
+ - # apt-get install tcpreplay
+ - # apt-get install libpcap-dev
+
+2. Install the framework on the system
+ - # python setup.py install
+
+3. Source OpenStack openrc file
+ - $ source openrc
+
+4. Create 2 Networks (and subnets) based on VLANs (provider:network_type = vlan) in Neutron
+ - $ neutron net-create apexlake_inbound_network --provider:network_type vlan --provider:physical_network physnet1
+ - $ neutron subnet-create apexlake_inbound_network 192.168.0.0/24 --name apexlake_inbound_subnet
+ - $ neutron net-create apexlake_outbound_network --provider:network_type vlan --provider:physical_network physnet1
+ - $ neutron subnet-create apexlake_outbound_network 192.168.1.0/24 --name apexlake_outbound_subnet
+
+5. Insert VLAN tags related to the networks have to ApexLake, either:
+ - into the "conf.cfg" configuration file, or
+ - through the Python API.
+
+
+Install and configure DPDK Pktgen
++++++++++++++++++++++++++++++++++
+The execution of the framework is based on DPDK Pktgen.
+If DPDK Pktgen has not been installed on the system by the user, it is necessary to download, compile and configure it.
+The user can create a directory and download the dpdk packet generator source code:
+ - $ cd experimental_framework/libraries
+ - $ mkdir dpdk_pktgen
+ - $ git clone https://github.com/pktgen/Pktgen-DPDK.git
+
+For the installation and configuration of DPDK and DPDK Pktgen please follow the official DPDK Pktgen README file.
+Once the installation is completed, it is necessary to load the DPDK kernel driver, as follow:
+ - # insmod uio
+ - # insmod DPDK_DIR/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko
+
+It is required to properly set the configuration file according to the system on Pktgen runs on.
+An example is provided in the following:
+
+ - [PacketGen]
+ - packet_generator = dpdk_pktgen
+ - pktgen_directory = /home/user/apexlake/experimental_framework/libraries/dpdk_pktgen/dpdk/examples/pktgen/
+ -- This is the directory where the packet generator is installed (if the user previously installed dpdk-pktgen, it is required to provide the director where it is installed).
+ - dpdk_directory = /home/user/apexlake/experimental_framework/libraries/Pktgen-DPDK/dpdk/
+ -- This is the directory where DPDK is installed
+ - program_name = app/app/x86_64-native-linuxapp-gcc/pktgen
+ -- This is the name of the dpdk-pktgen program that starts the packet generator
+ - coremask = 1f
+ -- DPDK coremask (see DPDK-Pktgen readme)
+ - memory_channels = 3
+ -- DPDK memory channels (see DPDK-Pktgen readme)
+ - name_if_1 = p1p1
+ -- Name of the interface of the pktgen to be used to send traffic
+ - name_if_2 = p1p2
+ -- Name of the interface of the pktgen to be used to receive traffic
+ - bus_slot_nic_1 = 01:00.0
+ -- PCI bus address correspondent to the if_1
+ - bus_slot_nic_2 = 01:00.1
+ -- PCI bus address correspondent to the if_2
+
+
+To find the parameters related to names of the NICs and addresses of the PCI buses the user may find useful to run the DPDK tool nic_bind as follows:
+
+ - $ DPDK_DIR/tools/dpdk_nic_bind.py --status
+
+which lists the NICs available on the system, show the available drivers and bus addresses for each interface.
+Please make sure to select NICs which are DPDK compatible.
+
+Installation and configuration of smcroute
+++++++++++++++++++++++++++++++++++++++++++
+The user is required to install smcroute which is used by the framework to support multicast communications.
+In the following a list of commands to be ran to download and install smroute is provided.
+
+ - $ cd ~
+ - $ git clone https://github.com/troglobit/smcroute.git
+ - $ cd smcroute
+ - $ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ - $ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ - $ ./autogen.sh
+ - $ ./configure
+ - $ make
+ - $ sudo make install
+ - $ cd ..
+
+It is also required to create a configuration file using the following command:
+
+ - $ SMCROUTE_NIC=(name of the nic)
+
+where name of the nic is the name used previously for the variable "name_if_2".
+In the example it would be:
+
+ - $ SMCROUTE_NIC=p1p2
+
+Then create the smcroute configuration file /etc/smcroute.conf
+
+ - $echo mgroup from $SMCROUTE_NIC group 224.192.16.1 > /etc/smcroute.conf
+
+
+Experiment using SR-IOV configuration on the compute node
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+In order to enable SR-IOV interfaces on the physical NIC of the compute node, a compatible NIC is required.
+NIC configuration depends on model and vendor. After proper configuration to support SR-IOV, a proper configuration of openstack is required.
+For further information, please look at the following link:
+https://wiki.openstack.org/wiki/SR-IOV-Passthrough-For-Networking
diff --git a/yardstick/vTC/apexlake/apexlake.conf b/yardstick/vTC/apexlake/apexlake.conf
new file mode 100644
index 000000000..56937d2ef
--- /dev/null
+++ b/yardstick/vTC/apexlake/apexlake.conf
@@ -0,0 +1,69 @@
+[General]
+## template_base is the name of the base template from which generate all the others
+#template_base_name = vTC.yaml
+## Benchmarks to be executed on the VNF under test (uncomment one of the following)
+#benchmarks = instantiation_validation_benchmark.InstantiationValidationBenchmark
+#benchmarks = instantiation_validation_noisy_neighbors_benchmark.InstantiationValidationNoisyNeighborsBenchmark
+#benchmarks = rfc2544_throughput_benchmark.RFC2544ThroughputBenchmark
+#benchmarks = multi_tenancy_throughput_benchmark.MultiTenancyThroughputBenchmark
+## Number of iterations
+#iterations = 1
+#debug = true
+
+
+[OpenStack]
+## ip_controller is the IP address of the OpenStack Controller
+#ip_controller = 10.2.1.1
+## Heat URL is the URL for the Heat endpoint
+#heat_url = http://IP_ADDRESS_CONTROLLER:8004/v1/TENANT_ID
+## user is the OpenStack user name
+#user = admin
+## password is the OpenStack password
+#password = password
+## auth_uri is the authentication URI provided by keystone
+#auth_uri = http://IP_ADDRESS_CONTROLLER:5000/v2.0
+## project is the name of the project on which create the VNF instances
+#project = demo
+
+
+[Experiment-VNF]
+## List of all the variables and the values that will be tested by the framework
+#VNIC_TYPE = @string "direct", "normal"
+#VTC_FLAVOR = @string "m1.small" "m1.medium" "m1.large"
+
+
+[InfluxDB]
+influxdb_ip_address = 192.168.1.1
+influxdb_port = 8086
+influxdb_db_name = database
+
+
+[PacketGen]
+packet_generator = dpdk_pktgen
+pktgen_directory = /root/programs/Pktgen-DPDK/dpdk/examples/pktgen/
+dpdk_directory = /root/programs/Pktgen-DPDK/dpdk/
+program_name = app/app/x86_64-native-linuxapp-gcc/pktgen
+coremask = 1f
+memory_channels = 3
+bus_slot_nic_1 = 01:00.0
+bus_slot_nic_2 = 01:00.1
+name_if_1 = p2p1
+name_if_2 = p2p2
+
+
+[Deployment-parameters]
+#default_net = monitoring
+#default_subnet = monitoring_subnet
+#source_net = inbound_traffic_network
+#source_subnet = inbound_traffic_subnet
+#destination_net = destination_B_network
+#destination_subnet = destination_B_subnet
+#destination_subnet = destination_B_subnet
+#key_name = destination_B_subnet
+
+
+[Testcase-parameters]
+#packet_size = 1280
+#throughput = 1
+#vlan_sender = 1000
+#vlan_receiver = 1001 \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml b/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml
new file mode 100644
index 000000000..1a2f7dbb3
--- /dev/null
+++ b/yardstick/vTC/apexlake/heat_templates/stress_workload.yaml
@@ -0,0 +1,112 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ nic_type:
+ type: string
+ default: normal
+ name:
+ type: string
+ default: cpu_stress
+ cores:
+ type: string
+ memory:
+ type: string
+
+resources:
+ internal_net:
+ type: OS::Neutron::Net
+ properties:
+ name: traffic_network
+ internal_subnet:
+ type: OS::Neutron::Subnet
+ properties:
+ network_id: { get_resource: internal_net }
+ cidr: 10.100.0.0/24
+
+ router:
+ properties:
+ admin_state_up: true
+ name: router
+ type: OS::Neutron::Router
+
+ router_gateway:
+ properties:
+ network: external
+ router_id: { get_resource: router }
+ type: OS::Neutron::RouterGateway
+
+ router_interface_0:
+ properties:
+ router_id: { get_resource: router }
+ subnet_id: { get_resource: internal_subnet }
+ type: OS::Neutron::RouterInterface
+
+ vm1_port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_resource: internal_net }
+ binding:vnic_type: { get_param: nic_type }
+ fixed_ips:
+ - subnet: { get_resource: internal_subnet }
+
+ flavor_1:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 4096
+ vcpus: 4
+
+ vm1:
+ type: OS::Nova::Server
+ properties:
+ name: traffic_vm1
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ ifconfig eth1 up
+ dhclient eth1
+
+ sed -i 's/localhost/localhost traffic_vm1/g' /etc/hosts
+ touch /etc/resolfconf/resolv.conf.d/tail
+ echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/tail
+ resolvconf -u
+
+ # Installation of stress
+ apt-get install -y stress
+
+ cd /home/clouduser
+ # Setup merlin
+ rm -rf merlin
+ mkdir merlin
+ cd merlin
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ apt-get install -y zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role=cpu_stress
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # workload setup
+ nohup stress -c #CORES --vm-bytes #MEMORY
+
+ params:
+ $NAME: { get_param: name }
+ $CORES: { get_param: cores }
+ $MEMORY: { get_param: memory }
+
+ flavor: { get_resource: flavor_1 }
+ networks:
+ - port: { get_resource: vm1_port_1 }
diff --git a/yardstick/vTC/apexlake/heat_templates/vTC.yaml b/yardstick/vTC/apexlake/heat_templates/vTC.yaml
new file mode 100644
index 000000000..e0163e872
--- /dev/null
+++ b/yardstick/vTC/apexlake/heat_templates/vTC.yaml
@@ -0,0 +1,167 @@
+heat_template_version: 2014-10-16
+description: HOT template to deploy a vitual Traffic Classifier
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 2000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+ ### DEFAULT NETWORK FOR MNGM
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ #key_name: { get_param: key_name }
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+ # Creation of a user
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ # Install vTC Dependencies
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev bison flex byacc libjson0-dev libcurl4-gnutls-dev jq dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+ apt-get install -y byacc libtool libcurl4-openssl-dev
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ cd /home/clouduser
+
+ # Setup multicast
+ echo mgroup from eth1 group 224.192.16.1 > /etc/smcroute.conf
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ rm resp.json
+ curl -X POST -u "mPkgwvJPsTFS8hYmHk:SDczcrK4cvnkMRWSEchB3ANcWbqFXqPx" https://bitbucket.org/site/oauth2/access_token -d grant_type=refresh_token -d refresh_token=38uFQuhEdPvCTbhc7k >> resp.json
+ access_token=`jq -r '.access_token' resp.json`
+ git clone https://x-token-auth:${access_token}@bitbucket.org/akiskourtis/vtc.git
+ cd vtc
+ git checkout -b stable
+ #Build nDPI library
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+
+ #Build PF_RING library
+ cd ..
+ cd PF_RING
+ make
+ #Build PF_RING examples, including the modified pfbridge, with nDPI integrated.
+ cd userland/examples/
+ sed -i 's#EXTRA_LIBS =#EXTRA_LIBS='"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c#' ./Makefile
+ sed -i 's# -Ithird-party# -Ithird-party/ -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'#' ./Makefile
+ echo $NDPI_DIR
+ make
+ cd ../..
+ cd ..
+ cd ..
+
+ # To use PF_RING driver use the following
+ #sudo rmmod pf_ring
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=16384 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ sleep 5
+
+ # To use the Linux kernel driver use the following
+ cd /home/clouduser/
+ sudo nohup ./vtc/nDPI/example/ndpiReader -i eth1 -a eth2 &
+ sleep 5
+
+ curl --data-ascii "{\"classification_rules\":[{\"RuleId\":\"1\",\"ToS\":\"16\"}]}" http://localhost:9999/classifier/classification_rules/224.192.16.1 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ #$IP_FAMILY: { get_param: ip_family }
+ flavor: #vtc_flavor
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/setup.py b/yardstick/vTC/apexlake/setup.py
new file mode 100644
index 000000000..e33b5bfc8
--- /dev/null
+++ b/yardstick/vTC/apexlake/setup.py
@@ -0,0 +1,38 @@
+"""
+Experimental Framework
+"""
+
+from distutils.core import setup
+
+
+# TODO: Add instruction to compile the test_sniff
+
+setup(name='apexlake',
+ version='1.0',
+ description='Framework to automatically run experiments/benchmarks '
+ 'with VMs within OpenStack environments',
+ author='Intel Research and Development Ireland Ltd',
+ author_email='vincenzo.m.riccobene@intel.com',
+ license='Apache 2.0',
+ url='www.intel.com',
+ packages=['experimental_framework',
+ 'experimental_framework.benchmarks',
+ 'experimental_framework.packet_generators',
+ 'experimental_framework.libraries',
+ 'experimental_framework.constants'],
+ include_package_data=True,
+ package_data={
+ 'experimental_framework': [
+ 'packet_generators/dpdk_pktgen/*.lua',
+ 'packet_generators/pcap_files/*.pcap',
+ 'packet_generators/pcap_files/*.sh',
+ 'libraries/packet_checker/*'
+ ]
+ },
+ data_files=[
+ ('/etc/apexlake/', ['apexlake.conf']),
+ ('/etc/apexlake/heat_templates/',
+ ['heat_templates/vTC.yaml']),
+ ('/etc/apexlake/heat_templates/',
+ ['heat_templates/stress_workload.yaml'])
+ ])
diff --git a/yardstick/vTC/apexlake/tests/data/common/conf.cfg b/yardstick/vTC/apexlake/tests/data/common/conf.cfg
new file mode 100644
index 000000000..9266647e8
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/common/conf.cfg
@@ -0,0 +1,43 @@
+[General]
+template_base_name = t_name
+benchmarks = b_marks
+iterations = 1
+
+[OpenStack]
+ip_controller =
+heat_url =
+user =
+password =
+auth_uri =
+project =
+
+
+[Experiment-VNF]
+VNIC1_TYPE = @string "normal" "direct" @costs '0', '1'
+VNIC2_TYPE = @string "normal", "direct" @costs '0', '1'
+VCPU = @numeric "4"
+RAM = @numeric "4096"
+
+
+[PacketGen]
+packet_generator = dpdk_pktgen
+pktgen_directory = pktgen_dir
+dpdk_directory = dpdk_dir
+program_name = app/app/x86_64-native-linuxapp-gcc/pktgen
+coremask = 1f
+memory_channels = 3
+bus_slot_nic_1 = 01:00.0
+name_if_1 = enp1s0f0
+bus_slot_nic_2 = 01:00.1
+name_if_2 = enp1s0f2
+
+
+[Deployment-parameters]
+param_1 = val_1
+param_2 = val_2
+param_3 = val_3
+param_4 = val_4
+
+
+[Testcase-parameters]
+test_case_param = 1280
diff --git a/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt b/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt
new file mode 100644
index 000000000..8122d9a91
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/common/file_replacement.txt
@@ -0,0 +1 @@
+Test for the replacement of strings into a file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp
new file mode 100644
index 000000000..aa3959fc1
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait.tmp
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: #ram
+ vcpus: #vcpus
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs: \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml
new file mode 100644
index 000000000..5788980b0
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json
new file mode 100644
index 000000000..3af9a1cc7
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_1.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml
new file mode 100644
index 000000000..44a81d081
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json
new file mode 100644
index 000000000..9f246891d
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/VTC_base_single_vm_wait_2.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml
new file mode 100644
index 000000000..5788980b0
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json
new file mode 100644
index 000000000..3af9a1cc7
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_1.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml
new file mode 100644
index 000000000..44a81d081
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json
new file mode 100644
index 000000000..9f246891d
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/generated_templates/experiment_2.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv
new file mode 100644
index 000000000..f5f2932d0
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/benchmark_1.csv
@@ -0,0 +1,3 @@
+conf_1;conf_3;conf_2;point_4;point_5;point_6;point_1;point_2;point_3
+conf_value_1;conf_value_3;conf_value_2;?;?;?;value_1;value_2;value_3
+conf_value_1;conf_value_3;conf_value_2;value_4;value_5;value_6;?;?;?
diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json
new file mode 100644
index 000000000..ff4cebf41
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_experiments/experiment_1/metadata.json
@@ -0,0 +1 @@
+{"location": "tests/data/experiments/experiment_1/metadata.json", "item_2": "value_2", "item_3": "value_3", "item_1": "value_1"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv b/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv
new file mode 100644
index 000000000..4662dd2be
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_experiments/results_benchmark_1.csv
@@ -0,0 +1,5 @@
+conf_5;conf_4;conf_6;conf_1;conf_3;conf_2;point_12;point_10;point_11;point_4;point_5;point_6;point_8;point_9;point_7;point_1;point_2;point_3
+?;?;?;conf_value_1;conf_value_3;conf_value_2;?;?;?;?;?;?;?;?;?;value_1;value_2;value_3
+?;?;?;conf_value_1;conf_value_3;conf_value_2;?;?;?;value_4;value_5;value_6;?;?;?;?;?;?
+conf_value_5;conf_value_4;conf_value_6;?;?;?;?;?;?;?;?;?;value_8;value_9;value_7;?;?;?
+conf_value_5;conf_value_4;conf_value_6;?;?;?;value_12;value_10;value_11;?;?;?;?;?;?;?;?;?
diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp
new file mode 100644
index 000000000..aa3959fc1
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait.tmp
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: #vnic_type
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: #ram
+ vcpus: #vcpus
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs: \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml
new file mode 100644
index 000000000..5788980b0
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json
new file mode 100644
index 000000000..3af9a1cc7
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_1.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "normal", "ram": "1024", "vcpus": "2"} \ No newline at end of file
diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml
new file mode 100644
index 000000000..44a81d081
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml
@@ -0,0 +1,199 @@
+heat_template_version: 2014-10-16
+description: HOT template to create a DPI
+
+parameters:
+ default_net:
+ type: string
+ default_subnet:
+ type: string
+ source_net:
+ type: string
+ source_subnet:
+ type: string
+ destination_net:
+ type: string
+ destination_subnet:
+ type: string
+ internal_net:
+ type: string
+ internal_subnet:
+ type: string
+ node:
+ type: string
+ default: compB
+ name:
+ type: string
+ default: vtc
+ ip_family:
+ type: string
+ timeout:
+ type: number
+ description: Timeout for WaitCondition, depends on your image and environment
+ default: 1000
+
+resources:
+ wait_condition:
+ type: OS::Heat::WaitCondition
+ properties:
+ handle: {get_resource: wait_handle}
+ count: 1
+ timeout: {get_param: timeout}
+
+ wait_handle:
+ type: OS::Heat::WaitConditionHandle
+
+
+ ### DEFAULT NETWORK FOR MERLIN DATA
+ port_1:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: default_net }
+ binding:vnic_type: normal
+ fixed_ips:
+ - subnet: { get_param: default_subnet }
+
+ ### NETWORK FOR RECEIVING TRAFFIC
+ port_2:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: source_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: source_subnet }
+
+ ### NETWORK FOR SENDING TRAFFIC
+ port_3:
+ type: OS::Neutron::Port
+ properties:
+ network: { get_param: destination_net }
+ binding:vnic_type: direct
+ fixed_ips:
+ - subnet: { get_param: destination_subnet }
+
+ flavor:
+ type: OS::Nova::Flavor
+ properties:
+ disk: 20
+ ram: 1024
+ vcpus: 2
+ #extra_specs: { node: { get_param: node }, "hw:cpu_policy": "#core_pinning_enabled", "hw:cpu_threads_policy": "#core_pinning_mode", "hw:mem_page_size": "#hugepages" }
+ extra_specs: { node: { get_param: node } }
+
+ server:
+ type: OS::Nova::Server
+ properties:
+ name: vTC
+ key_name: test
+ image: ubuntu1404
+ user_data:
+ str_replace:
+ template: |
+ #!/bin/sh
+
+ # Creation of a user
+ NAME=$name
+ echo "Creating custom user..."
+ useradd clouduser -g admin -s /bin/bash -m
+ echo clouduser:secrete | chpasswd
+ echo "Enabling ssh password login..."
+ sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
+ service ssh restart
+ sleep 1
+
+ # wake up interfaces
+ ifconfig eth1 up
+ ifconfig eth2 up
+ dhclient eth1
+ dhclient eth2
+
+ sed -i 's/localhost/localhost vtc/g' /etc/hosts
+ ip route del 0/0
+ route add default gw 192.168.200.1
+
+ AA=$(netstat -ie | grep -B1 $IP_FAMILY | awk '{ print $1 }')
+ BB=$(echo $AA | awk '{ print $1 }')
+
+ # Setup Instrumentation Agent
+ rm -rf cimmaron
+ mkdir cimmaron
+ cd cimmaron
+ apt-get install -y zip
+ wget http://10.2.1.65/~iolie/merlin/MerlinAgent-12-06-2015-TNovaVM-001.zip
+ unzip MerlinAgent-12-06-2015-TNovaVM-001.zip
+ ./updateConfiguration.py ./instrumentation.cfg tags source=tnova_vm
+ ./updateConfiguration.py ./instrumentation.cfg tags role="$NAME"
+ nohup ./Agent.py ./instrumentation.cfg >log.out 2>&1 &
+ cd ..
+
+ # Setup for PF_RING and bridge between interfaces
+ apt-get update
+ apt-get install -y git build-essential gcc libnuma-dev flex byacc libjson0-dev dh-autoreconf libpcap-dev libpulse-dev libtool pkg-config
+
+ # Setup multicast
+ echo smcroute -d mgroup from $BB group 224.192.16.1 > /etc/smcroute.conf
+ cd /home/clouduser/
+ git clone https://github.com/troglobit/smcroute.git
+ cd smcroute
+ sed -i 's/aclocal-1.11/aclocal/g' ./autogen.sh
+ sed -i 's/automake-1.11/automake/g' ./autogen.sh
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ touch multicast.sh
+ echo "#!/bin/bash" > multicast.sh
+ echo "while [ true ]" >> multicast.sh
+ echo "do" >> multicast.sh
+ echo " smcroute -k" >> multicast.sh
+ echo " smcroute -d" >> multicast.sh
+ echo " sleep 50" >> multicast.sh
+ echo "done" >> multicast.sh
+ chmod +x multicast.sh
+ ./multicast.sh &
+
+ # Setup for PF_RING and bridge between interfaces
+ # Akis Repository
+ #git clone https://akiskourtis:ptindpi@bitbucket.org/akiskourtis/vtc.git
+ #cd vtc
+ #git checkout stable
+
+ # Intel Repository
+ git clone http://vincenzox.m.riccobene%40intel.com:vincenzo@134.191.243.6:8081/t-nova/vtc_master.git
+ cd vtc_master
+
+ cd nDPI
+ NDPI_DIR=$(pwd)
+ echo $NDPI_DIR
+ NDPI_INCLUDE=$(pwd)/src/include
+ echo $NDPI_INCLUDE
+ ./autogen.sh
+ ./configure
+ make
+ make install
+ cd ..
+ cd PF_RING
+ make
+ cd userland/examples/
+ sed -i 's/EXTRA_LIBS =/EXTRA_LIBS = '"${NDPI_DIR}"'/src/lib/.libs/libndpi.a -ljson-c/g' ./Makefile
+ sed -i 's/ -Ithird-party/ -Ithird-party -I'"$NDPI_INCLUDE"' -I'"$NDPI_DIR"'/g' ./Makefile
+ make
+ cd ../..
+ cd ..
+ cd ..
+ #insmod ./vtc/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ #./vtc/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ insmod ./vtc_master/PF_RING/kernel/pf_ring.ko min_num_slots=8192 enable_debug=1 quick_mode=1 enable_tx_capture=0
+ ./vtc_master/PF_RING/userland/examples/pfbridge -a eth1 -b eth2 &
+ wc_notify --data-binary '{"status": "SUCCESS"}'
+ params:
+ wc_notify: { get_attr: ['wait_handle', 'curl_cli'] }
+ $name: { get_param: name }
+ $IP_FAMILY: { get_param: ip_family }
+
+ flavor: { get_resource: flavor }
+ networks:
+ - port: { get_resource: port_1 }
+ - port: { get_resource: port_2 }
+ - port: { get_resource: port_3 }
+outputs:
diff --git a/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json
new file mode 100644
index 000000000..9f246891d
--- /dev/null
+++ b/yardstick/vTC/apexlake/tests/data/test_templates/VTC_base_single_vm_wait_2.yaml.json
@@ -0,0 +1 @@
+{"vnic_type": "direct", "ram": "1024", "vcpus": "2"} \ No newline at end of file