summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuc Provoost <luc.provoost@intel.com>2018-03-27 14:40:18 +0200
committerLuc Provoost <luc.provoost@intel.com>2018-03-27 14:40:18 +0200
commit2ba92161c4492779d0b858db468619737896dd9f (patch)
tree8b7ff2b0deebae08f2ad4c14832501f8cacfe0ce
parent37d81265d5e06c2ad87446511681259222c94984 (diff)
Replaced heat stack yaml files by individual server creation
There is now a new file (rapidVMs.vms) describing how many VMs need to be created. You can specify the same flavor values in the [DEFAULT] section or specify specific flavors per VM. The heat stack yaml files are removed. Change-Id: Ic5ec485e8344a35e9ac9f6e8347adbc70520d10a Signed-off-by: Luc Provoost <luc.provoost@intel.com>
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMrapid.yaml191
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMsriovrapid.yaml185
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/README16
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/basicrapid.test10
-rwxr-xr-xVNFs/DPPD-PROX/helper-scripts/openstackrapid/createrapid.py217
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.cfg4
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.test11
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/irq.test11
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2gen.cfg1
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2zeroloss.test10
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/rapid.yaml191
-rwxr-xr-xVNFs/DPPD-PROX/helper-scripts/openstackrapid/runrapid.py71
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/secgw.test13
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/openstackrapid/sriovrapid.yaml185
14 files changed, 188 insertions, 928 deletions
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMrapid.yaml b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMrapid.yaml
deleted file mode 100644
index 8424897..0000000
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMrapid.yaml
+++ /dev/null
@@ -1,191 +0,0 @@
-##
-## Copyright (c) 2010-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.
-##
-
-heat_template_version: 2016-04-08
-description: RAPID stack (Rapid Automated Performance Indication for Dataplane)
-parameters:
- image:
- type: string
- label: Image name or ID
- description: Image to be used for compute instance
- default: RapidVM
- flavor:
- type: string
- label: Flavor
- description: Type of instance (flavor) to be used
- default: prox_flavor
- key:
- type: string
- label: Key name
- description: Name of key-pair to be used for compute instance
- default: prox
- dataplane_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: dataplane-network
- internal_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: admin_internal_net
- floating_network:
- type: string
- label: Floating network name or ID
- description: Public Network to attach instance to.
- default: admin_floating_net
- vm1_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm2_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm3_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
-
-resources:
- vm1_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm1_dataplane_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: dataplane_network}
- security_groups:
- - default
- vm1_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm1_admin_port}
- vm1:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm1_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm1_admin_port}
- - port: {get_resource: vm1_dataplane_port}
- vm2_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm2_dataplane_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: dataplane_network}
- security_groups:
- - default
- vm2_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm2_admin_port}
- vm2:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm2_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm2_admin_port}
- - port: {get_resource: vm2_dataplane_port}
- vm3_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm3_dataplane_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: dataplane_network}
- security_groups:
- - default
- vm3_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm3_admin_port}
- vm3:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm3_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm3_admin_port}
- - port: {get_resource: vm3_dataplane_port}
-
-outputs:
- total_number_of_VMs:
- description: Number of VMs created by this stack
- value: 3
- vm1_private_ip:
- description: IP address of VM1 admin port
- value: { get_attr: [vm1_admin_port, fixed_ips, 0, ip_address] }
- vm1_public_ip:
- description: Floating IP address of VM1 in public network
- value: { get_attr: [ vm1_floating_ip, floating_ip_address ] }
- vm1_dataplane_ip:
- description: IP address of VM1 dataplane port
- value: { get_attr: [vm1_dataplane_port, fixed_ips, 0, ip_address] }
- vm1_dataplane_mac:
- description: The MAC address of VM1 dataplane port
- value: { get_attr: [vm1_dataplane_port, mac_address] }
- vm2_private_ip:
- description: IP address of the VM2 admin port
- value: { get_attr: [vm2_admin_port, fixed_ips, 0, ip_address] }
- vm2_public_ip:
- description: Floating IP address of VM2 in public network
- value: { get_attr: [ vm2_floating_ip, floating_ip_address ] }
- vm2_dataplane_ip:
- description: IP address of VM2 dataplane port
- value: { get_attr: [vm2_dataplane_port, fixed_ips, 0, ip_address] }
- vm2_dataplane_mac:
- description: The MAC address of VM2 dataplane port
- value: { get_attr: [vm2_dataplane_port, mac_address] }
- vm3_private_ip:
- description: IP address of the VM3 admin port
- value: { get_attr: [vm3_admin_port, fixed_ips, 0, ip_address] }
- vm3_public_ip:
- description: Floating IP address of VM3 in public network
- value: { get_attr: [ vm3_floating_ip, floating_ip_address ] }
- vm3_dataplane_ip:
- description: IP address of VM3 dataplane port
- value: { get_attr: [vm3_dataplane_port, fixed_ips, 0, ip_address] }
- vm3_dataplane_mac:
- description: The MAC address of VM3 dataplane port
- value: { get_attr: [vm3_dataplane_port, mac_address] }
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMsriovrapid.yaml b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMsriovrapid.yaml
deleted file mode 100644
index 0037d27..0000000
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/3VMsriovrapid.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-##
-## Copyright (c) 2010-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.
-##
-
-heat_template_version: 2016-04-08
-description: RAPID stack (Rapid Automated Performance Indication for Dataplane)
-parameters:
- image:
- type: string
- label: Image name or ID
- description: Image to be used for compute instance
- default: RapidVM
- flavor:
- type: string
- label: Flavor
- description: Type of instance (flavor) to be used
- default: prox_flavor
- key:
- type: string
- label: Key name
- description: Name of key-pair to be used for compute instance
- default: prox
- dataplane_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: dataplane-network
- internal_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: admin_internal_net
- floating_network:
- type: string
- label: Floating network name or ID
- description: Public Network to attach instance to.
- default: admin_floating_net
- vm1_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm2_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm3_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm1_sriov_port:
- type: string
- description: The sriov port to be used by VM1
- default: Port1
- vm2_sriov_port:
- type: string
- description: The sriov port to be used by VM2
- default: Port2
- vm3_sriov_port:
- type: string
- description: The sriov port to be used by VM3
- default: Port3
-
-resources:
- vm1_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm1_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm1_admin_port}
- vm1:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm1_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm1_admin_port}
- - port: {get_param: vm1_sriov_port}
- vm2_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm2_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm2_admin_port}
- vm2:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm2_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm2_admin_port}
- - port: {get_param: vm2_sriov_port}
- vm3_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm3_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm3_admin_port}
- vm3:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm3_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm3_admin_port}
- - port: {get_param: vm3_sriov_port}
-
-outputs:
- total_number_of_VMs:
- description: Number of VMs created by this stack
- value: 3
- vm1_private_ip:
- description: IP address of VM1 admin port
- value: { get_attr: [vm1_admin_port, fixed_ips, 0, ip_address] }
- vm1_public_ip:
- description: Floating IP address of VM1 in public network
- value: { get_attr: [ vm1_floating_ip, floating_ip_address ] }
- vm1_dataplane_ip:
- description: IP address of VM1 dataplane port
- value: { get_attr: [vm1, networks,{get_param: dataplane_network},0] }
- vm1_dataplane_mac:
- description: The MAC address of VM1 dataplane port
- value: { get_attr: [vm1, addresses, {get_param: dataplane_network}] }
- vm2_private_ip:
- description: IP address of VM2 admin port
- value: { get_attr: [vm2_admin_port, fixed_ips, 0, ip_address] }
- vm2_public_ip:
- description: Floating IP address of VM2 in public network
- value: { get_attr: [ vm2_floating_ip, floating_ip_address ] }
- vm2_dataplane_ip:
- description: IP address of VM2 dataplane port
- value: { get_attr: [vm2, networks,{get_param: dataplane_network},0] }
- vm2_dataplane_mac:
- description: The MAC address of VM2 dataplane port
- value: { get_attr: [vm2, addresses, {get_param: dataplane_network}]}
- vm3_private_ip:
- description: IP address of VM3 admin port
- value: { get_attr: [vm3_admin_port, fixed_ips, 0, ip_address] }
- vm3_public_ip:
- description: Floating IP address of VM3 in public network
- value: { get_attr: [ vm3_floating_ip, floating_ip_address ] }
- vm3_dataplane_ip:
- description: IP address of VM3 dataplane port
- value: { get_attr: [vm3, networks,{get_param: dataplane_network},0] }
- vm3_dataplane_mac:
- description: The MAC address of VM3 dataplane port
- value: { get_attr: [vm3, addresses, {get_param: dataplane_network}]}
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/README b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/README
index 3123a0e..2dac5b6 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/README
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/README
@@ -38,7 +38,7 @@ Now you can run the createrapid.py file. Use help for more info on the usage:
# ./createrapid.py --help
createrapid.py will use the OpenStack CLI to create the flavor, key-pair, network, image,
-stack, ...
+servers, ...
It will create a <STACK>.env file containing all info that will be used by runrapid.py
to actually run the tests. Logging can be found in the CREATE<STACK>.log file
You can use floating IP addresses by specifying the floating IP network
@@ -48,8 +48,8 @@ or directly connect throught the INTERNAL_NETWORK by using the following paramet
Now you can run the runrapid.py file. Use help for more info on the usage:
# ./runrapid.py --help
-The script will connect to all VMs that have been instantiated and it will launch
-PROX in all VMs. This will be done through the admin IP assigned to the VMs.
+The script will connect to all machines that have been instantiated and it will launch
+PROX in all machines. This will be done through the admin IP assigned to the machines.
Once that is done it will connect to the PROX tcp socket and start sending
commands to run the actual test.
It will print test results on the screen while running.
@@ -71,7 +71,7 @@ openstack port create --network fast-network --vnic-type direct --fixed-ip subne
openstack port create --network fast-network --vnic-type direct --fixed-ip subnet=fast-subnet Port2
openstack port create --network fast-network --vnic-type direct --fixed-ip subnet=fast-subnet Port3
Make sure to use the network and subnet in the createrapid parameters list. Port1, Port2 and Port3
-are being used in the yaml files.
+are being used in the *.env file.
Note when doing tests using the gateway functionality on OVS:
When a GW VM is sending packets on behalf of another VM (e.g. the generator), we need to make sure the OVS
@@ -88,22 +88,22 @@ An example of the env file generated by createrapid.py can be found below.
Note that this file can be created manually in case the stack is created in a
different way (not using the createrapid.py). This can be useful in case you are
not using OpenStack as a VIM or when using special configurations that cannot be
-achieved using createrapid.py. Only the [VMx] sections are used as
+achieved using createrapid.py. Only the [Mx] sections are used as
input for runrapid.py.
[DEFAULT]
admin_ip = none
-[VM1]
+[M1]
admin_ip = 192.168.4.130
dp_ip = 10.10.10.6
dp_mac = fa:16:3e:3c:1e:12
-[VM2]
+[M2]
admin_ip = 192.168.4.140
dp_ip = 10.10.10.9
dp_mac = fa:16:3e:2a:00:5d
-[VM3]
+[M3]
admin_ip = 192.168.4.138
dp_ip = 10.10.10.11
dp_mac = fa:16:3e:ae:fa:86
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/basicrapid.test b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/basicrapid.test
index 58851cc..6a9998c 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/basicrapid.test
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/basicrapid.test
@@ -17,7 +17,7 @@
[DEFAULT]
name = BasicSwapTesting
number_of_tests = 3
-total_number_of_vms = 2
+total_number_of_test_machines = 2
init_code=init_test()
dest_vm = not_used
gw_vm = not_used
@@ -25,12 +25,13 @@ script_control = false
group1cores = not_used
group2cores = not_used
group3cores = not_used
-drop_rate_treshold = 0.01
+drop_rate_treshold = 0.1
accuracy = 0.01
-[VM1]
+[TestM1]
name = Generator
+machine_index = 1
config_file = gen.cfg
dest_vm = 2
script_control = true
@@ -38,8 +39,9 @@ group1cores = [1]
group2cores = [3]
group3cores = [1,3]
-[VM2]
+[TestM2]
name = Swap
+machine_index = 2
config_file = swap.cfg
group1cores = [1]
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/createrapid.py b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/createrapid.py
index 867ce32..ffba501 100755
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/createrapid.py
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/createrapid.py
@@ -31,30 +31,25 @@ from logging import handlers
from prox_ctrl import prox_ctrl
import ConfigParser
-version="18.2.12"
-stack = "rapid" #Default string for stack
-yaml = "rapid.yaml" #Default string for yaml file
-key = "prox" # This is also the default in the yaml file....
-flavor = "prox_flavor" # This is also the default in the yaml file....
-image = "rapidVM" # This is also the default in the yaml file....
+version="18.3.27"
+stack = "rapid" #Default string for stack. This is not an OpenStack Heat stack, just a group of VMs
+vms = "rapidVMs" #Default string for vms file
+key = "prox" # default name for kay
+image = "rapidVM" # default name for the image
image_file = "rapidVM.qcow2"
-dataplane_network = "dataplane-network" # This is also the default in the yaml file....
+dataplane_network = "dataplane-network" # default name for the dataplane network
subnet = "dpdk-subnet" #subnet for dataplane
subnet_cidr="10.10.10.0/24" # cidr for dataplane
internal_network="admin_internal_net"
floating_network="admin_floating_net"
-vm1_availability_zone="nova"
-vm2_availability_zone="nova"
-vm3_availability_zone="nova"
loglevel="DEBUG" # sets log level for writing to file
runtime=10 # time in seconds for 1 test run
def usage():
print("usage: createrapid [--version] [-v]")
print(" [--stack STACK_NAME]")
- print(" [--yaml YAML_FILE]")
+ print(" [--vms VMS_FILE]")
print(" [--key KEY_NAME]")
- print(" [--flavor FLAVOR_NAME]")
print(" [--image IMAGE_NAME]")
print(" [--image_file IMAGE_FILE]")
print(" [--dataplane_network DP_NETWORK]")
@@ -62,20 +57,16 @@ def usage():
print(" [--subnet_cidr SUBNET_CIDR]")
print(" [--internal_network ADMIN_NETWORK]")
print(" [--floating_network ADMIN_NETWORK]")
- print(" [--vm1_availability_zone ZONE_FOR_VM1]")
- print(" [--vm2_availability_zone ZONE_FOR_VM2]")
- print(" [--vm3_availability_zone ZONE_FOR_VM3]")
- print(" [--log DEBUG|INFO|WARNING|ERROR|CRITICAL")
+ print(" [--log DEBUG|INFO|WARNING|ERROR|CRITICAL]")
print(" [-h] [--help]")
print("")
print("Command-line interface to createrapid")
print("")
print("optional arguments:")
print(" -v, --version Show program's version number and exit")
- print(" --stack STACK_NAME Specify a name for the heat stack. Default is %s."%stack)
- print(" --yaml YAML_FILE Specify the yaml file to be used. Default is %s."%yaml)
+ print(" --stack STACK_NAME Specify a name for the stack. Default is %s."%stack)
+ print(" --vms VMS_FILE Specify the vms file to be used. Default is %s.vms."%vms)
print(" --key KEY_NAME Specify the key to be used. Default is %s."%key)
- print(" --flavor FLAVOR_NAME Specify the flavor to be used. Default is %s."%flavor)
print(" --image IMAGE_NAME Specify the image to be used. Default is %s."%image)
print(" --image_file IMAGE_FILE Specify the image qcow2 file to be used. Default is %s."%image_file)
print(" --dataplane_network NETWORK Specify the network name to be used for the dataplane. Default is %s."%dataplane_network)
@@ -83,18 +74,12 @@ def usage():
print(" --subnet_cidr SUBNET_CIDR Specify the subnet CIDR to be used for the dataplane. Default is %s."%subnet_cidr)
print(" --internal_network NETWORK Specify the network name to be used for the control plane. Default is %s."%internal_network)
print(" --floating_network NETWORK Specify the external floating ip network name. Default is %s. NO if no floating ip used."%floating_network)
- print(" --vm1_availability_zone ZONE Specify the availability zone for VM1. Default is %s."%vm1_availability_zone)
- print(" --vm2_availability_zone ZONE Specify the availability zone for VM2. Default is %s."%vm2_availability_zone)
- print(" --vm3_availability_zone ZONE Specify the availability zone for VM3. Default is %s."%vm3_availability_zone)
print(" --log Specify logging level for log file output, screen output level is hard coded")
print(" -h, --help Show help message and exit.")
print("")
- print("To delete the rapid stack, type the following command")
- print(" openstack stack delete --yes --wait %s"%stack)
- print("Note that %s is the default stack name. Replace with STACK_NAME if needed"%stack)
try:
- opts, args = getopt.getopt(sys.argv[1:], "vh", ["version","help", "yaml=","stack=","key=","flavor=","image=","image_file=","dataplane_network=","subnet=","subnet_cidr=","internal_network=","floating_network=","vm1_availability_zone=","vm2_availability_zone=","vm3_availability_zone=","log="])
+ opts, args = getopt.getopt(sys.argv[1:], "vh", ["version","help", "vms=","stack=","key=","image=","image_file=","dataplane_network=","subnet=","subnet_cidr=","internal_network=","floating_network=","log="])
except getopt.GetoptError as err:
print("===========================================")
print(str(err))
@@ -114,15 +99,12 @@ for opt, arg in opts:
if opt in ("--stack"):
stack = arg
print ("Using '"+stack+"' as name for the stack")
- elif opt in ("--yaml"):
- yaml = arg
- print ("Using stack: "+yaml)
+ elif opt in ("--vms"):
+ vms = arg
+ print ("Using Virtual Machines Description: "+vms)
elif opt in ("--key"):
key = arg
print ("Using key: "+key)
- elif opt in ("--flavor"):
- flavor = arg
- print ("Using flavor: "+flavor)
elif opt in ("--image"):
image = arg
print ("Using image: "+image)
@@ -144,15 +126,6 @@ for opt, arg in opts:
elif opt in ("--floating_network"):
floating_network = arg
print ("Using floating ip network: "+ floating_network)
- elif opt in ("--vm1_availability_zone"):
- vm1_availability_zone = arg
- print ("Using VM1 availability zone: "+ vm1_availability_zone)
- elif opt in ("--vm2_availability_zone"):
- vm2_availability_zone = arg
- print ("Using VM2 availability zone: "+ vm2_availability_zone)
- elif opt in ("--vm3_availability_zone"):
- vm3_availability_zone = arg
- print ("Using VM3 availability zone: "+ vm3_availability_zone)
elif opt in ("--log"):
loglevel = arg
print ("Log level: "+ loglevel)
@@ -282,28 +255,6 @@ else:
log.exception("Failed to create key: " + key)
raise Exception("Failed to create key: " + key)
-# Checking if the flavor already exists, if not create it
-log.debug("Checking flavor: "+flavor)
-cmd = 'openstack flavor show '+flavor
-log.debug (cmd)
-cmd = cmd + ' |grep "name " | tr -s " " | cut -d" " -f 4'
-FlavorExist = subprocess.check_output(cmd , shell=True).strip()
-if FlavorExist == flavor:
- log.info("Flavor ("+flavor+") already installed")
-else:
- log.info('Creating flavor ...')
- cmd = 'openstack flavor create '+flavor+' --ram 8192 --disk 20 --vcpus 4'
- log.debug(cmd)
- cmd = cmd + ' |grep "name " | tr -s " " | cut -d" " -f 4'
- FlavorExist = subprocess.check_output(cmd , shell=True).strip()
- if FlavorExist == flavor:
- cmd = 'openstack flavor set '+ flavor +' --property hw:mem_page_size="large" --property hw:cpu_policy="dedicated" --property hw:cpu_thread_policy="isolate"'
- log.debug(cmd)
- subprocess.check_call(cmd , shell=True)
- log.info("Flavor created")
- else :
- log.exception("Failed to create flavor: " + flavor)
- raise Exception("Failed to create flavor: " + flavor)
# Checking if the dataplane network already exists, if not create it
log.debug("Checking dataplane network: "+dataplane_network)
@@ -345,58 +296,105 @@ else:
log.exception("Failed to create subnet: " + subnet)
raise Exception("Failed to create subnet: " + subnet)
-# Checking if the stack already exists, if not create it
-log.debug("Checking Stack: "+stack)
-cmd = 'openstack stack show '+stack
-log.debug (cmd)
-cmd = cmd+' |grep "stack_status " | tr -s " " | cut -d"|" -f 3'
-StackRunning = subprocess.check_output(cmd , shell=True).strip()
-if StackRunning == '':
- log.info('Creating Stack ...')
- cmd = 'openstack stack create -t '+ yaml + ' --parameter flavor="'+flavor +'" --parameter key="'+ key + '" --parameter image="'+image + '" --parameter dataplane_network="'+dataplane_network+ '" --parameter internal_network="'+internal_network+'" --parameter floating_network="'+floating_network+'" --parameter vm1_availability_zone="'+vm1_availability_zone+'" --parameter vm2_availability_zone="'+vm2_availability_zone+'" --parameter vm3_availability_zone="'+vm3_availability_zone+'" --wait '+stack
- log.debug(cmd)
- cmd = cmd + ' |grep "stack_status " | tr -s " " | cut -d"|" -f 3'
- StackRunning = subprocess.check_output(cmd , shell=True).strip()
-if StackRunning != 'CREATE_COMPLETE':
- log.exception("Failed to create stack")
- raise Exception("Failed to create stack")
-# Obtaining IP & MAC addresses for the VMs created in the stack
-log.info("Stack ("+stack+") running")
-cmd='openstack stack show -f yaml -c outputs ' + stack
-log.debug(cmd)
-output = subprocess.check_output(cmd , shell=True).strip()
-matchObj = re.search('.*total_number_of_VMs.*?([0-9])', output, re.DOTALL)
-total_number_of_VMs = matchObj.group(1)
-vmDPIP =[]
-vmAdminIP =[]
-vmDPmac =[]
config = ConfigParser.RawConfigParser()
+vmconfig = ConfigParser.RawConfigParser()
+vmconfig.read(vms+'.vms')
+total_number_of_VMs = vmconfig.get('DEFAULT', 'total_number_of_vms')
for vm in range(1, int(total_number_of_VMs)+1):
- searchString = '.*vm%d_dataplane_ip.*?([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)' % vm
- matchObj = re.search(searchString, output, re.DOTALL)
- vmDPIP.append(matchObj.group(1))
- if floating_network <> 'NO':
- searchString = '.*vm%d_public_ip.*?([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)' % vm
- matchObj = re.search(searchString, output, re.DOTALL)
- vmAdminIP.append(matchObj.group(1))
+ flavor_info = vmconfig.get('VM%d'%vm, 'flavor_info')
+ flavor_meta_data = vmconfig.get('VM%d'%vm, 'flavor_meta_data')
+ boot_info = vmconfig.get('VM%d'%vm, 'boot_info')
+ SRIOV_port = vmconfig.get('VM%d'%vm, 'SRIOV_port')
+ server_name = '%s-VM%d'%(stack,vm)
+ flavor_name = '%s-VM%d-flavor'%(stack,vm)
+ log.debug("Checking server: "+server_name)
+ cmd = 'openstack server show '+server_name
+ log.debug (cmd)
+ cmd = cmd + ' |grep "\sname\s" | tr -s " " | cut -d" " -f 4'
+ ServerExist = subprocess.check_output(cmd , shell=True).strip()
+ if ServerExist == server_name:
+ log.info("Server ("+server_name+") already active")
else:
- searchString = '.*vm%d_private_ip.*?([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)' % vm
- matchObj = re.search(searchString, output, re.DOTALL)
- vmAdminIP.append(matchObj.group(1))
- searchString = '.*vm%d_dataplane_mac.*?([a-fA-F0-9:]{17})' % vm
- matchObj = re.search(searchString, output, re.DOTALL)
- vmDPmac.append(matchObj.group(1))
- log.info('VM%d: (admin IP: %s), (dataplane IP: %s), (dataplane MAC: %s)' % (vm,vmAdminIP[-1],vmDPIP[-1],vmDPmac[-1]))
- config.add_section('VM%d'%vm)
- config.set('VM%d'%vm, 'admin_ip', vmAdminIP[-1])
- config.set('VM%d'%vm, 'dp_ip', vmDPIP[-1])
- config.set('VM%d'%vm, 'dp_mac', vmDPmac[-1])
+ # Checking if the flavor already exists, if not create it
+ log.debug("Checking flavor: "+flavor_name)
+ cmd = 'openstack flavor show '+flavor_name
+ log.debug (cmd)
+ cmd = cmd + ' |grep "\sname\s" | tr -s " " | cut -d" " -f 4'
+ FlavorExist = subprocess.check_output(cmd , shell=True).strip()
+ if FlavorExist == flavor_name:
+ log.info("Flavor ("+flavor_name+") already installed")
+ else:
+ log.info('Creating flavor ...')
+ cmd = 'openstack flavor create %s %s'%(flavor_name,flavor_info)
+ log.debug(cmd)
+ cmd = cmd + ' |grep "\sname\s" | tr -s " " | cut -d" " -f 4'
+ FlavorExist = subprocess.check_output(cmd , shell=True).strip()
+ if FlavorExist == flavor_name:
+ cmd = 'openstack flavor set %s %s'%(flavor_name, flavor_meta_data)
+ log.debug(cmd)
+ subprocess.check_call(cmd , shell=True)
+ log.info("Flavor created")
+ else :
+ log.exception("Failed to create flavor: " + flavor_name)
+ raise Exception("Failed to create flavor: " + flavor_name)
+ if SRIOV_port == 'NO':
+ nic_info = '--nic net-id=%s --nic net-id=%s'%(internal_network,dataplane_network)
+ else:
+ nic_info = '--nic net-id=%s'%(internal_network)
+ for port in SRIOV_port.split(','):
+ nic_info = nic_info + ' --nic port-id=%s'%(port)
+ if vm==int(total_number_of_VMs):
+ # For the last server, we want to wait for the server creation to complete, so the next operations will succeeed (e.g. IP allocation)
+ # Note that this waiting is not bullet proof. Imagine, we loop through all the VMs, and the last VM was already running, while the previous
+ # VMs still needed to be created. Or the previous server creations take much longer than the last one.
+ # In that case, we might be to fast when we query for the IP & MAC addresses.
+ wait = ' --wait '
+ else:
+ wait = ' '
+ log.info("Creating server...")
+ cmd = 'openstack server create --flavor %s --key-name %s --image %s %s %s%s%s'%(flavor_name,key,image,nic_info,boot_info,wait,server_name)
+ log.debug(cmd)
+ cmd = cmd + ' |grep "\sname\s" | tr -s " " | cut -d" " -f 4'
+ ServerExist = subprocess.check_output(cmd , shell=True).strip()
+ if floating_network <> 'NO':
+ log.info('Creating floating IP ...')
+ cmd = 'openstack floating ip create ' + floating_network
+ log.debug(cmd)
+ cmd = cmd + ' |grep "floating_ip_address " | tr -s " " | cut -d"|" -f 3'
+ vmAdminIP = subprocess.check_output(cmd , shell=True).strip()
+ log.info('Associating floating IP ...')
+ cmd = 'openstack server add floating ip %s %s'%(server_name,vmAdminIP)
+ log.debug(cmd)
+ output = subprocess.check_output(cmd , shell=True).strip()
+ print (output)
+for vm in range(1, int(total_number_of_VMs)+1):
+ server_name = '%s-VM%d'%(stack,vm)
+ cmd = 'openstack server show %s'%(server_name)
+ log.debug(cmd)
+ output = subprocess.check_output(cmd , shell=True).strip()
+ searchString = '.*%s.*?([0-9]*\.[0-9]*\.[0-9]*\.[0-9]*)' %(dataplane_network)
+ matchObj = re.search(searchString, output, re.DOTALL)
+ vmDPIP = matchObj.group(1)
+ searchString = '.*%s=([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+),*\s*([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)*' %(internal_network)
+ matchObj = re.search(searchString, output, re.DOTALL)
+ vmAdminIP = matchObj.group(2)
+ if vmAdminIP == None:
+ vmAdminIP = matchObj.group(1)
+ cmd = 'openstack port list |grep %s | tr -s " " | cut -d"|" -f 4'%(vmDPIP)
+ log.debug(cmd)
+ vmDPmac = subprocess.check_output(cmd , shell=True).strip()
+ config.add_section('M%d'%vm)
+ config.set('M%d'%vm, 'name', server_name)
+ config.set('M%d'%vm, 'admin_ip', vmAdminIP)
+ config.set('M%d'%vm, 'dp_ip', vmDPIP)
+ config.set('M%d'%vm, 'dp_mac', vmDPmac)
+ log.info('%s: (admin IP: %s), (dataplane IP: %s), (dataplane MAC: %s)' % (server_name,vmAdminIP,vmDPIP,vmDPmac))
+
config.add_section('OpenStack')
config.set('OpenStack', 'stack', stack)
-config.set('OpenStack', 'yaml', yaml)
+config.set('OpenStack', 'VMs', vms)
config.set('OpenStack', 'key', key)
-config.set('OpenStack', 'flavor', flavor)
config.set('OpenStack', 'image', image)
config.set('OpenStack', 'image_file', image_file)
config.set('OpenStack', 'dataplane_network', dataplane_network)
@@ -407,9 +405,8 @@ config.set('OpenStack', 'floating_network', floating_network)
config.add_section('rapid')
config.set('rapid', 'loglevel', loglevel)
config.set('rapid', 'version', version)
-config.set('rapid', 'total_number_of_VMs', total_number_of_VMs)
+config.set('rapid', 'total_number_of_machines', total_number_of_VMs)
config.set('DEFAULT', 'admin_ip', 'none')
# Writing the environment file
with open(stack+'.env', 'wb') as envfile:
config.write(envfile)
-
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.cfg b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.cfg
index 4b1f701..e8b3801 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.cfg
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.cfg
@@ -41,7 +41,7 @@ mode=impair
sub mode=l3
rx port=if0
tx port=if0
-delay us=120
-probability=99
+delay us=10
+probability=100
local ipv4=${local_ip}
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.test b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.test
index 71ae3e1..3042e72 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.test
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/impair.test
@@ -17,7 +17,7 @@
[DEFAULT]
name = impairTesting
number_of_tests = 1
-total_number_of_vms = 3
+total_number_of_test_machines = 3
init_code=init_test()
dest_vm = not_used
gw_vm = not_used
@@ -29,8 +29,9 @@ drop_rate_treshold = 1
accuracy = 0.01
-[VM1]
+[TestM1]
name = Generator
+machine_index = 1
config_file = gen_gw.cfg
gw_vm = 2
dest_vm = 3
@@ -38,13 +39,15 @@ group1cores = [1]
group2cores = [3]
group3cores = [1,3]
-[VM2]
+[TestM2]
name = ImpairGW
+machine_index = 2
config_file = impair.cfg
group1cores = [1]
-[VM3]
+[TestM3]
name = Swap
+machine_index = 3
config_file = swap.cfg
group1cores = [1]
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/irq.test b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/irq.test
index a732dc8..3ad014d 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/irq.test
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/irq.test
@@ -17,7 +17,7 @@
[DEFAULT]
name = BasicSwapTesting
number_of_tests = 2
-total_number_of_vms = 2
+total_number_of_test_machines = 2
init_code= not_used
dest_vm = not_used
gw_vm = not_used
@@ -28,18 +28,21 @@ group3cores = not_used
drop_rate_treshold = 1
accuracy = 0.01
-[VM1]
+[TestM1]
name = InterruptTesting
+machine_index = 1
config_file = irq.cfg
group1cores = [1,2,3]
-[VM2]
+[TestM2]
name = InterruptTesting
+machine_index = 2
config_file = irq.cfg
group1cores = [1,2,3]
-[VM3]
+[TestM3]
name = InterruptTesting
+machine_index = 3
config_file = irq.cfg
group1cores = [1,2,3]
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2gen.cfg b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2gen.cfg
index 1347c3b..9e7bf90 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2gen.cfg
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2gen.cfg
@@ -59,7 +59,6 @@ signature pos=56
name=lat
task=0
mode=lat
-sub mode=l3
rx port=p0
lat pos=42
accuracy pos=46
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2zeroloss.test b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2zeroloss.test
index d7cf132..1ea7f0a 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2zeroloss.test
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/l2zeroloss.test
@@ -17,7 +17,7 @@
[DEFAULT]
name = L2BasicSwapTesting
number_of_tests = 3
-total_number_of_vms = 2
+total_number_of_test_machines = 2
init_code=init_test()
dest_vm = not_used
gw_vm = not_used
@@ -26,10 +26,11 @@ group1cores = not_used
group2cores = not_used
group3cores = not_used
drop_rate_treshold = 0
-accuracy = 0.01
+accuracy = 0.1
-[VM1]
+[TestM1]
name = Generator
+machine_index = 1
config_file = l2gen.cfg
dest_vm = 2
script_control = true
@@ -37,8 +38,9 @@ group1cores = [1]
group2cores = [3]
group3cores = [1,3]
-[VM2]
+[TestM2]
name = Swap
+machine_index = 2
config_file = l2swap.cfg
group1cores = [1]
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/rapid.yaml b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/rapid.yaml
deleted file mode 100644
index 86efa89..0000000
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/rapid.yaml
+++ /dev/null
@@ -1,191 +0,0 @@
-##
-## Copyright (c) 2010-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.
-##
-
-heat_template_version: 2016-04-08
-description: RAPID stack (Rapid Automated Performance Indication for Dataplane)
-parameters:
- image:
- type: string
- label: Image name or ID
- description: Image to be used for compute instance
- default: RapidVM
- flavor:
- type: string
- label: Flavor
- description: Type of instance (flavor) to be used
- default: prox_flavor
- key:
- type: string
- label: Key name
- description: Name of key-pair to be used for compute instance
- default: prox
- dataplane_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: dataplane-network
- internal_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: admin_internal_net
- floating_network:
- type: string
- label: Floating network name or ID
- description: Public Network to attach instance to.
- default: admin_floating_net
- vm1_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm2_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm3_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
-
-resources:
- vm1_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm1_dataplane_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: dataplane_network}
- security_groups:
- - default
- vm1_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm1_admin_port}
- vm1:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm1_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm1_admin_port}
- - port: {get_resource: vm1_dataplane_port}
- vm2_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm2_dataplane_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: dataplane_network}
- security_groups:
- - default
- vm2_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm2_admin_port}
- vm2:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm2_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm2_admin_port}
- - port: {get_resource: vm2_dataplane_port}
-# vm3_admin_port:
-# type: OS::Neutron::Port
-# properties:
-# network: {get_param: internal_network}
-# security_groups:
-# - default
-# vm3_dataplane_port:
-# type: OS::Neutron::Port
-# properties:
-# network: {get_param: dataplane_network}
-# security_groups:
-# - default
-# vm3_floating_ip:
-# type: OS::Neutron::FloatingIP
-# properties:
-# floating_network: {get_param: floating_network}
-# port_id: {get_resource: vm3_admin_port}
-# vm3:
-# type: OS::Nova::Server
-# properties:
-# availability_zone: { get_param: vm3_availability_zone }
-# user_data:
-# get_file: prox_user_data.sh
-# key_name: { get_param: key }
-# image: { get_param: image }
-# flavor: { get_param: flavor }
-# networks:
-# - port: {get_resource: vm3_admin_port}
-# - port: {get_resource: vm3_dataplane_port}
-
-outputs:
- total_number_of_VMs:
- description: Number of VMs created by this stack
- value: 2
- vm1_private_ip:
- description: IP address of VM1 admin port
- value: { get_attr: [vm1_admin_port, fixed_ips, 0, ip_address] }
- vm1_public_ip:
- description: Floating IP address of VM1 in public network
- value: { get_attr: [ vm1_floating_ip, floating_ip_address ] }
- vm1_dataplane_ip:
- description: IP address of VM1 dataplane port
- value: { get_attr: [vm1_dataplane_port, fixed_ips, 0, ip_address] }
- vm1_dataplane_mac:
- description: The MAC address of VM1 dataplane port
- value: { get_attr: [vm1_dataplane_port, mac_address] }
- vm2_private_ip:
- description: IP address of the VM2 admin port
- value: { get_attr: [vm2_admin_port, fixed_ips, 0, ip_address] }
- vm2_public_ip:
- description: Floating IP address of VM2 in public network
- value: { get_attr: [ vm2_floating_ip, floating_ip_address ] }
- vm2_dataplane_ip:
- description: IP address of VM2 dataplane port
- value: { get_attr: [vm2_dataplane_port, fixed_ips, 0, ip_address] }
- vm2_dataplane_mac:
- description: The MAC address of VM2 dataplane port
- value: { get_attr: [vm2_dataplane_port, mac_address] }
-# vm3_private_ip:
-# description: IP address of the VM3 admin port
-# value: { get_attr: [vm3_admin_port, fixed_ips, 0, ip_address] }
-# vm3_public_ip:
-# description: Floating IP address of VM3 in public network
-# value: { get_attr: [ vm3_floating_ip, floating_ip_address ] }
-# vm3_dataplane_ip:
-# description: IP address of VM3 dataplane port
-# value: { get_attr: [vm3_dataplane_port, fixed_ips, 0, ip_address] }
-# vm3_dataplane_mac:
-# description: The MAC address of VM3 dataplane port
-# value: { get_attr: [vm3_dataplane_port, mac_address] }
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/runrapid.py b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/runrapid.py
index fca7a57..0f523cc 100755
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/runrapid.py
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/runrapid.py
@@ -32,7 +32,7 @@ from prox_ctrl import prox_ctrl
import ConfigParser
import ast
-version="18.2.12"
+version="18.3.27"
env = "rapid" #Default string for environment
test = "basicrapid" #Default string for test
loglevel="DEBUG" # sets log level for writing to file
@@ -271,7 +271,7 @@ def run_speedtest(gensock,sutsock):
# Get statistics now that the generation is stable and NO ARP messages any more
pps_req_tx,pps_tx,pps_sut_tx_str,pps_rx,lat_avg,lat_max, abs_dropped, abs_tx = run_iteration(gensock,sutsock)
drop_rate = 100.0*abs_dropped/abs_tx
- if ((get_pps(speed,size) - pps_tx)/pps_tx)<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
+ if ((get_pps(speed,size) - pps_tx)/get_pps(speed,size))<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
log.info('|{:>7}'.format(str(attempts))+" | " + '{:>5.1f}'.format(speed) + '% ' +'{:>6.3f}'.format(get_pps(speed,size)) + ' Mpps | '+ '{:>9.3f}'.format(pps_req_tx)+' Mpps | '+ '{:>9.3f}'.format(pps_tx) +' Mpps | ' + '{:>9}'.format(pps_sut_tx_str) +' Mpps | '+ '{:>9.3f}'.format(pps_rx)+' Mpps | '+ '{:>9.0f}'.format(lat_avg)+' us | '+ '{:>9.0f}'.format(lat_max)+' us | '+ '{:>14d}'.format(abs_dropped)+ ' |''{:>9.2f}'.format(drop_rate)+ '% | SUCCESS |')
endspeed = speed
endpps_req_tx = pps_req_tx
@@ -328,7 +328,7 @@ def run_flowtest(gensock,sutsock):
# Get statistics now that the generation is stable and NO ARP messages any more
pps_req_tx,pps_tx,pps_sut_tx_str,pps_rx,lat_avg,lat_max, abs_dropped, abs_tx = run_iteration(gensock,sutsock)
drop_rate = 100.0*abs_dropped/abs_tx
- if ((get_pps(speed,size) - pps_tx)/pps_tx)<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
+ if ((get_pps(speed,size) - pps_tx)/get_pps(speed,size))<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
endspeed = speed
endpps_req_tx = pps_req_tx
endpps_tx = pps_tx
@@ -377,7 +377,7 @@ def run_sizetest(gensock,sutsock):
# Get statistics now that the generation is stable and NO ARP messages any more
pps_req_tx,pps_tx,pps_sut_tx_str,pps_rx,lat_avg,lat_max, abs_dropped, abs_tx = run_iteration(gensock,sutsock)
drop_rate = 100.0*abs_dropped/abs_tx
- if ((get_pps(speed,size) - pps_tx)/pps_tx)<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
+ if ((get_pps(speed,size) - pps_tx)/get_pps(speed,size))<0.001 and ((drop_rate < DROP_RATE_TRESHOLD) or (abs_dropped==DROP_RATE_TRESHOLD ==0)):
endspeed = speed
endpps_req_tx = pps_req_tx
endpps_tx = pps_tx
@@ -459,49 +459,52 @@ script_control =[]
testconfig = ConfigParser.RawConfigParser()
testconfig.read(test+'.test')
-required_number_of_VMs = testconfig.get('DEFAULT', 'total_number_of_vms')
+required_number_of_test_machines = testconfig.get('DEFAULT', 'total_number_of_test_machines')
DROP_RATE_TRESHOLD = float(testconfig.get('DEFAULT', 'drop_rate_treshold'))
ACCURACY = float(testconfig.get('DEFAULT', 'accuracy'))
config = ConfigParser.RawConfigParser()
config.read(env+'.env')
key = config.get('OpenStack', 'key')
-total_number_of_VMs = config.get('rapid', 'total_number_of_VMs')
-if int(required_number_of_VMs) > int(total_number_of_VMs):
- log.exception("Not enough VMs for this test: %s needed and only %s available" % (required_number_of_VMs,total_number_of_VMs))
- raise Exception("Not enough VMs for this test: %s needed and only %s available" % (required_number_of_VMs,total_number_of_VMs))
-for vm in range(1, int(total_number_of_VMs)+1):
- vmAdminIP.append(config.get('VM%d'%vm, 'admin_ip'))
- vmDPmac.append(config.get('VM%d'%vm, 'dp_mac'))
- vmDPIP.append(config.get('VM%d'%vm, 'dp_ip'))
+total_number_of_machines = config.get('rapid', 'total_number_of_machines')
+if int(required_number_of_test_machines) > int(total_number_of_machines):
+ log.exception("Not enough VMs for this test: %s needed and only %s available" % (required_number_of_test_machines,total_number_of_machines))
+ raise Exception("Not enough VMs for this test: %s needed and only %s available" % (required_number_of_test_machines,total_number_of_machines))
+for vm in range(1, int(total_number_of_machines)+1):
+ vmAdminIP.append(config.get('M%d'%vm, 'admin_ip'))
+ vmDPmac.append(config.get('M%d'%vm, 'dp_mac'))
+ vmDPIP.append(config.get('M%d'%vm, 'dp_ip'))
ip = vmDPIP[-1].split('.')
hexDPIP.append(hex(int(ip[0]))[2:].zfill(2) + ' ' + hex(int(ip[1]))[2:].zfill(2) + ' ' + hex(int(ip[2]))[2:].zfill(2) + ' ' + hex(int(ip[3]))[2:].zfill(2))
-for vm in range(1, int(required_number_of_VMs)+1):
- config_file.append(testconfig.get('VM%d'%vm, 'config_file'))
- script_control.append(testconfig.get('VM%d'%vm, 'script_control'))
- group1cores=testconfig.get('VM%d'%vm, 'group1cores')
+machine_index = []
+for vm in range(1, int(required_number_of_test_machines)+1):
+ machine_index.append(int(testconfig.get('TestM%d'%vm, 'machine_index'))-1)
+for vm in range(1, int(required_number_of_test_machines)+1):
+ config_file.append(testconfig.get('TestM%d'%vm, 'config_file'))
+ script_control.append(testconfig.get('TestM%d'%vm, 'script_control'))
+ group1cores=testconfig.get('TestM%d'%vm, 'group1cores')
if group1cores <> 'not_used':
group1cores=ast.literal_eval(group1cores)
- group2cores=testconfig.get('VM%d'%vm, 'group2cores')
+ group2cores=testconfig.get('TestM%d'%vm, 'group2cores')
if group2cores <> 'not_used':
group2cores=ast.literal_eval(group2cores)
- group3cores=testconfig.get('VM%d'%vm, 'group3cores')
+ group3cores=testconfig.get('TestM%d'%vm, 'group3cores')
if group3cores <> 'not_used':
group3cores=ast.literal_eval(group3cores)
with open("parameters%d.lua"%vm, "w") as f:
- f.write('name="%s"\n'% testconfig.get('VM%d'%vm, 'name'))
- f.write('local_ip="%s"\n'% vmDPIP[vm-1])
- f.write('local_hex_ip="%s"\n'% hexDPIP[vm-1])
- gwVM = testconfig.get('VM%d'%vm, 'gw_vm')
+ f.write('name="%s"\n'% testconfig.get('TestM%d'%vm, 'name'))
+ f.write('local_ip="%s"\n'% vmDPIP[machine_index[vm-1]])
+ f.write('local_hex_ip="%s"\n'% hexDPIP[machine_index[vm-1]])
+ gwVM = testconfig.get('TestM%d'%vm, 'gw_vm')
if gwVM <> 'not_used':
gwVMindex = int(gwVM)-1
- f.write('gw_ip="%s"\n'% vmDPIP[gwVMindex])
- f.write('gw_hex_ip="%s"\n'% hexDPIP[gwVMindex])
- destVM = testconfig.get('VM%d'%vm, 'dest_vm')
+ f.write('gw_ip="%s"\n'% vmDPIP[machine_index[gwVMindex]])
+ f.write('gw_hex_ip="%s"\n'% hexDPIP[machine_index[gwVMindex]])
+ destVM = testconfig.get('TestM%d'%vm, 'dest_vm')
if destVM <> 'not_used':
destVMindex = int(destVM)-1
- f.write('dest_ip="%s"\n'% vmDPIP[destVMindex])
- f.write('dest_hex_ip="%s"\n'% hexDPIP[destVMindex])
- f.write('dest_hex_mac="%s"\n'% vmDPmac[destVMindex].replace(':',' '))
+ f.write('dest_ip="%s"\n'% vmDPIP[machine_index[destVMindex]])
+ f.write('dest_hex_ip="%s"\n'% hexDPIP[machine_index[destVMindex]])
+ f.write('dest_hex_mac="%s"\n'% vmDPmac[machine_index[destVMindex]].replace(':',' '))
if group1cores <> 'not_used':
f.write('group1="%s"\n'% ','.join(map(str, group1cores)))
if group2cores <> 'not_used':
@@ -527,13 +530,13 @@ for vm in range(1, int(required_number_of_VMs)+1):
client =[]
sock =[]
-for vm in range(0, int(required_number_of_VMs)):
- client.append(prox_ctrl(vmAdminIP[vm], key+'.pem','root'))
+for vm in range(0, int(required_number_of_test_machines)):
+ client.append(prox_ctrl(vmAdminIP[machine_index[vm]], key+'.pem','root'))
connect_client(client[-1])
# Creating script to bind the right network interface to the poll mode driver
devbindfile = "devbindvm%d.sh"%(vm+1)
with open("devbind.sh") as f:
- newText=f.read().replace('MACADDRESS', vmDPmac[vm])
+ newText=f.read().replace('MACADDRESS', vmDPmac[machine_index[vm]])
with open(devbindfile, "w") as f:
f.write(newText)
st = os.stat(devbindfile)
@@ -550,7 +553,7 @@ for vm in range(0, int(required_number_of_VMs)):
else:
cmd = '/root/prox/build/prox -t -o cli -f /root/%s'%config_file[vm]
if configonly == False:
- client[-1].fork_cmd(cmd, 'PROX Testing on VM%d'%(vm+1))
+ client[-1].fork_cmd(cmd, 'PROX Testing on TestM%d'%(vm+1))
sock.append(connect_socket(client[-1]))
if configonly:
sys.exit()
@@ -566,6 +569,6 @@ for vm in range(1, int(number_of_tests)+1):
cmd=testconfig.get('test%d'%vm,'cmd')
eval(cmd)
####################################################
-for vm in range(0, int(required_number_of_VMs)):
+for vm in range(0, int(required_number_of_test_machines)):
sock[vm].quit()
client[vm].close()
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/secgw.test b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/secgw.test
index fed1e37..1ac171a 100644
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/secgw.test
+++ b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/secgw.test
@@ -16,8 +16,8 @@
[DEFAULT]
name = GWTesting
-number_of_tests = 2
-total_number_of_vms = 3
+number_of_tests = 1
+total_number_of_test_machines = 3
init_code=init_test()
dest_vm = not_used
gw_vm = not_used
@@ -28,8 +28,9 @@ group3cores = not_used
drop_rate_treshold = 0.01
accuracy = 0.01
-[VM1]
+[TestM1]
name = Generator
+machine_index = 1
config_file = gen_gw.cfg
dest_vm = 3
gw_vm = 2
@@ -38,14 +39,16 @@ group1cores = [1]
group2cores = [3]
group3cores = [1,3]
-[VM2]
+[TestM2]
name = GW1
+machine_index = 2
config_file = secgw1.cfg
dest_vm = 3
group1cores = [1]
-[VM3]
+[TestM3]
name = GW2
+machine_index = 3
config_file = secgw2.cfg
group1cores = [1]
diff --git a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/sriovrapid.yaml b/VNFs/DPPD-PROX/helper-scripts/openstackrapid/sriovrapid.yaml
deleted file mode 100644
index 36d7544..0000000
--- a/VNFs/DPPD-PROX/helper-scripts/openstackrapid/sriovrapid.yaml
+++ /dev/null
@@ -1,185 +0,0 @@
-##
-## Copyright (c) 2010-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.
-##
-
-heat_template_version: 2016-04-08
-description: RAPID stack (Rapid Automated Performance Indication for Dataplane)
-parameters:
- image:
- type: string
- label: Image name or ID
- description: Image to be used for compute instance
- default: RapidVM
- flavor:
- type: string
- label: Flavor
- description: Type of instance (flavor) to be used
- default: prox_flavor
- key:
- type: string
- label: Key name
- description: Name of key-pair to be used for compute instance
- default: prox
- dataplane_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: dataplane-network
- internal_network:
- type: string
- label: Private network name or ID
- description: Network to attach instance to.
- default: admin_internal_net
- floating_network:
- type: string
- label: Floating network name or ID
- description: Public Network to attach instance to.
- default: admin_floating_net
- vm1_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
- vm2_availability_zone:
- type: string
- description: The Availability Zone to launch the instance.
- default: nova
-# vm3_availability_zone:
-# type: string
-# description: The Availability Zone to launch the instance.
-# default: nova
- vm1_sriov_port:
- type: string
- description: The sriov port to be used by VM1
- default: Port1
- vm2_sriov_port:
- type: string
- description: The sriov port to be used by VM2
- default: Port2
-# vm3_sriov_port:
-# type: string
-# description: The sriov port to be used by VM3
-# default: Port3
-
-resources:
- vm1_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm1_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm1_admin_port}
- vm1:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm1_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm1_admin_port}
- - port: {get_param: vm1_sriov_port}
- vm2_admin_port:
- type: OS::Neutron::Port
- properties:
- network: {get_param: internal_network}
- security_groups:
- - default
- vm2_floating_ip:
- type: OS::Neutron::FloatingIP
- properties:
- floating_network: {get_param: floating_network}
- port_id: {get_resource: vm2_admin_port}
- vm2:
- type: OS::Nova::Server
- properties:
- availability_zone: { get_param: vm2_availability_zone }
- user_data:
- get_file: prox_user_data.sh
- key_name: { get_param: key }
- image: { get_param: image }
- flavor: { get_param: flavor }
- networks:
- - port: {get_resource: vm2_admin_port}
- - port: {get_param: vm2_sriov_port}
-# vm3_admin_port:
-# type: OS::Neutron::Port
-# properties:
-# network: {get_param: internal_network}
-# security_groups:
-# - default
-# vm3_floating_ip:
-# type: OS::Neutron::FloatingIP
-# properties:
-# floating_network: {get_param: floating_network}
-# port_id: {get_resource: vm3_admin_port}
-# vm3:
-# type: OS::Nova::Server
-# properties:
-# availability_zone: { get_param: vm3_availability_zone }
-# user_data:
-# get_file: prox_user_data.sh
-# key_name: { get_param: key }
-# image: { get_param: image }
-# flavor: { get_param: flavor }
-# networks:
-# - port: {get_resource: vm3_admin_port}
-# - port: {get_param: vm3_sriov_port}
-
-outputs:
- total_number_of_VMs:
- description: Number of VMs created by this stack
- value: 2
- vm1_private_ip:
- description: IP address of VM1 admin port
- value: { get_attr: [vm1_admin_port, fixed_ips, 0, ip_address] }
- vm1_public_ip:
- description: Floating IP address of VM1 in public network
- value: { get_attr: [ vm1_floating_ip, floating_ip_address ] }
- vm1_dataplane_ip:
- description: IP address of VM1 dataplane port
- value: { get_attr: [vm1, networks,{get_param: dataplane_network},0] }
- vm1_dataplane_mac:
- description: The MAC address of VM1 dataplane port
- value: { get_attr: [vm1, addresses, {get_param: dataplane_network}] }
- vm2_private_ip:
- description: IP address of VM2 admin port
- value: { get_attr: [vm2_admin_port, fixed_ips, 0, ip_address] }
- vm2_public_ip:
- description: Floating IP address of VM2 in public network
- value: { get_attr: [ vm2_floating_ip, floating_ip_address ] }
- vm2_dataplane_ip:
- description: IP address of VM2 dataplane port
- value: { get_attr: [vm2, networks,{get_param: dataplane_network},0] }
- vm2_dataplane_mac:
- description: The MAC address of VM2 dataplane port
- value: { get_attr: [vm2, addresses, {get_param: dataplane_network}]}
-# vm3_private_ip:
-# description: IP address of VM3 admin port
-# value: { get_attr: [vm3_admin_port, fixed_ips, 0, ip_address] }
-# vm3_public_ip:
-# description: Floating IP address of VM3 in public network
-# value: { get_attr: [ vm3_floating_ip, floating_ip_address ] }
-# vm3_dataplane_ip:
-# description: IP address of VM3 dataplane port
-# value: { get_attr: [vm3, networks,{get_param: dataplane_network},0] }
-# vm3_dataplane_mac:
-# description: The MAC address of VM3 dataplane port
-# value: { get_attr: [vm3, addresses, {get_param: dataplane_network}]}