2 # SPDX-License-Identifier: GPL-2.0
8 TMPF
=$
(mktemp
--suffix ".pcap")
18 tcpdump
-h |
grep immediate-mode
>> /dev
/null
20 echo "SKIP - tcpdump with --immediate-mode option required"
26 NSEXE
="ip netns exec $NS"
28 $NSEXE sysctl
-w net.ipv4.ping_group_range
='0 2147483647' > /dev
/null
31 ip
-netns $NS link add
type dummy
32 ip
-netns $NS link
set dev dummy0 up
33 ip
-netns $NS addr add
$IP6 dev dummy0
41 if [ $1 -ne $2 ]; then
42 echo " Case $3 returned $1, expected $2"
48 for ovr
in setsock cmsg both
diff; do
51 [ $p == "u" ] && prot
=UDP
52 [ $p == "i" ] && prot
=ICMP
53 [ $p == "r" ] && prot
=RAW
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"
60 $NSEXE .
/cmsg_sender
-s -S 2000 -6 -p $p $m $TGT6 1234
61 check_result $?
$df "DONTFRAG $prot $ovr"
70 ip
-6 -netns $NS rule add tos
$TOS lookup
300
71 ip
-6 -netns $NS route add table
300 prohibit any
73 for ovr
in setsock cmsg both
diff; do
75 [ $p == "u" ] && prot
=UDP
76 [ $p == "i" ] && prot
=ICMP
77 [ $p == "r" ] && prot
=RAW
79 [ $ovr == "setsock" ] && m
="-C"
80 [ $ovr == "cmsg" ] && m
="-c"
81 [ $ovr == "both" ] && m
="-C $((TOS2)) -c"
82 [ $ovr == "diff" ] && m
="-C $((TOS )) -c"
84 $NSEXE nohup tcpdump
--immediate-mode -p -ni dummy0
-w $TMPF -c 4 2> /dev
/null
&
88 $NSEXE .
/cmsg_sender
-6 -p $p $m $
((TOS2
)) $TGT6 1234
89 check_result $?
0 "TCLASS $prot $ovr - pass"
91 while [ -d /proc
/$BG ]; do
92 $NSEXE .
/cmsg_sender
-6 -p $p $m $
((TOS2
)) $TGT6 1234
95 tcpdump
-r $TMPF -v 2>&1 |
grep "class $TOS2" >> /dev
/null
96 check_result $?
0 "TCLASS $prot $ovr - packet data"
99 [ $ovr == "both" ] && m
="-C $((TOS )) -c"
100 [ $ovr == "diff" ] && m
="-C $((TOS2)) -c"
102 $NSEXE .
/cmsg_sender
-6 -p $p $m $
((TOS
)) -s $TGT6 1234
103 check_result $?
1 "TCLASS $prot $ovr - rejection"
110 for ovr
in setsock cmsg both
diff; do
112 [ $p == "u" ] && prot
=UDP
113 [ $p == "i" ] && prot
=ICMP
114 [ $p == "r" ] && prot
=RAW
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"
121 $NSEXE nohup tcpdump
--immediate-mode -p -ni dummy0
-w $TMPF -c 4 2> /dev
/null
&
125 $NSEXE .
/cmsg_sender
-6 -p $p $m $LIM $TGT6 1234
126 check_result $?
0 "HOPLIMIT $prot $ovr - pass"
128 while [ -d /proc
/$BG ]; do
129 $NSEXE .
/cmsg_sender
-6 -p $p $m $LIM $TGT6 1234
132 tcpdump
-r $TMPF -v 2>&1 |
grep "hlim $LIM[^0-9]" >> /dev
/null
133 check_result $?
0 "HOPLIMIT $prot $ovr - packet data"
140 # Very basic "does it crash" test
142 $NSEXE .
/cmsg_sender
-p $p -6 -H $h $TGT6 1234
143 check_result $?
0 "ExtHdr $prot $ovr - pass"
148 if [ $BAD -ne 0 ]; then
149 echo "FAIL - $BAD/$TOTAL cases failed"