1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4NS=ns
5IP6=2001:db8:1::1/64
6TGT6=2001:db8:1::2
7
8cleanup()
9{
10    ip netns del $NS
11}
12
13trap cleanup EXIT
14
15NSEXE="ip netns exec $NS"
16
17# Namespaces
18ip netns add $NS
19
20$NSEXE sysctl -w net.ipv4.ping_group_range='0 2147483647' > /dev/null
21
22# Connectivity
23ip -netns $NS link add type dummy
24ip -netns $NS link set dev dummy0 up
25ip -netns $NS addr add $IP6 dev dummy0
26
27# Test
28BAD=0
29TOTAL=0
30
31check_result() {
32    ((TOTAL++))
33    if [ $1 -ne $2 ]; then
34	echo "  Case $3 returned $1, expected $2"
35	((BAD++))
36    fi
37}
38
39# IPV6_DONTFRAG
40for ovr in setsock cmsg both diff; do
41    for df in 0 1; do
42	for p in u i r; do
43	    [ $p == "u" ] && prot=UDP
44	    [ $p == "i" ] && prot=ICMP
45	    [ $p == "r" ] && prot=RAW
46
47	    [ $ovr == "setsock" ] && m="-F $df"
48	    [ $ovr == "cmsg" ]    && m="-f $df"
49	    [ $ovr == "both" ]    && m="-F $df -f $df"
50	    [ $ovr == "diff" ]    && m="-F $((1 - df)) -f $df"
51
52	    $NSEXE ./cmsg_sender -s -S 2000 -6 -p $p $m $TGT6 1234
53	    check_result $? $df "DONTFRAG $prot $ovr"
54	done
55    done
56done
57
58# Summary
59if [ $BAD -ne 0 ]; then
60    echo "FAIL - $BAD/$TOTAL cases failed"
61    exit 1
62else
63    echo "OK"
64    exit 0
65fi
66