diff options
Diffstat (limited to 'tests/gen.sh')
-rwxr-xr-x | tests/gen.sh | 214 |
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 |