summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/net/cmsg_ipv6.sh
diff options
context:
space:
mode:
authorJakub Kicinski <kuba@kernel.org>2022-02-17 04:21:18 +0300
committerDavid S. Miller <davem@davemloft.net>2022-02-17 17:22:09 +0300
commit9657ad09e1fa04911034d8aac28d4377dc991eb5 (patch)
tree34a742062bcc890c579851745fb7af3ba40f5d79 /tools/testing/selftests/net/cmsg_ipv6.sh
parent6f97c7c605d63d8f83f102a768ddfd0ad553fa3f (diff)
downloadlinux-9657ad09e1fa04911034d8aac28d4377dc991eb5.tar.xz
selftests: net: test IPV6_TCLASS
Test setting IPV6_TCLASS via setsockopt and cmsg across socket types. Output without the kernel support (this series): Case TCLASS ICMP cmsg - packet data returned 1, expected 0 Case TCLASS ICMP cmsg - rejection returned 0, expected 1 Case TCLASS ICMP diff - pass returned 1, expected 0 Case TCLASS ICMP diff - packet data returned 1, expected 0 Case TCLASS ICMP diff - rejection returned 0, expected 1 Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'tools/testing/selftests/net/cmsg_ipv6.sh')
-rwxr-xr-xtools/testing/selftests/net/cmsg_ipv6.sh51
1 files changed, 51 insertions, 0 deletions
diff --git a/tools/testing/selftests/net/cmsg_ipv6.sh b/tools/testing/selftests/net/cmsg_ipv6.sh
index fb5a8ab7c909..f7bb6ce68c88 100755
--- a/tools/testing/selftests/net/cmsg_ipv6.sh
+++ b/tools/testing/selftests/net/cmsg_ipv6.sh
@@ -1,12 +1,16 @@
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
+ksft_skip=4
+
NS=ns
IP6=2001:db8:1::1/64
TGT6=2001:db8:1::2
+TMPF=`mktemp`
cleanup()
{
+ rm -f $TMPF
ip netns del $NS
}
@@ -14,6 +18,12 @@ trap cleanup EXIT
NSEXE="ip netns exec $NS"
+tcpdump -h | grep immediate-mode >> /dev/null
+if [ $? -ne 0 ]; then
+ echo "SKIP - tcpdump with --immediate-mode option required"
+ exit $ksft_skip
+fi
+
# Namespaces
ip netns add $NS
@@ -55,6 +65,47 @@ for ovr in setsock cmsg both diff; do
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
+
# Summary
if [ $BAD -ne 0 ]; then
echo "FAIL - $BAD/$TOTAL cases failed"