summaryrefslogtreecommitdiff
path: root/tests/gen.sh
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2019-11-19 00:18:17 (GMT)
committerStefano Brivio <sbrivio@redhat.com>2019-11-19 00:18:17 (GMT)
commita724e8dbd67ce3d9bf5a24bd836dea4ad3a5516f (patch)
tree8575f185b5f2e773a7334ffe1dd5891a70bb2151 /tests/gen.sh
pipapo: Initial importHEADmaster
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tests/gen.sh')
-rwxr-xr-xtests/gen.sh214
1 files changed, 214 insertions, 0 deletions
diff --git a/tests/gen.sh b/tests/gen.sh
new file mode 100755
index 0000000..05b3b51
--- /dev/null
+++ b/tests/gen.sh
@@ -0,0 +1,214 @@
+#!/bin/sh -e
+#
+# PIPAPO - PIle PAcket POlicies
+#
+# tests/gen.sh - Generate test sets and packets
+#
+# Author: Stefano Brivio <sbrivio@redhat.com>
+# License: GPLv2
+
+rand() {
+ shuf -i ${1}-${2} -n 1
+}
+
+port() {
+ if [ "${size}" = "single" ]; then
+ p1=$(rand 0 65535)
+ p2=$((p1 / 2 + 1))
+
+ printf "dport key\na ${p1} 1\n" > port.single
+ printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) > port.single.packets
+ printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> port.single.packets
+ return
+ fi
+
+ case ${size} in
+ tiny) n=100 ;;
+ small) n=1000 ;;
+ mid) n=10000 ;;
+ big) n=100000 ;;
+ huge) n=200000 ;;
+ esac
+
+ :> port.${size}.packets
+ printf "dport key\n" > port.${size}
+ p=$(rand 0 10)
+ mul=$(rand 1 2)
+ inc=$(rand 1 50)
+ nopkt=0
+ for i in $(seq 1 ${n}); do
+ p=$((p * mul + inc))
+ if [ ${p} -ge 65536 ]; then
+ nopkt=1
+ p=$((p % 65536))
+ fi
+ if [ ${nopkt} -eq 0 ]; then
+ printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" ${i} $((p / 256)) $((p % 256)) >> port.${size}.packets
+ fi
+ printf "a %i %i\n" ${p} ${i} >> port.${size}
+ done
+}
+
+net_port() {
+ if [ "${size}" = "single" ]; then
+ p1=$(rand 0 65535)
+ p2=$((p1 / 2 + 1))
+
+ printf "daddr dport key\na 10.$((p1 / 256)).$((p1 % 256)).5 ${p1} 1\n" > net_port.single
+ printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 10 %i %i 5 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) $((p1 / 256)) $((p1 % 256)) > net_port.single.packets
+ printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> net_port.single.packets
+ return
+ fi
+
+ case ${size} in
+ tiny) n=10 ;;
+ small) n=100 ;;
+ mid) n=316 ;;
+ big) n=1000 ;;
+ huge) n=10000 ;;
+ esac
+
+ :> net_port.${size}.packets
+ printf "daddr dport key\n" > net_port.${size}
+ a=$(rand 0 10)
+ p=$(rand 0 10)
+ inc=$(rand 1 50)
+ nopkt=0
+ for i in $(seq 1 ${n}); do
+ mul=$(rand 1 5)
+ a=$((a + inc * mul))
+ if [ ${a} -lt 4294967296 ]; then
+ a=$((a % 4294967296))
+ else
+ nopkt=1
+ fi
+
+ a1=$((a / 16777216))
+ a2=$(((a / 65536) % 256))
+ a3=$(((a / 256) % 256))
+ a4=$((a % 256))
+
+ p=$(((p * mul + inc) % 65536))
+ p1=$((p / 256))
+ p2=$((p % 256))
+
+ if [ ${nopkt} -eq 0 ]; then
+ printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${a1} ${a2} ${a3} ${a4} ${p1} ${p2} >> net_port.${size}.packets
+ fi
+ printf "a %i.%i.%i.%i %i %i\n" ${a1} ${a2} ${a3} ${a4} ${p} ${i} >> net_port.${size}
+ done
+}
+
+net_port_ranged() {
+ if [ "${size}" = "single" ]; then
+ p1=$(rand 0 65535)
+ p2=$((p1 / 2 + 1))
+
+ printf "daddr dport key\na 10.$((p1 / 256)).0.$((p1 % 256))-10.$((p1 / 256)).$((p1 / 256)).$((p1 / 256)) ${p1} 1\n" > net_port_ranged.single
+ printf "1 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 10 %i 0 %i 0 0 %i %i\n" $((p1 / 256)) $((p1 % 256)) $((p1 / 256)) $((p1 % 256)) > net_port_ranged.single.packets
+ printf "0 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 %i %i\n" $((p2 / 256)) $((p2 % 256)) >> net_port_ranged.single.packets
+ return
+ fi
+
+ case ${size} in
+ tiny) n=10 ;;
+ small) n=100 ;;
+ mid) n=316 ;;
+ big) n=1000 ;;
+ huge) n=10000 ;;
+ esac
+
+ :> net_port_ranged.${size}.packets
+ printf "daddr dport key\n" > net_port_ranged.${size}
+ a=$(rand 0 10)
+ p=$(rand 0 10)
+ inc=$(rand 1 50)
+ nopkt=0
+ for i in $(seq 1 ${n}); do
+ mul=$(rand 2 5)
+ a=$((a + inc * mul))
+ if [ ${a} -lt 4094967296 ]; then
+ a=$((a % 4094967296))
+ else
+ nopkt=1
+ fi
+
+ end=$((a + inc))
+
+ s1=$((a / 16777216))
+ s2=$(((a / 65536) % 256))
+ s3=$(((a / 256) % 256))
+ s4=$((a % 256))
+
+ e1=$((end / 16777216))
+ e2=$(((end / 65536) % 256))
+ e3=$(((end / 256) % 256))
+ e4=$((end % 256))
+
+ p=$(((p * mul + inc) % 60536))
+ p1=$((p / 256))
+ p2=$((p % 256))
+
+ if [ ${nopkt} -eq 0 ] && [ ${s4} -ne ${e4} ]; then
+ printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${s1} ${s2} ${s3} ${s4} ${p1} ${p2} >> net_port_ranged.${size}.packets
+ printf "%i 0 0 0 0 0 0 0 0 0 0 0 0 0x08 0x00 0x45 0 64 0 1 2 3 0 0 1 0 0 0 0 0 0 %i %i %i %i 0 0 %i %i\n" ${i} ${e1} ${e2} ${e3} ${e4} ${p1} ${p2} >> net_port_ranged.${size}.packets
+ fi
+ printf "a %i.%i.%i.%i-%i.%i.%i.%i %i-%i %i\n" ${s1} ${s2} ${s3} ${s4} ${e1} ${e2} ${e3} ${e4} ${p} $((p + inc)) ${i} >> net_port_ranged.${size}
+ done
+}
+
+mac_net6_ranged() {
+ case ${size} in
+ single) n=1 ;;
+ tiny) n=3 ;;
+ small) n=10 ;;
+ mid) n=31 ;;
+ big) n=100 ;;
+ huge) n=316 ;;
+ esac
+
+ :> mac_net6_ranged.${size}.packets
+ printf "dmac saddr6 key\n" > mac_net6_ranged.${size}
+ m=$(rand 0 10)
+ a=$(rand 0 10)
+ inc=$(rand 1 50)
+ nopkt=0
+ for i in $(seq 1 ${n}); do
+ mul=$(rand 2 5)
+
+ a=$((a + inc * mul))
+ end=$((a + inc))
+
+ sh=$((a / 65535))
+ sl=$((a % 65535))
+
+ eh=$((end / 65535))
+ el=$((end % 65535))
+
+ s1=$((sh / 256))
+ s2=$((sh % 256))
+ s3=$((sl / 256))
+ s4=$((sl % 256))
+
+ e1=$((eh / 256))
+ e2=$((eh % 256))
+ e3=$((el / 256))
+ e4=$((el % 256))
+
+ m=$(((m * mul + inc) % 60536))
+ m1=$((m / 256))
+ m2=$((m % 256))
+
+ printf "%i 0 0 0 0 %i %i 0 0 0 0 0 0 0x86 0xdd 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x%02x 0x%02x 0x%02x 0x%02x\n" ${i} ${m1} ${m2} ${s1} ${s2} ${s3} ${s4} >> mac_net6_ranged.${size}.packets
+ printf "%i 0 0 0 0 %i %i 0 0 0 0 0 0 0x86 0xdd 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x20 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x%02x 0x%02x 0x%02x 0x%02x\n" ${i} ${m1} ${m2} ${e1} ${e2} ${e3} ${e4} >> mac_net6_ranged.${size}.packets
+ printf "a 00:00:00:00:%02x:%02x-00:00:00:%02x:00:00 2001::%04x:%04x-2001::%04x:%04x %i\n" ${m1} ${m2} $((m1 + 1)) ${sh} ${sl} ${eh} ${el} ${i} >> mac_net6_ranged.${size}
+ done
+}
+
+for type in port net_port net_port_ranged mac_net6_ranged; do
+ for size in single tiny small mid big huge; do
+ printf "Generating ${type}.${size} test set..."
+ ${type} ${size}
+ printf " done\n"
+ done
+done