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@xxxxxxxxx> --- tests/conntrack/bulk-load-stress.sh | 152 ++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100755 tests/conntrack/bulk-load-stress.sh diff --git a/tests/conntrack/bulk-load-stress.sh b/tests/conntrack/bulk-load-stress.sh new file mode 100755 index 0000000..de7bd8d --- /dev/null +++ b/tests/conntrack/bulk-load-stress.sh @@ -0,0 +1,152 @@ +#!/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." +} + + +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 + + +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 +} + +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} .." +sudo 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} .." + sudo time -p ${CT} -R $TMP_FILE +fi + + +echo "Cleaning up zone ${CT_ZONE}.." +sudo time -p ${CT} -D -w $CT_ZONE > /dev/null +rm $TMP_FILE -- 2.25.1