#!/bin/bash
# SPDX-License-Identifier: GPL-2.0

source lib.sh

IP6=2001:db8:1::1/64
TGT6=2001:db8:1::2
TMPF=$(mktemp --suffix ".pcap")

cleanup()
{
    rm -f $TMPF
    cleanup_ns $NS
}

trap cleanup EXIT

tcpdump -h | grep immediate-mode >> /dev/null
if [ $? -ne 0 ]; then
    echo "SKIP - tcpdump with --immediate-mode option required"
    exit $ksft_skip
fi

# Namespaces
setup_ns NS
NSEXE="ip netns exec $NS"

$NSEXE sysctl -w net.ipv4.ping_group_range='0 2147483647' > /dev/null

# Connectivity
ip -netns $NS link add type dummy
ip -netns $NS link set dev dummy0 up
ip -netns $NS addr add $IP6 dev dummy0

# Test
BAD=0
TOTAL=0

check_result() {
    ((TOTAL++))
    if [ $1 -ne $2 ]; then
	echo "  Case $3 returned $1, expected $2"
	((BAD++))
    fi
}

# IPV6_DONTFRAG
for ovr in setsock cmsg both diff; do
    for df in 0 1; do
	for p in u i r; do
	    [ $p == "u" ] && prot=UDP
	    [ $p == "i" ] && prot=ICMP
	    [ $p == "r" ] && prot=RAW

	    [ $ovr == "setsock" ] && m="-F $df"
	    [ $ovr == "cmsg" ]    && m="-f $df"
	    [ $ovr == "both" ]    && m="-F $df -f $df"
	    [ $ovr == "diff" ]    && m="-F $((1 - df)) -f $df"

	    $NSEXE ./cmsg_sender -s -S 2000 -6 -p $p $m $TGT6 1234
	    check_result $? $df "DONTFRAG $prot $ovr"
	done
    done
done

# IPV6_TCLASS
TOS=0x10
TOS2=0x20

ip -6 -netns $NS rule add tos $TOS lookup 300
ip -6 -netns $NS route add table 300 prohibit any

for ovr in setsock cmsg both diff; do
    for p in u i r; do
	[ $p == "u" ] && prot=UDP
	[ $p == "i" ] && prot=ICMP
	[ $p == "r" ] && prot=RAW

	[ $ovr == "setsock" ] && m="-C"
	[ $ovr == "cmsg" ]    && m="-c"
	[ $ovr == "both" ]    && m="-C $((TOS2)) -c"
	[ $ovr == "diff" ]    && m="-C $((TOS )) -c"

	$NSEXE nohup tcpdump --immediate-mode -p -ni dummy0 -w $TMPF -c 4 2> /dev/null &
	BG=$!
	sleep 0.05

	$NSEXE ./cmsg_sender -6 -p $p $m $((TOS2)) $TGT6 1234
	check_result $? 0 "TCLASS $prot $ovr - pass"

	while [ -d /proc/$BG ]; do
	    $NSEXE ./cmsg_sender -6 -p u $TGT6 1234
	done

	tcpdump -r $TMPF -v 2>&1 | grep "class $TOS2" >> /dev/null
	check_result $? 0 "TCLASS $prot $ovr - packet data"
	rm $TMPF

	[ $ovr == "both" ]    && m="-C $((TOS )) -c"
	[ $ovr == "diff" ]    && m="-C $((TOS2)) -c"

	$NSEXE ./cmsg_sender -6 -p $p $m $((TOS)) -s $TGT6 1234
	check_result $? 1 "TCLASS $prot $ovr - rejection"
    done
done

# IPV6_HOPLIMIT
LIM=4

for ovr in setsock cmsg both diff; do
    for p in u i r; do
	[ $p == "u" ] && prot=UDP
	[ $p == "i" ] && prot=ICMP
	[ $p == "r" ] && prot=RAW

	[ $ovr == "setsock" ] && m="-L"
	[ $ovr == "cmsg" ]    && m="-l"
	[ $ovr == "both" ]    && m="-L $LIM -l"
	[ $ovr == "diff" ]    && m="-L $((LIM + 1)) -l"

	$NSEXE nohup tcpdump --immediate-mode -p -ni dummy0 -w $TMPF -c 4 2> /dev/null &
	BG=$!
	sleep 0.05

	$NSEXE ./cmsg_sender -6 -p $p $m $LIM $TGT6 1234
	check_result $? 0 "HOPLIMIT $prot $ovr - pass"

	while [ -d /proc/$BG ]; do
	    $NSEXE ./cmsg_sender -6 -p u $TGT6 1234
	done

	tcpdump -r $TMPF -v 2>&1 | grep "hlim $LIM[^0-9]" >> /dev/null
	check_result $? 0 "HOPLIMIT $prot $ovr - packet data"
	rm $TMPF
    done
done

# IPV6 exthdr
for p in u i r; do
    # Very basic "does it crash" test
    for h in h d r; do
	$NSEXE ./cmsg_sender -p $p -6 -H $h $TGT6 1234
	check_result $? 0 "ExtHdr $prot $ovr - pass"
    done
done

# Summary
if [ $BAD -ne 0 ]; then
    echo "FAIL - $BAD/$TOTAL cases failed"
    exit 1
else
    echo "OK"
    exit 0
fi
