brintos

brintos / linux-shallow public Read only

0
0
Text · 3.3 KiB · 8bc23fb Raw
155 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4source lib.sh5 6IP6=2001:db8:1::1/647TGT6=2001:db8:1::28TMPF=$(mktemp --suffix ".pcap")9 10cleanup()11{12    rm -f $TMPF13    cleanup_ns $NS14}15 16trap cleanup EXIT17 18tcpdump -h | grep immediate-mode >> /dev/null19if [ $? -ne 0 ]; then20    echo "SKIP - tcpdump with --immediate-mode option required"21    exit $ksft_skip22fi23 24# Namespaces25setup_ns NS26NSEXE="ip netns exec $NS"27 28$NSEXE sysctl -w net.ipv4.ping_group_range='0 2147483647' > /dev/null29 30# Connectivity31ip -netns $NS link add type dummy32ip -netns $NS link set dev dummy0 up33ip -netns $NS addr add $IP6 dev dummy034 35# Test36BAD=037TOTAL=038 39check_result() {40    ((TOTAL++))41    if [ $1 -ne $2 ]; then42	echo "  Case $3 returned $1, expected $2"43	((BAD++))44    fi45}46 47# IPV6_DONTFRAG48for ovr in setsock cmsg both diff; do49    for df in 0 1; do50	for p in u i r; do51	    [ $p == "u" ] && prot=UDP52	    [ $p == "i" ] && prot=ICMP53	    [ $p == "r" ] && prot=RAW54 55	    [ $ovr == "setsock" ] && m="-F $df"56	    [ $ovr == "cmsg" ]    && m="-f $df"57	    [ $ovr == "both" ]    && m="-F $df -f $df"58	    [ $ovr == "diff" ]    && m="-F $((1 - df)) -f $df"59 60	    $NSEXE ./cmsg_sender -s -S 2000 -6 -p $p $m $TGT6 123461	    check_result $? $df "DONTFRAG $prot $ovr"62	done63    done64done65 66# IPV6_TCLASS67TOS=0x1068TOS2=0x2069 70ip -6 -netns $NS rule add tos $TOS lookup 30071ip -6 -netns $NS route add table 300 prohibit any72 73for ovr in setsock cmsg both diff; do74    for p in u i r; do75	[ $p == "u" ] && prot=UDP76	[ $p == "i" ] && prot=ICMP77	[ $p == "r" ] && prot=RAW78 79	[ $ovr == "setsock" ] && m="-C"80	[ $ovr == "cmsg" ]    && m="-c"81	[ $ovr == "both" ]    && m="-C $((TOS2)) -c"82	[ $ovr == "diff" ]    && m="-C $((TOS )) -c"83 84	$NSEXE nohup tcpdump --immediate-mode -p -ni dummy0 -w $TMPF -c 4 2> /dev/null &85	BG=$!86	sleep 0.0587 88	$NSEXE ./cmsg_sender -6 -p $p $m $((TOS2)) $TGT6 123489	check_result $? 0 "TCLASS $prot $ovr - pass"90 91	while [ -d /proc/$BG ]; do92	    $NSEXE ./cmsg_sender -6 -p $p $m $((TOS2)) $TGT6 123493	done94 95	tcpdump -r $TMPF -v 2>&1 | grep "class $TOS2" >> /dev/null96	check_result $? 0 "TCLASS $prot $ovr - packet data"97	rm $TMPF98 99	[ $ovr == "both" ]    && m="-C $((TOS )) -c"100	[ $ovr == "diff" ]    && m="-C $((TOS2)) -c"101 102	$NSEXE ./cmsg_sender -6 -p $p $m $((TOS)) -s $TGT6 1234103	check_result $? 1 "TCLASS $prot $ovr - rejection"104    done105done106 107# IPV6_HOPLIMIT108LIM=4109 110for ovr in setsock cmsg both diff; do111    for p in u i r; do112	[ $p == "u" ] && prot=UDP113	[ $p == "i" ] && prot=ICMP114	[ $p == "r" ] && prot=RAW115 116	[ $ovr == "setsock" ] && m="-L"117	[ $ovr == "cmsg" ]    && m="-l"118	[ $ovr == "both" ]    && m="-L $LIM -l"119	[ $ovr == "diff" ]    && m="-L $((LIM + 1)) -l"120 121	$NSEXE nohup tcpdump --immediate-mode -p -ni dummy0 -w $TMPF -c 4 2> /dev/null &122	BG=$!123	sleep 0.05124 125	$NSEXE ./cmsg_sender -6 -p $p $m $LIM $TGT6 1234126	check_result $? 0 "HOPLIMIT $prot $ovr - pass"127 128	while [ -d /proc/$BG ]; do129	    $NSEXE ./cmsg_sender -6 -p $p $m $LIM $TGT6 1234130	done131 132	tcpdump -r $TMPF -v 2>&1 | grep "hlim $LIM[^0-9]" >> /dev/null133	check_result $? 0 "HOPLIMIT $prot $ovr - packet data"134	rm $TMPF135    done136done137 138# IPV6 exthdr139for p in u i r; do140    # Very basic "does it crash" test141    for h in h d r; do142	$NSEXE ./cmsg_sender -p $p -6 -H $h $TGT6 1234143	check_result $? 0 "ExtHdr $prot $ovr - pass"144    done145done146 147# Summary148if [ $BAD -ne 0 ]; then149    echo "FAIL - $BAD/$TOTAL cases failed"150    exit 1151else152    echo "OK"153    exit 0154fi155