lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250702-netdevsim-perm_addr-v2-2-66359a6288f0@redhat.com>
Date: Wed, 02 Jul 2025 10:55:57 +0200
From: Toke Høiland-Jørgensen <toke@...hat.com>
To: Jakub Kicinski <kuba@...nel.org>, Andrew Lunn <andrew+netdev@...n.ch>, 
 "David S. Miller" <davem@...emloft.net>, Eric Dumazet <edumazet@...gle.com>, 
 Paolo Abeni <pabeni@...hat.com>
Cc: netdev@...r.kernel.org, 
 Toke Høiland-Jørgensen <toke@...hat.com>
Subject: [PATCH net-next v2 2/2] 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.

Signed-off-by: Toke Høiland-Jørgensen <toke@...hat.com>
---
 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


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ