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