80 lines · bash
1#!/bin/bash2# SPDX-License-Identifier: GPL-2.03 4readonly ksft_skip=45readonly cpus=$(nproc)6ret=07 8[ $cpus -gt 2 ] || exit $ksft_skip9 10readonly INITIAL_RPS_DEFAULT_MASK=$(cat /proc/sys/net/core/rps_default_mask)11readonly TAG="$(mktemp -u XXXXXX)"12readonly VETH="veth${TAG}"13readonly NETNS="ns-${TAG}"14 15setup() {16 ip netns add "${NETNS}"17 ip -netns "${NETNS}" link set lo up18}19 20cleanup() {21 echo $INITIAL_RPS_DEFAULT_MASK > /proc/sys/net/core/rps_default_mask22 ip netns del $NETNS23}24 25chk_rps() {26 local rps_mask expected_rps_mask=$427 local dev_name=$328 local netns=$229 local cmd="cat"30 local msg=$131 32 [ -n "$netns" ] && cmd="ip netns exec $netns $cmd"33 34 rps_mask=$($cmd /sys/class/net/$dev_name/queues/rx-0/rps_cpus)35 printf "%-60s" "$msg"36 37 # In case there is more than 32 CPUs we need to remove commas from masks38 rps_mask=${rps_mask//,}39 expected_rps_mask=${expected_rps_mask//,}40 if [ $rps_mask -eq $expected_rps_mask ]; then41 echo "[ ok ]"42 else43 echo "[fail] expected $expected_rps_mask found $rps_mask"44 ret=145 fi46}47 48trap cleanup EXIT49 50echo 0 > /proc/sys/net/core/rps_default_mask51setup52chk_rps "empty rps_default_mask" $NETNS lo 053cleanup54 55echo 1 > /proc/sys/net/core/rps_default_mask56setup57chk_rps "changing rps_default_mask dont affect existing devices" "" lo $INITIAL_RPS_DEFAULT_MASK58 59echo 3 > /proc/sys/net/core/rps_default_mask60chk_rps "changing rps_default_mask dont affect existing netns" $NETNS lo 061 62ip link add name $VETH type veth peer netns $NETNS name $VETH63ip link set dev $VETH up64ip -n $NETNS link set dev $VETH up65chk_rps "changing rps_default_mask affect newly created devices" "" $VETH 366chk_rps "changing rps_default_mask don't affect newly child netns[II]" $NETNS $VETH 067ip link del dev $VETH68ip netns del $NETNS69 70setup71chk_rps "rps_default_mask is 0 by default in child netns" "$NETNS" lo 072 73ip netns exec $NETNS sysctl -qw net.core.rps_default_mask=174ip link add name $VETH type veth peer netns $NETNS name $VETH75chk_rps "changing rps_default_mask in child ns don't affect the main one" "" lo $INITIAL_RPS_DEFAULT_MASK76chk_rps "changing rps_default_mask in child ns affects new childns devices" $NETNS $VETH 177chk_rps "changing rps_default_mask in child ns don't affect existing devices" $NETNS lo 078 79exit $ret80