summaryrefslogtreecommitdiffstats
path: root/VNFs
diff options
context:
space:
mode:
authorLuc Provoost <luc.provoost@intel.com>2020-05-28 12:57:46 +0200
committerLuc Provoost <luc.provoost@intel.com>2020-05-28 12:57:46 +0200
commitb3c5a6a20926dc9fca32240b89f3dea09d07aa02 (patch)
tree6753e77e0dd1445d9a55181b282077566a124453 /VNFs
parent8f21fb5ed8231125bca3cec1329d9fd739f14684 (diff)
IPV6 testing & minor changes and fixes
IPV6 test has been added. The generator will now generate IPV6 packets using NDP to resolve MAC addresses. The hex IP addresses in the inline definition of the packets in the cfg files is now calculated by a lua function called in parameters.lua. The hard-coded path /home/centos has been replaced by ~. An error in the speed calculations has been fixed. See the RapidTest class for details. The actual number of generated flows is now reported. If the requested number of flows is not a power of 2, the lowest power of 2 that is larger than the requested number of flows will be used and reported. Change-Id: I36b8d345b4a03c2cf358c19ec353ca8ad2831293 Signed-off-by: Luc Provoost <luc.provoost@intel.com>
Diffstat (limited to 'VNFs')
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test8
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/centos.json12
-rwxr-xr-xVNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh59
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/config_file2
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh31
-rwxr-xr-xVNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh2
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg78
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua61
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test64
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test3
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml4
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml1
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml2
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py2
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py36
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_impairtest.py8
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py12
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py20
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py2
-rw-r--r--VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg47
20 files changed, 362 insertions, 92 deletions
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test b/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test
index 69a5a309..25561bc4 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/basicrapid.test
@@ -49,13 +49,17 @@ test=flowsizetest
# all combinations must be meeting the same threshold
# The threshold is expressed in Mpps
pass_threshold=0.1
-imixs=[[64], [64,800],[128]]
+# Each element in the imix list will result in a separate test. Each element
+# is on its turn a list of packet sizes which will be used during one test
+# execution. If you only want to test 1 size, define a list with only one
+# element.
+imixs=[[64],[64,250,800,800]]
# the number of flows in the list need to be powers of 2, max 2^30
# If not a power of 2, we will use the lowest power of 2 that is larger than
# the requested number of flows. e.g. 9 will result in 16 flows
flows=[64,500000]
# Setting one of the following thresholds to infinity (inf)
-# results in the criterion not being evaluated to rate the test as scussesful
+# results in the criterion not being evaluated to rate the test as succesful
drop_rate_threshold = 0.1
lat_avg_threshold = 50
lat_perc_threshold = 80
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json b/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json
index 92617b86..964de93e 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/centos.json
@@ -19,28 +19,28 @@
{
"type": "file",
"source": "./check_prox_system_setup.sh",
- "destination": "/home/centos/"
+ "destination": "~/"
},
{
"type": "file",
"source": "./check-prox-system-setup.service",
- "destination": "/home/centos/"
+ "destination": "~/"
},
{
"type": "file",
"source": "./sharkproxlog.sh",
- "destination": "/home/centos/"
+ "destination": "~/"
},
{
"type": "file",
"source": "./deploycentostools.sh",
- "destination": "/home/centos/"
+ "destination": "~/"
},
{
"type": "shell",
"inline": [
- "chmod a+x /home/centos/deploycentostools.sh",
- "/home/centos/deploycentostools.sh -u deploy" ]
+ "chmod a+x ~/deploycentostools.sh",
+ "~/deploycentostools.sh -u deploy" ]
}
]
}
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh
index 8621d1f3..984f0255 100755
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/check_prox_system_setup.sh
@@ -18,37 +18,38 @@ NCPUS="$(lscpu | egrep '^CPU\(s\):' | awk '{ print $2 }')"
MAXCOREID="$((NCPUS-1))"
filename="/etc/tuned/realtime-virtual-guest-variables.conf"
-logfile="/home/centos/prox_system_setup.log"
+#logfile="/home/centos/prox_system_setup.log"
+logfile="/opt/rapid/prox_system_setup.log"
if [ -f "$filename" ]
then
- while read -r line
- do
- case $line in
- isolated_cores=1-$MAXCOREID*)
- echo "Isolated CPU(s) OK, no reboot: $line">>$logfile
- sed -i 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
- service sshd restart
- modprobe uio
- insmod /home/centos/dpdk/build/kmod/igb_uio.ko
- exit 0
- ;;
- isolated_cores=*)
- echo "Isolated CPU(s) NOK, change the config and reboot: $line">>$logfile
- sed -i "/^isolated_cores=.*/c\isolated_cores=1-$MAXCOREID" $filename
- tuned-adm profile realtime-virtual-guest
- reboot
- exit 0
- ;;
- *)
- echo "$line"
- ;;
- esac
- done < "$filename"
- echo "isolated_cores=1-$MAXCOREID" >> $filename
- echo "No Isolated CPU(s) defined in config, line added: $line">>$logfile
- tuned-adm profile realtime-virtual-guest
- reboot
+ while read -r line
+ do
+ case $line in
+ isolated_cores=1-$MAXCOREID*)
+ echo "Isolated CPU(s) OK, no reboot: $line">>$logfile
+ sed -i 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
+ service sshd restart
+ modprobe uio
+ insmod /opt/rapid/dpdk/build/kmod/igb_uio.ko
+ exit 0
+ ;;
+ isolated_cores=*)
+ echo "Isolated CPU(s) NOK, change the config and reboot: $line">>$logfile
+ sed -i "/^isolated_cores=.*/c\isolated_cores=1-$MAXCOREID" $filename
+ tuned-adm profile realtime-virtual-guest
+ reboot
+ exit 0
+ ;;
+ *)
+ echo "$line"
+ ;;
+ esac
+ done < "$filename"
+ echo "isolated_cores=1-$MAXCOREID" >> $filename
+ echo "No Isolated CPU(s) defined in config, line added: $line">>$logfile
+ tuned-adm profile realtime-virtual-guest
+ reboot
else
- echo "$filename not found.">>$logfile
+ echo "$filename not found.">>$logfile
fi
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file
index c412b616..e5991649 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/config_file
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/config_file
@@ -1,7 +1,7 @@
[OpenStack]
cloud_name = openstackL6
stack_name = rapid
-heat_template = openstack-rapid.yaml
+heat_template= openstack-rapid.yaml
heat_param = params_rapid.yaml
keypair_name = rapid_key
user = centos
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh
index 18b45469..f89d4fe2 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/deploycentostools.sh
@@ -17,20 +17,13 @@
# Directory for package build
BUILD_DIR="/opt/rapid"
-# Directory where the packer tool has copied some files (e.g. check_prox_system_setup.sh)
-# Runtime scripts are assuming ${WORK_DIR} as the directory for PROX. Check the rundir variable in runrapid.py. Should be the same!
-# This variable is defined in 4 different places and should have the same value: centos.json, deploycentostools.sh, check_prox_system_setup.sh and runrapid.py
-WORK_DIR="/home/centos"
DPDK_VERSION="19.05"
PROX_COMMIT="b71a4cfd"
PROX_CHECKOUT="git checkout ${PROX_COMMIT}"
## Next line is overruling the PROX_COMMIT and will replace the version with a very specific patch. Should be commented out
## if you want to use a committed version of PROX with the COMMIT ID specified above
-##PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/75/69475/2 && git checkout FETCH_HEAD"
-##Following line has the commit for testing IMIX
-#PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/88/69488/3 && git checkout FETCH_HEAD"
-##Following line has the commit for testing IMIX, IPV6, ... It is the merge of all PROX commits on May 12th
-PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/59/69859/7 && git checkout FETCH_HEAD"
+##Following line has the commit for testing IMIX, IPV6, ... It is the merge of all PROX commits on May 27th 2020
+PROX_CHECKOUT="git fetch \"https://gerrit.opnfv.org/gerrit/samplevnf\" refs/changes/23/70223/1 && git checkout FETCH_HEAD"
MULTI_BUFFER_LIB_VER="0.52"
export RTE_SDK="${BUILD_DIR}/dpdk-${DPDK_VERSION}"
export RTE_TARGET="x86_64-native-linuxapp-gcc"
@@ -89,9 +82,9 @@ function os_cfg()
# Install the check_tuned_params service to make sure that the grub cmd line has the right cpus in isolcpu. The actual number of cpu's
# assigned to this VM depends on the flavor used. We don't know at this time what that will be.
- ${SUDO} chmod +x ${WORK_DIR}/check_prox_system_setup.sh
- ${SUDO} cp -r ${WORK_DIR}/check_prox_system_setup.sh /usr/local/libexec/
- ${SUDO} cp -r ${WORK_DIR}/check-prox-system-setup.service /etc/systemd/system/
+ ${SUDO} chmod +x ${HOME}/check_prox_system_setup.sh
+ ${SUDO} mv ${HOME}/check_prox_system_setup.sh /usr/local/libexec/
+ ${SUDO} mv ${HOME}/check-prox-system-setup.service /etc/systemd/system/
${SUDO} systemctl daemon-reload
${SUDO} systemctl enable check-prox-system-setup.service
# Following lines are added to fix the following issue: When the VM gets
@@ -155,7 +148,7 @@ function dpdk_install()
tar -xf ./dpdk-${DPDK_VERSION}.tar.xz
popd > /dev/null 2>&1
- ${SUDO} ln -s ${RTE_SDK} ${WORK_DIR}/dpdk
+ ${SUDO} ln -s ${RTE_SDK} ${BUILD_DIR}/dpdk
pushd ${RTE_SDK} > /dev/null 2>&1
make config T=${RTE_TARGET}
@@ -184,6 +177,7 @@ function prox_compile()
# Compile PROX
pushd ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX
make -j`getconf _NPROCESSORS_ONLN`
+ ${SUDO} cp ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX/build/app/prox ${HOME}/prox
popd > /dev/null 2>&1
}
@@ -193,10 +187,9 @@ function prox_install()
pushd ${BUILD_DIR} > /dev/null 2>&1
git clone https://git.opnfv.org/samplevnf
pushd ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX > /dev/null 2>&1
- ${PROX_CHECKOUT}
+ bash -c "${PROX_CHECKOUT}"
popd > /dev/null 2>&1
prox_compile
- ${SUDO} cp ${BUILD_DIR}/samplevnf/VNFs/DPPD-PROX/build/app/prox ${WORK_DIR}/prox
popd > /dev/null 2>&1
}
@@ -206,16 +199,16 @@ function port_info_build()
pushd ${BUILD_DIR}/port_info > /dev/null 2>&1
make
- ${SUDO} cp ${BUILD_DIR}/port_info/build/app/port_info ${WORK_DIR}/port_info
+ ${SUDO} cp ${BUILD_DIR}/port_info/build/app/port_info ${HOME}/port_info
popd > /dev/null 2>&1
}
function create_minimal_install()
{
- ldd ${WORK_DIR}/prox | awk '{ if ($(NF-1) != "=>") print $(NF-1) }' >> ${BUILD_DIR}/list_of_install_components
+ ldd ${HOME}/prox | awk '{ if ($(NF-1) != "=>") print $(NF-1) }' >> ${BUILD_DIR}/list_of_install_components
- echo "${WORK_DIR}/prox" >> ${BUILD_DIR}/list_of_install_components
- echo "${WORK_DIR}/port_info" >> ${BUILD_DIR}/list_of_install_components
+ echo "${HOME}/prox" >> ${BUILD_DIR}/list_of_install_components
+ echo "${HOME}/port_info" >> ${BUILD_DIR}/list_of_install_components
tar -czvhf ${BUILD_DIR}/install_components.tgz -T ${BUILD_DIR}/list_of_install_components
}
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh b/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh
index ac6ccaa1..f2e3fe29 100755
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/devbind.sh
@@ -2,7 +2,7 @@ link="$(sudo ip -o link | grep MACADDRESS |cut -d":" -f 2)"
if [ -n "$link" ];
then
echo Need to bind
- sudo ~/dpdk/usertools/dpdk-devbind.py --force --bind igb_uio $(sudo ~/dpdk/usertools/dpdk-devbind.py --status |grep $link | cut -d" " -f 1)
+ sudo /opt/rapid/dpdk/usertools/dpdk-devbind.py --force --bind igb_uio $(sudo /opt/rapid/dpdk/usertools/dpdk-devbind.py --status |grep $link | cut -d" " -f 1)
else
echo Assuming port is already bound to DPDK
fi
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg b/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg
new file mode 100644
index 00000000..8f5e399b
--- /dev/null
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/genv6.cfg
@@ -0,0 +1,78 @@
+;;
+;; Copyright (c) 2010-2020 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.
+;;
+
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=p0
+rx desc=2048
+tx desc=2048
+vlan=yes
+
+[variables]
+$mbs=8
+
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+heartbeat timeout=${heartbeat}
+
+[core 0]
+mode=master
+
+[core $gencores]
+name=gen
+task=0
+mode=gen
+sub mode=ndp
+tx port=p0
+bps=1000
+pkt inline=00 00 01 00 00 01 00 00 02 00 00 02 86 dd 60 00 00 00 00 1a 11 40 ${local_hex_ip1} ${dest_hex_ip1} 13 88 13 88 00 1a 55 7b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+global ipv6=${local_ip1}
+min bulk size=$mbs
+max bulk size=16
+drop=yes
+lat pos=62
+packet id pos=66
+signature pos=72
+signature=0x98765432
+accuracy pos=76
+pkt size=80
+
+
+
+[core $latcores]
+name=lat
+task=0
+mode=lat
+sub mode=ndp
+rx port=p0
+lat pos=62
+accuracy pos=76
+packet id pos=66
+signature=0x98765432
+signature pos=72
+accuracy limit nsec=1000000
+latency bucket size=${bucket_size_exp}
+global ipv6=${local_ip1}
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua b/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua
new file mode 100644
index 00000000..d38bb808
--- /dev/null
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/helper.lua
@@ -0,0 +1,61 @@
+--
+-- Copyright (c) 2010-2020 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.
+--
+
+function convertIPToHex(ip)
+ local address_chunks = {}
+ if type(ip) ~= "string" then
+ print ("IP ADDRESS ERROR: ", ip)
+ return "IP ADDRESS ERROR"
+ end
+
+ local chunks = {ip:match("^(%d+)%.(%d+)%.(%d+)%.(%d+)$")}
+ if #chunks == 4 then
+ for i,v in ipairs(chunks) do
+ if tonumber(v) > 255 then
+ print ("IPV4 ADDRESS ERROR: ", ip)
+ return "IPV4 ADDRESS ERROR"
+ end
+ address_chunks[#address_chunks + 1] = string.format ("%02x", v)
+ end
+ result = table.concat(address_chunks, " ")
+ print ("Hex IPV4: ", result)
+ return result
+ end
+
+ delimiter = ":"
+ for match in (ip..delimiter):gmatch("(.-)"..delimiter) do
+ if match ~= "" then
+ number = tonumber(match, 16)
+ if number <= 65535 then
+ table.insert(address_chunks, string.format("%02x %02x",number/256,number % 256))
+ end
+ else
+ table.insert(address_chunks, "")
+ end
+ end
+ for i, chunk in ipairs(address_chunks) do
+ if chunk =="" then
+ table.remove(address_chunks, i)
+ for j = 1,(8-#address_chunks) do
+ table.insert(address_chunks, i, "00 00")
+ end
+ break
+ end
+ end
+ result = table.concat(address_chunks, " ")
+ print ("Hex IPV6: ", result)
+ return result
+end
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test b/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test
new file mode 100644
index 00000000..2dd571b5
--- /dev/null
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/ipv6.test
@@ -0,0 +1,64 @@
+##
+## Copyright (c) 2010-2019 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.
+##
+
+[TestParameters]
+name = BasicSwapTesting
+number_of_tests = 2
+total_number_of_test_machines = 2
+lat_percentile = 99
+
+[TestM1]
+name = Generator
+config_file = genv6.cfg
+dest_vm = 2
+gencores = [1]
+latcores = [3]
+#bucket_size_exp = 12
+
+[TestM2]
+name = Swap
+config_file = swapv6.cfg
+cores = [1,2]
+#prox_socket = true
+#prox_launch_exit = true
+
+[test1]
+test=warmuptest
+flowsize=512
+imix=[64]
+warmupspeed=1
+warmuptime=2
+
+[test2]
+test=flowsizetest
+# Following parameter defines the success criterium for the test.
+# When this test uses multiple combinations of packet size and flows,
+# all combinations must be meeting the same threshold
+# The threshold is expressed in Mpps
+pass_threshold=0.1
+imixs=[[64], [128]]
+# the number of flows in the list need to be powers of 2, max 2^30
+# If not a power of 2, we will use the lowest power of 2 that is larger than
+# the requested number of flows. e.g. 9 will result in 16 flows
+flows=[64,500000]
+# Setting one of the following thresholds to infinity (inf)
+# results in the criterion not being evaluated to rate the test as succesful
+drop_rate_threshold = 0.1
+lat_avg_threshold = 50
+lat_perc_threshold = 80
+lat_max_threshold = inf
+accuracy = 1
+startspeed = 50
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test b/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test
index 5b4b914f..67a57ce7 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/l3framerate.test
@@ -42,6 +42,7 @@ warmuptime=2
test=fixed_rate
imixs=[[64],[128]]
# the number of flows in the list need to be powers of 2, max 2^20
-# Select from following numbers: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576
+# If not a power of 2, we will use the lowest power of 2 that is larger than
+# the requested number of flows. e.g. 9 will result in 16 flows
flows=[1,64]
startspeed=5
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml
index 2dec7175..1c6fbee4 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/openstack-rapid.yaml
@@ -108,8 +108,8 @@ outputs:
data_plane_ips:
description: List of list of list of DataPlane IPs of the VMs
value:
- - {get_attr: [PROXVMs, data_plane_ip]}
- - {get_attr: [PROX2VMs, data_plane_ip]}
+ - {get_attr: [PROXVMs, data_plane_ips]}
+ - {get_attr: [PROX2VMs, data_plane_ips]}
data_plane_macs:
description: List of list of list of DataPlane MACs of the VMs
value:
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml
index 3640905a..7c1884ee 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/params_rapid.yaml
@@ -1,5 +1,6 @@
parameters:
public_net_name: admin_floating_net
+ data_net_name: dataplane-network
PROX_image: rapidVM
my_availability_zone: nova
security_group: prox_security_group
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml
index f1b52743..84311e25 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid-openstack-server.yaml
@@ -72,7 +72,7 @@ outputs:
mngmt_ip:
description: Management IP of the VM
value: {get_attr: [floating_ip, floating_ip_address ]}
- data_plane_ip:
+ data_plane_ips:
description: List of DataPlane IPs of the VM
value:
- {get_attr: [data_port, fixed_ips, 0, ip_address]}
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py
index f5155a57..661554df 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_flowsizetest.py
@@ -126,7 +126,7 @@ class FlowSizeTest(RapidTest):
self.gen_machine.reset_stats()
if self.sut_machine:
self.sut_machine.reset_stats()
- self.gen_machine.set_flows(flow_number)
+ flow_number = self.gen_machine.set_flows(flow_number)
self.set_background_flows(self.background_machines, flow_number)
endspeed = None
speed = self.get_start_speed_and_init(size)
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py
index cfd0bb11..35407535 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_generator_machine.py
@@ -37,32 +37,43 @@ class RandomPortBits(object):
# and that might be an invalid UDP port and result in
# packets begin discarded
src_number_of_random_bits = number_of_random_bits // 2
- dst_number_of_random_bits = number_of_random_bits - src_number_of_random_bits
- src_port_bitmap = '1000000000000000'.replace ('0','X',src_number_of_random_bits)
- dst_port_bitmap = '1000000000000000'.replace ('0','X',dst_number_of_random_bits)
- return [src_port_bitmap, dst_port_bitmap]
+ dst_number_of_random_bits = (number_of_random_bits -
+ src_number_of_random_bits)
+ src_port_bitmap = '1000000000000000'.replace ('0','X',
+ src_number_of_random_bits)
+ dst_port_bitmap = '1000000000000000'.replace ('0','X',
+ dst_number_of_random_bits)
+ return [src_port_bitmap, dst_port_bitmap, 1<<number_of_random_bits]
class RapidGeneratorMachine(RapidMachine):
"""
Class to deal with rapid configuration files
"""
def get_cores(self):
- return (self.machine_params['gencores'] + self.machine_params['latcores'])
+ return (self.machine_params['gencores'] +
+ self.machine_params['latcores'])
def generate_lua(self, vim):
- appendix = 'gencores="%s"\n'% ','.join(map(str, self.machine_params['gencores']))
- appendix = appendix + 'latcores="%s"\n'% ','.join(map(str, self.machine_params['latcores']))
+ appendix = 'gencores="%s"\n'% ','.join(map(str,
+ self.machine_params['gencores']))
+ appendix = appendix + 'latcores="%s"\n'% ','.join(map(str,
+ self.machine_params['latcores']))
if 'gw_vm' in self.machine_params.keys():
- for index, gw_ip in enumerate(self.machine_params['gw_ips'], start = 1):
+ for index, gw_ip in enumerate(self.machine_params['gw_ips'],
+ start = 1):
appendix = appendix + 'gw_ip{}="{}"\n'.format(index, gw_ip)
- appendix = appendix + 'gw_hex_ip{}="{}"\n'.format(index, self.ip2hex(gw_ip))
+ appendix = (appendix +
+ 'gw_hex_ip{}=convertIPToHex(gw_ip{})\n'.format(index,
+ index))
if 'bucket_size_exp' in self.machine_params.keys():
self.bucket_size_exp = self.machine_params['bucket_size_exp']
else:
self.bucket_size_exp = 11
- appendix = appendix + 'bucket_size_exp="{}"\n'.format(self.bucket_size_exp)
+ appendix = (appendix +
+ 'bucket_size_exp="{}"\n'.format(self.bucket_size_exp))
if 'heartbeat' in self.machine_params.keys():
- appendix = appendix + 'heartbeat="%s"\n'% self.machine_params['heartbeat']
+ appendix = (appendix +
+ 'heartbeat="%s"\n'% self.machine_params['heartbeat'])
else:
appendix = appendix + 'heartbeat="60"\n'
super().generate_lua(vim, appendix)
@@ -103,12 +114,13 @@ class RapidGeneratorMachine(RapidMachine):
prox_sizes)
def set_flows(self, number_of_flows):
- source_port,destination_port = RandomPortBits.get_bitmap(
+ source_port, destination_port, actualflows = RandomPortBits.get_bitmap(
number_of_flows)
self.socket.set_random(self.machine_params['gencores'],0,34,
source_port,2)
self.socket.set_random(self.machine_params['gencores'],0,36,
destination_port,2)
+ return actualflows
def start_gen_cores(self):
self.socket.start(self.machine_params['gencores'])
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_impairtest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_impairtest.py
index eeed2384..89e337de 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_impairtest.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_impairtest.py
@@ -43,15 +43,15 @@ class ImpairTest(RapidTest):
imix = self.test['imix']
size = mean (imix)
flow_number = self.test['flowsize']
+ attempts = 0
+ self.gen_machine.set_udp_packet_size(imix)
+ flow_number = self.gen_machine.set_flows(flow_number)
+ self.gen_machine.start_latency_cores()
RapidLog.info("+-----------------------------------------------------------------------------------------------------------------------------------------------------------------+")
RapidLog.info("| Generator is sending UDP ("+'{:>5}'.format(flow_number)+" flow) packets ("+ '{:>5}'.format(size) +" bytes) to SUT via GW dropping and delaying packets. SUT sends packets back. Use ctrl-c to stop the test |")
RapidLog.info("+--------+--------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+------------+")
RapidLog.info("| Test | Speed requested | Sent to NIC | Sent by Gen | Forward by SUT | Rec. by Gen | Avg. Latency | Max. Latency | Packets Lost | Loss Ratio |")
RapidLog.info("+--------+--------------------+----------------+----------------+----------------+----------------+----------------+----------------+----------------+------------+")
- attempts = 0
- self.gen_machine.set_udp_packet_size(imix)
- self.gen_machine.set_flows(flow_number)
- self.gen_machine.start_latency_cores()
speed = self.test['startspeed']
self.gen_machine.set_generator_speed(speed)
while True:
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py
index b5b90d65..a052ba3c 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_machine.py
@@ -24,11 +24,6 @@ class RapidMachine(object):
"""
Class to deal with rapid configuration files
"""
- @staticmethod
- def ip2hex(ip):
- ip = ip.split('.')
- return(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))
-
def __init__(self, key, user, vim, rundir, machine_params):
self.name = machine_params['name']
self.ip = machine_params['admin_ip']
@@ -78,10 +73,11 @@ class RapidMachine(object):
self.all_tasks_for_this_cfg = set(re.findall("task\s*=\s*(\d+)",PROXConfig))
self.LuaFileName = 'parameters-{}.lua'.format(self.ip)
with open(self.LuaFileName, "w") as LuaFile:
+ LuaFile.write('require "helper"\n')
LuaFile.write('name="%s"\n'% self.name)
for index, dp_port in enumerate(self.dp_ports, start = 1):
LuaFile.write('local_ip{}="{}"\n'.format(index, dp_port['ip']))
- LuaFile.write('local_hex_ip{}="{}"\n'.format(index, self.ip2hex(dp_port['ip'])))
+ LuaFile.write('local_hex_ip{}=convertIPToHex(local_ip{})\n'.format(index, index))
if vim in ['kubernetes']:
LuaFile.write("eal=\"--socket-mem=512,0 --file-prefix %s --pci-whitelist %s\"\n" % (self.name, self.machine_params['dp_pci_dev']))
else:
@@ -93,11 +89,11 @@ class RapidMachine(object):
if 'dest_ports' in self.machine_params.keys():
for index, dest_port in enumerate(self.machine_params['dest_ports'], start = 1):
LuaFile.write('dest_ip{}="{}"\n'.format(index, dest_port['ip']))
- LuaFile.write('dest_hex_ip{}="{}"\n'.format(index, self.ip2hex(dest_port['ip'])))
- LuaFile.write('dest_hex_ip{}="{}"\n'.format(index, self.ip2hex(dest_port['ip'])))
+ LuaFile.write('dest_hex_ip{}=convertIPToHex(dest_ip{})\n'.format(index, index))
LuaFile.write('dest_hex_mac{}="{}"\n'.format(index , dest_port['mac'].replace(':',' ')))
LuaFile.write(appendix)
self._client.scp_put(self.LuaFileName, self.rundir + '/parameters.lua')
+ self._client.scp_put('helper.lua', self.rundir + '/helper.lua')
def start_prox(self, autostart=''):
if self.machine_params['prox_launch_exit']:
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py
index 2466d89b..b39520c7 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_test.py
@@ -29,22 +29,34 @@ class RapidTest(object):
@staticmethod
def get_percentageof10Gbps(pps_speed,size):
# speed is given in pps, returning % of 10Gb/s
- return (pps_speed / 1000000.0 * 0.08 * (size+28))
+ # 12 bytes is the inter packet gap
+ # pre-amble is 7 bytes
+ # SFD (start of frame delimiter) is 1 byte
+ # Total of 20 bytes overhead per packet
+ return (pps_speed / 1000000.0 * 0.08 * (size+20))
@staticmethod
def get_pps(speed,size):
# speed is given in % of 10Gb/s, returning Mpps
- return (speed * 100.0 / (8*(size+28)))
+ # 12 bytes is the inter packet gap
+ # pre-amble is 7 bytes
+ # SFD (start of frame delimiter) is 1 byte
+ # Total of 20 bytes overhead per packet
+ return (speed * 100.0 / (8*(size+20)))
@staticmethod
def get_speed(packet_speed,size):
# return speed in Gb/s
- return (packet_speed / 1000.0 * (8*(size+28)))
+ # 12 bytes is the inter packet gap
+ # pre-amble is 7 bytes
+ # SFD (start of frame delimiter) is 1 byte
+ # Total of 20 bytes overhead per packet
+ return (packet_speed / 1000.0 * (8*(size+20)))
@staticmethod
def set_background_flows(background_machines, number_of_flows):
for machine in background_machines:
- machine.set_flows(number_of_flows)
+ _ = machine.set_flows(number_of_flows)
@staticmethod
def set_background_speed(background_machines, speed):
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py
index 587ef22a..e316f6e2 100644
--- a/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/rapid_warmuptest.py
@@ -42,7 +42,7 @@ class WarmupTest(RapidTest):
self.gen_machine.set_generator_speed(WARMUPSPEED)
self.gen_machine.set_udp_packet_size(imix)
# gen_machine['socket'].set_value(gencores,0,56,1,1)
- self.gen_machine.set_flows(FLOWSIZE)
+ _ = self.gen_machine.set_flows(FLOWSIZE)
self.gen_machine.start()
time.sleep(WARMUPTIME)
self.gen_machine.stop()
diff --git a/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg b/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg
new file mode 100644
index 00000000..ce323e9c
--- /dev/null
+++ b/VNFs/DPPD-PROX/helper-scripts/rapid/swapv6.cfg
@@ -0,0 +1,47 @@
+;;
+;; Copyright (c) 2010-2019 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.
+;;
+
+[lua]
+dofile("parameters.lua")
+
+[eal options]
+-n=4 ; force number of memory channels
+no-output=no ; disable DPDK debug output
+eal=--proc-type auto ${eal}
+
+[port 0]
+name=if0
+mac=hardware
+vlan=yes
+
+[defaults]
+mempool size=8K
+
+[global]
+name=${name}
+
+[core 0]
+mode=master
+
+[core $cores]
+name=swap
+task=0
+mode=swap
+sub mode=ndp
+rx port=if0
+tx port=if0
+global ipv6=${local_ip1}
+drop=no