repositories / bugabinga.net
bugabinga.net
personal infrastructure for bugabinga!
owned by admin
scripts/local/test-wireguard-mss.sh
Raw#!/usr/bin/env bash
set -euo pipefail
umask 077
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
remote="$repo_root/scripts/remote/apply-wireguard-mss.sh"
work="$(mktemp -d /var/tmp/pufferpanel-fork/auto-mtu-tests/mss.XXXXXX)"
trap 'rm -rf "$work"' EXIT
mkdir "$work/bin"
cat >"$work/bin/nft" <<'MOCK'
#!/usr/bin/env bash
set -euo pipefail
printf '%s\n' "$*" >>"$MOCK_STATE/log"
case "$*" in
'list tables') if [[ -e "$MOCK_STATE/table" ]]; then echo 'table inet wireguard_mss'; fi ;;
'list table inet wireguard_mss') cat "$MOCK_STATE/table" ;;
'--check --file '*) [[ ! -e "$MOCK_STATE/fail-check" ]] ;;
'--file '*)
[[ ! -e "$MOCK_STATE/fail-apply" ]] || exit 1
cp "$2" "$MOCK_STATE/table"
;;
*) exit 1 ;;
esac
MOCK
chmod 0700 "$work/bin/nft"
export PATH="$work/bin:$PATH" MOCK_STATE="$work" WG_MSS_TEST=1
export WG_MSS_CONFIG="$work/nftables.conf" WG_MSS_FRAGMENT="$work/mss.nft"
printf 'flush ruleset\ntable inet filter { }\n' >"$WG_MSS_CONFIG"
cp "$WG_MSS_CONFIG" "$work/original"
bash "$remote" 1392 --render >"$work/rendered"
[[ "$(grep -c 'tcp option maxseg size > 1352 tcp option maxseg size set 1352' "$work/rendered")" = 2 ]]
[[ "$(grep -c 'tcp option maxseg size > 1332 tcp option maxseg size set 1332' "$work/rendered")" = 2 ]]
[[ "$(grep -c 'tcp flags & (syn | rst) == syn' "$work/rendered")" = 4 ]]
if grep -E 'flush|dnat|snat|masquerade|dport' "$work/rendered"; then exit 1; fi
if bash "$remote" 1279 --render; then exit 1; fi
# Conditions must preserve any smaller advertised MSS in either IP family.
for cap in 1352 1332; do
for advertised in 536 1200 "$cap" 1460; do
result="$advertised"
if ((advertised > cap)); then result="$cap"; fi
((result <= advertised && result <= cap))
done
done
bash "$remote" 1392 >/dev/null
cmp "$work/rendered" "$WG_MSS_FRAGMENT"
[[ "$(grep -Fc "include \"$WG_MSS_FRAGMENT\"" "$WG_MSS_CONFIG")" = 1 ]]
bash "$remote" 1392 >/dev/null
[[ "$(grep -Fc "include \"$WG_MSS_FRAGMENT\"" "$WG_MSS_CONFIG")" = 1 ]]
grep -Fxq 'delete table inet wireguard_mss' "$work/table"
cp "$WG_MSS_CONFIG" "$work/config.before"
cp "$WG_MSS_FRAGMENT" "$work/fragment.before"
cp "$work/table" "$work/table.before"
touch "$work/fail-apply"
if bash "$remote" 1380 >/dev/null; then exit 1; fi
cmp "$work/config.before" "$WG_MSS_CONFIG"
cmp "$work/fragment.before" "$WG_MSS_FRAGMENT"
cmp "$work/table.before" "$work/table"
rm "$work/fail-apply"
touch "$work/fail-check"
if bash "$remote" 1380 >/dev/null; then exit 1; fi
cmp "$work/config.before" "$WG_MSS_CONFIG"
printf '%s\n' 'WireGuard MSS render, caps, repeat apply, validation failure, and atomic-failure rollback tests passed'