| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- readonly ksft_skip=4
- readonly cpus=$(nproc)
- ret=0
- [ $cpus -gt 2 ] || exit $ksft_skip
- readonly INITIAL_RPS_DEFAULT_MASK=$(cat /proc/sys/net/core/rps_default_mask)
- readonly TAG="$(mktemp -u XXXXXX)"
- readonly VETH="veth${TAG}"
- readonly NETNS="ns-${TAG}"
- setup() {
- ip netns add "${NETNS}"
- ip -netns "${NETNS}" link set lo up
- }
- cleanup() {
- echo $INITIAL_RPS_DEFAULT_MASK > /proc/sys/net/core/rps_default_mask
- ip netns del $NETNS
- }
- chk_rps() {
- local rps_mask expected_rps_mask=$4
- local dev_name=$3
- local netns=$2
- local cmd="cat"
- local msg=$1
- [ -n "$netns" ] && cmd="ip netns exec $netns $cmd"
- rps_mask=$($cmd /sys/class/net/$dev_name/queues/rx-0/rps_cpus)
- printf "%-60s" "$msg"
- # In case there is more than 32 CPUs we need to remove commas from masks
- rps_mask=${rps_mask//,}
- expected_rps_mask=${expected_rps_mask//,}
- if [ $rps_mask -eq $expected_rps_mask ]; then
- echo "[ ok ]"
- else
- echo "[fail] expected $expected_rps_mask found $rps_mask"
- ret=1
- fi
- }
- trap cleanup EXIT
- echo 0 > /proc/sys/net/core/rps_default_mask
- setup
- chk_rps "empty rps_default_mask" $NETNS lo 0
- cleanup
- echo 1 > /proc/sys/net/core/rps_default_mask
- setup
- chk_rps "changing rps_default_mask dont affect existing devices" "" lo $INITIAL_RPS_DEFAULT_MASK
- echo 3 > /proc/sys/net/core/rps_default_mask
- chk_rps "changing rps_default_mask dont affect existing netns" $NETNS lo 0
- ip link add name $VETH type veth peer netns $NETNS name $VETH
- ip link set dev $VETH up
- ip -n $NETNS link set dev $VETH up
- chk_rps "changing rps_default_mask affect newly created devices" "" $VETH 3
- chk_rps "changing rps_default_mask don't affect newly child netns[II]" $NETNS $VETH 0
- ip link del dev $VETH
- ip netns del $NETNS
- setup
- chk_rps "rps_default_mask is 0 by default in child netns" "$NETNS" lo 0
- ip netns exec $NETNS sysctl -qw net.core.rps_default_mask=1
- ip link add name $VETH type veth peer netns $NETNS name $VETH
- chk_rps "changing rps_default_mask in child ns don't affect the main one" "" lo $INITIAL_RPS_DEFAULT_MASK
- chk_rps "changing rps_default_mask in child ns affects new childns devices" $NETNS $VETH 1
- chk_rps "changing rps_default_mask in child ns don't affect existing devices" $NETNS lo 0
- exit $ret
|