diff mbox series

[1/2] tests/conntrack: script for stress-testing ct load

Message ID 20210823155715.81729-2-mikhail.sennikovskii@ionos.com
State Accepted
Delegated to: Pablo Neira
Headers show
Series Reusing nfct handle for bulk ct loads | expand

Commit Message

Mikhail Sennikovsky Aug. 23, 2021, 3:57 p.m. UTC
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>
---
 tests/conntrack/bulk-load-stress.sh | 152 ++++++++++++++++++++++++++++
 1 file changed, 152 insertions(+)
 create mode 100755 tests/conntrack/bulk-load-stress.sh

Comments

Pablo Neira Ayuso Sept. 6, 2021, 10:48 a.m. UTC | #1
On Mon, Aug 23, 2021 at 05:57:14PM +0200, Mikhail Sennikovsky wrote:
> 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

Applied with a few edits, thanks.
diff mbox series

Patch

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