xref: /linux/tools/testing/selftests/net/rps_default_mask.sh (revision 436396f26d502ada54281958db0a9f6fc12ff256)
1#!/bin/sh
2# SPDX-License-Identifier: GPL-2.0
3
4readonly ksft_skip=4
5readonly cpus=$(nproc)
6ret=0
7
8[ $cpus -gt 2 ] || exit $ksft_skip
9
10readonly INITIAL_RPS_DEFAULT_MASK=$(cat /proc/sys/net/core/rps_default_mask)
11readonly NETNS="ns-$(mktemp -u XXXXXX)"
12
13setup() {
14	ip netns add "${NETNS}"
15	ip -netns "${NETNS}" link set lo up
16}
17
18cleanup() {
19	echo $INITIAL_RPS_DEFAULT_MASK > /proc/sys/net/core/rps_default_mask
20	ip netns del $NETNS
21}
22
23chk_rps() {
24	local rps_mask expected_rps_mask=$3
25	local dev_name=$2
26	local msg=$1
27
28	rps_mask=$(ip netns exec $NETNS cat /sys/class/net/$dev_name/queues/rx-0/rps_cpus)
29	printf "%-60s" "$msg"
30	if [ $rps_mask -eq $expected_rps_mask ]; then
31		echo "[ ok ]"
32	else
33		echo "[fail] expected $expected_rps_mask found $rps_mask"
34		ret=1
35	fi
36}
37
38trap cleanup EXIT
39
40echo 0 > /proc/sys/net/core/rps_default_mask
41setup
42chk_rps "empty rps_default_mask" lo 0
43cleanup
44
45echo 1 > /proc/sys/net/core/rps_default_mask
46setup
47chk_rps "non zero rps_default_mask" lo 1
48
49echo 3 > /proc/sys/net/core/rps_default_mask
50chk_rps "changing rps_default_mask dont affect existing netns" lo 1
51
52ip -n $NETNS link add type veth
53ip -n $NETNS link set dev veth0 up
54ip -n $NETNS link set dev veth1 up
55chk_rps "changing rps_default_mask affect newly created devices" veth0 3
56chk_rps "changing rps_default_mask affect newly created devices[II]" veth1 3
57exit $ret
58