#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later # disable shellcheck warning about '"aaa"' type quotation # shellcheck disable=SC2016 set -eux set -o pipefail # shellcheck source=test/units/util.sh . "$(dirname "$0")"/util.sh mkdir -p /run/udev/rules.d/ # test for ID_RENAMING= udev property and device unit state cat >/run/udev/rules.d/50-testsuite.rules </run/udev/rules.d/50-testsuite.rules </run/udev/rules.d/50-testsuite.rules <"$TMPDIR"/monitor.txt & KILL_PID="$!" # make sure that 'udevadm monitor' actually monitor uevents sleep 1 since="$(date '+%H:%M:%S')" # add another interface which will conflict with an existing interface ip link add foobar type dummy for _ in {1..40}; do if ( grep -q 'ACTION=add' "$TMPDIR"/monitor.txt grep -q 'DEVPATH=/devices/virtual/net/foobar' "$TMPDIR"/monitor.txt grep -q 'SUBSYSTEM=net' "$TMPDIR"/monitor.txt grep -q 'INTERFACE=foobar' "$TMPDIR"/monitor.txt grep -q 'ID_NET_DRIVER=dummy' "$TMPDIR"/monitor.txt grep -q 'ID_NET_NAME=foobar' "$TMPDIR"/monitor.txt # Even when network interface renaming is failed, SYSTEMD_ALIAS with the conflicting name will be broadcast. grep -q 'SYSTEMD_ALIAS=/sys/subsystem/net/devices/hoge' "$TMPDIR"/monitor.txt grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt grep -q 'UDEV_WORKER_ERRNO=17' "$TMPDIR"/monitor.txt grep -q 'UDEV_WORKER_ERRNO_NAME=EEXIST' "$TMPDIR"/monitor.txt ); then cat "$TMPDIR"/monitor.txt found=1 break fi sleep .5 done test -n "$found" timeout 30 bash -c "until journalctl _PID=1 _COMM=systemd --since $since | grep -q 'foobar: systemd-udevd failed to process the device, ignoring: File exists'; do sleep 1; done" # check if the invalid SYSTEMD_ALIAS property for the interface foobar is ignored by PID1 assert_eq "$(systemctl show --property=SysFSPath --value /sys/subsystem/net/devices/hoge)" "/sys/devices/virtual/net/hoge" } test_netif_renaming_conflict exit 0