Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: net: add netdev-l2addr.sh for testing L2 address functionality

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.

Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Link: https://patch.msgid.link/20250710-netdevsim-perm_addr-v4-2-c9db2fecf3bf@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Toke Høiland-Jørgensen and committed by
Jakub Kicinski
963c94c9 54cb59cf

+83
+1
tools/testing/selftests/net/Makefile
··· 63 63 TEST_PROGS += rps_default_mask.sh 64 64 TEST_PROGS += big_tcp.sh 65 65 TEST_PROGS += netns-sysctl.sh 66 + TEST_PROGS += netdev-l2addr.sh 66 67 TEST_PROGS_EXTENDED := toeplitz_client.sh toeplitz.sh xfrm_policy_add_speed.sh 67 68 TEST_GEN_FILES = socket nettest 68 69 TEST_GEN_FILES += psock_fanout psock_tpacket msg_zerocopy reuseport_addr_any
+23
tools/testing/selftests/net/lib.sh
··· 240 240 echo nsim$id 241 241 } 242 242 243 + create_netdevsim_port() { 244 + local nsim_id="$1" 245 + local ns="$2" 246 + local port_id="$3" 247 + local perm_addr="$4" 248 + local orig_dev 249 + local new_dev 250 + local nsim_path 251 + 252 + nsim_path="/sys/bus/netdevsim/devices/netdevsim$nsim_id" 253 + 254 + echo "$port_id $perm_addr" | ip netns exec "$ns" tee "$nsim_path"/new_port > /dev/null || return 1 255 + 256 + orig_dev=$(ip netns exec "$ns" find "$nsim_path"/net/ -maxdepth 1 -name 'e*' | tail -n 1) 257 + orig_dev=$(basename "$orig_dev") 258 + new_dev="nsim${nsim_id}p$port_id" 259 + 260 + ip -netns "$ns" link set dev "$orig_dev" name "$new_dev" 261 + ip -netns "$ns" link set dev "$new_dev" up 262 + 263 + echo "$new_dev" 264 + } 265 + 243 266 # Remove netdevsim with given id. 244 267 cleanup_netdevsim() { 245 268 local id="$1"
+59
tools/testing/selftests/net/netdev-l2addr.sh
··· 1 + #!/bin/bash 2 + # SPDX-License-Identifier: GPL-2.0 3 + 4 + source lib.sh 5 + set -o pipefail 6 + 7 + NSIM_ADDR=2025 8 + TEST_ADDR="d0:be:d0:be:d0:00" 9 + 10 + RET_CODE=0 11 + 12 + cleanup() { 13 + cleanup_netdevsim "$NSIM_ADDR" 14 + cleanup_ns "$NS" 15 + } 16 + 17 + trap cleanup EXIT 18 + 19 + fail() { 20 + echo "ERROR: ${1:-unexpected return code} (ret: $_)" >&2 21 + RET_CODE=1 22 + } 23 + 24 + get_addr() 25 + { 26 + local type="$1" 27 + local dev="$2" 28 + local ns="$3" 29 + 30 + ip -j -n "$ns" link show dev "$dev" | jq -er ".[0].$type" 31 + } 32 + 33 + setup_ns NS 34 + 35 + nsim=$(create_netdevsim $NSIM_ADDR "$NS") 36 + 37 + get_addr address "$nsim" "$NS" >/dev/null || fail "Couldn't get ether addr" 38 + get_addr broadcast "$nsim" "$NS" >/dev/null || fail "Couldn't get brd addr" 39 + get_addr permaddr "$nsim" "$NS" >/dev/null && fail "Found perm_addr without setting it" 40 + 41 + ip -n "$NS" link set dev "$nsim" address "$TEST_ADDR" 42 + ip -n "$NS" link set dev "$nsim" brd "$TEST_ADDR" 43 + 44 + [[ "$(get_addr address "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set ether addr" 45 + [[ "$(get_addr broadcast "$nsim" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't set brd addr" 46 + 47 + if create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "FF:FF:FF:FF:FF:FF" 2>/dev/null; then 48 + fail "Created netdevsim with broadcast permaddr" 49 + fi 50 + 51 + nsim_port=$(create_netdevsim_port "$NSIM_ADDR" "$NS" 2 "$TEST_ADDR") 52 + 53 + get_addr address "$nsim_port" "$NS" >/dev/null || fail "Couldn't get ether addr" 54 + get_addr broadcast "$nsim_port" "$NS" >/dev/null || fail "Couldn't get brd addr" 55 + [[ "$(get_addr permaddr "$nsim_port" "$NS")" == "$TEST_ADDR" ]] || fail "Couldn't get permaddr" 56 + 57 + cleanup_netdevsim "$NSIM_ADDR" "$NS" 58 + 59 + exit $RET_CODE