diff options
author | Mikhail Sennikovsky <mikhail.sennikovskii@ionos.com> | 2021-08-23 17:57:14 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2021-09-06 12:49:29 +0200 |
commit | da096d06a4b5c81a0476d7d4871f5f3d06566a30 (patch) | |
tree | 9b1bc680189a705df7aa83f8aa10d9786b5fedb3 /tests | |
parent | e8008c016944c48dbb7045628f0f6e541544c7ea (diff) |
tests/conntrack: script for stress-testing ct load
The tests/conntrack/bulk-load-stress.sh is intended to be used for
stress-testing the bulk load of ct entries from a file (-R option).
Script usage detail is given by the ./bulk-load-stress.sh -h
Signed-off-by: Mikhail Sennikovsky <mikhail.sennikovskii@ionos.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/conntrack/bulk-load-stress.sh | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/tests/conntrack/bulk-load-stress.sh b/tests/conntrack/bulk-load-stress.sh new file mode 100755 index 0000000..9250528 --- /dev/null +++ b/tests/conntrack/bulk-load-stress.sh @@ -0,0 +1,163 @@ +#!/bin/bash + +DEFAULT_CT="../../src/conntrack" +DEFAULT_SPORT_COUNT=0xffff +DEFAULT_DPORT_COUNT=0x2 +DEFAULT_TMP_FILE="./ct_data.txt" +DEFAULT_CT_ZONE=123 +DEFAULT_GEN_ONLY=0 +DEFAULT_CLEANUP_INDIVIDUAL=0 + +CT=$DEFAULT_CT +SPORT_COUNT=$DEFAULT_SPORT_COUNT +DPORT_COUNT=$DEFAULT_DPORT_COUNT +TMP_FILE=$DEFAULT_TMP_FILE +CT_ZONE=$DEFAULT_CT_ZONE +GEN_ONLY=$DEFAULT_GEN_ONLY +CLEANUP_INDIVIDUAL=$DEFAULT_CLEANUP_INDIVIDUAL + +print_help() +{ + me=$(basename "$0") + + echo "Script for stress-testing bulk ct entries load (-R option)" + echo "" + echo "Usage: $me [options]" + echo "" + echo "Where options can be:" + echo "" + echo "-dpc <dst_port_count> - number of destination port values." + echo " Default is ${DEFAULT_DPORT_COUNT}." + echo "" + echo "-spc <src_port_count> - number of source port values." + echo " Default is ${DEFAULT_SPORT_COUNT}." + echo "" + echo "-ct <ct_tool_path> - path to the conntrack tool." + echo " Default is ${DEFAULT_CT}." + echo "" + echo "-z <ct_zone> - ct zone to be used." + echo " Default is ${DEFAULT_CT_ZONE}." + echo "" + echo "-f <tmp_file_name> - tmp file to be used to generate the ct data to." + echo " Default is ${DEFAULT_TMP_FILE}." + echo "" + echo "-g - Generate tmp file and exit." + echo "" + echo "-h - Print this help and exit." +} + +function ct_data_gen() +{ + for (( d = 1; d <= $DPORT_COUNT; d++ )) do + for (( s = 1; s <= $SPORT_COUNT; s++ )) do + echo "-I -w $CT_ZONE -s 1.1.1.1 -d 2.2.2.2 -p tcp --sport ${s} --dport ${d} --state LISTEN -u SEEN_REPLY -t 50" + done + done +} + +if [ $UID -ne 0 ] +then + echo "Run this test as root" + exit 1 +fi + +while [ $# -gt 0 ] +do + case "$1" in + -spc) + SPORT_COUNT=${2:-} + if [ -z "$SPORT_COUNT" ] + then + echo "Source port must be specified!" + print_help + exit 1 + fi + shift + ;; + -dpc) + DPORT_COUNT=${2:-} + if [ -z "$DPORT_COUNT" ] + then + echo "Destination port must be specified!" + print_help + exit 1 + fi + shift + ;; + -ct) + CT=${2:-} + if [ -z "$CT" ] + then + echo "conntrack path must be specified!" + print_help + exit 1 + fi + shift + ;; + -z) + CT_ZONE=${2:-} + if [ -z "$CT_ZONE" ] + then + echo "ct zone must be specified!" + print_help + exit 1 + fi + shift + ;; + -f) + TMP_FILE=${2:-} + if [ -z "$TMP_FILE" ] + then + echo "Tmp file must be specified!" + print_help + exit 1 + fi + shift + ;; + -g) + GEN_ONLY=1 + ;; + -ci) + CLEANUP_INDIVIDUAL=1 + ;; + -h) + print_help + exit 1 + ;; + *) + echo "Unknown paramerer \"$1\"" + print_help + exit 1 + ;; + esac + shift +done + +ct_data_gen > $TMP_FILE + +NUM_ENTRIES=$(cat ${TMP_FILE} | wc -l) + +echo "File ${TMP_FILE} is generated, number of entries: ${NUM_ENTRIES}." + +if [ "$GEN_ONLY" -eq "1" ]; then + exit 0 +fi + +echo "Loading ${NUM_ENTRIES} entries from ${TMP_FILE} .." +time -p ${CT} -R $TMP_FILE + +if [ "$CLEANUP_INDIVIDUAL" -eq "1" ]; then + sed -i -e "s/-I/-D/g" -e "s/-t 50//g" $TMP_FILE + + NUM_ENTRIES=$(cat ${TMP_FILE} | wc -l) + + echo "File ${TMP_FILE} is updated, number of entries: ${NUM_ENTRIES}." + + echo "Cleaning ${NUM_ENTRIES} entries from ${TMP_FILE} .." + time -p ${CT} -R $TMP_FILE +fi + + +echo "Cleaning up zone ${CT_ZONE}.." +time -p ${CT} -D -w $CT_ZONE > /dev/null +rm $TMP_FILE |