Add a new test script to the network selftests which tests getting and setting of layer 2 addresses through netlink, including the newly added support for setting a permaddr on netdevsim devices. Signed-off-by: Toke Høiland-Jørgensen --- tools/testing/selftests/net/Makefile | 1 + tools/testing/selftests/net/lib.sh | 17 +++++++ tools/testing/selftests/net/netdev-l2addr.sh | 68 ++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index 54377659652907af7232907e570eea2a9c5ba3dc..66a3ef221ad758d7844034c66a1dff4497b1ab54 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile @@ -63,6 +63,7 @@ TEST_PROGS += ip_local_port_range.sh TEST_PROGS += rps_default_mask.sh TEST_PROGS += big_tcp.sh TEST_PROGS += netns-sysctl.sh +TEST_PROGS += netdev-l2addr.sh TEST_PROGS_EXTENDED := toeplitz_client.sh toeplitz.sh xfrm_policy_add_speed.sh TEST_GEN_FILES = socket nettest TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any diff --git a/tools/testing/selftests/net/lib.sh b/tools/testing/selftests/net/lib.sh index ff0dbe23e8e0c8d3a66159d9b82fdc1fc5d4804d..b34df25a8f3a8ddb2c3ea5f1c03029cc3f0d7fae 100644 --- a/tools/testing/selftests/net/lib.sh +++ b/tools/testing/selftests/net/lib.sh @@ -240,6 +240,23 @@ create_netdevsim() { echo nsim$id } +create_netdevsim_port() { + local nsim_id="$1" + local ns="$2" + local port_id="$3" + local perm_addr="$4" + + echo "$port_id $perm_addr" | ip netns exec $ns tee /sys/bus/netdevsim/devices/netdevsim$nsim_id/new_port > /dev/null + + local orig_dev=$(basename $(ip netns exec $ns find /sys/bus/netdevsim/devices/netdevsim$nsim_id/net/ -maxdepth 1 -name 'e*' | tail -n 1)) + local new_dev=nsim${id}p$port_id + + ip -netns $ns link set dev $orig_dev name $new_dev + ip -netns $ns link set dev $new_dev up + + echo $new_dev +} + # Remove netdevsim with given id. cleanup_netdevsim() { local id="$1" diff --git a/tools/testing/selftests/net/netdev-l2addr.sh b/tools/testing/selftests/net/netdev-l2addr.sh new file mode 100755 index 0000000000000000000000000000000000000000..aa2a8bfc281f5afd87a1d93cde8e73b425c1b799 --- /dev/null +++ b/tools/testing/selftests/net/netdev-l2addr.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 + +source lib.sh +set -o pipefail + +NSIM_ADDR=2025 +TEST_ADDR="d0:be:d0:be:d0:00" + +RET_CODE=0 + +cleanup() { + cleanup_netdevsim $NSIM_ADDR + cleanup_ns $NS +} + +trap cleanup EXIT + +fail() { + echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2 + RET_CODE=1 +} + +get_addr() +{ + local found=0 + local type=$1 + local dev=$2 + local ns=$3 + + local output=$(ip -n $ns link show dev $dev | grep "link/") + + for k in $output; do + if [ "$found" -eq "1" ]; then + echo $k + return 0 + fi + if [[ "$k" == "$type" ]]; then + found=1 + fi + done + + return 1 +} + +setup_ns NS + +nsim=$(create_netdevsim $NSIM_ADDR $NS) + +get_addr link/ether $nsim $NS >/dev/null || fail "Couldn't get ether addr" +get_addr brd $nsim $NS >/dev/null || fail "Couldn't get brd addr" +get_addr perm $nsim $NS && fail "Found perm_addr without setting it" + +ip -n $NS link set dev $nsim address $TEST_ADDR +ip -n $NS link set dev $nsim brd $TEST_ADDR + +[[ "$(get_addr link/ether $nsim $NS)" == "$TEST_ADDR" ]] || fail "Couldn't set ether addr" +[[ "$(get_addr brd $nsim $NS)" == "$TEST_ADDR" ]] || fail "Couldn't set brd addr" + +nsim_port=$(create_netdevsim_port $NSIM_ADDR $NS 2 $TEST_ADDR) + +get_addr link/ether $nsim_port $NS >/dev/null || fail "Couldn't get ether addr" +get_addr brd $nsim_port $NS >/dev/null || fail "Couldn't get brd addr" +[[ "$(get_addr permaddr $nsim_port $NS)" == "$TEST_ADDR" ]] || fail "Couldn't get permaddr" + +cleanup_netdevsim $NSIM_ADDR $NS + +exit $RET_CODE -- 2.50.0