diff --git a/NEWS b/NEWS index 0bdb80ec25..9e5f4e5e27 100644 --- a/NEWS +++ b/NEWS @@ -327,6 +327,9 @@ CHANGES WITH 258 in spe: gained a knob PartialGenericSegmentationOffload= for controlling Partial GSO support. + * 'udevadm info/trigger/test/test-builtin' commands now also take device + IDs to specify devices. + * udevadm test gained a new "--verbose" switch for generating additional debug output for the test. diff --git a/man/udevadm.xml b/man/udevadm.xml index 5636d102b7..c9a30901ed 100644 --- a/man/udevadm.xml +++ b/man/udevadm.xml @@ -28,41 +28,57 @@ - udevadm info options devpath + udevadm info + options + devpath|syspath|id|unit - udevadm trigger options devpath + udevadm trigger + options + devpath|syspath|id|unit - udevadm settle options + udevadm settle + options - udevadm control option + udevadm control + options - udevadm monitor options + udevadm monitor + options - udevadm test options devpath + udevadm test + options + devpath|syspath|id|unit - udevadm test-builtin options command devpath + udevadm test-builtin + options + command + devpath|syspath|id|unit udevadm verify - options - file + options + files udevadm cat - options - file + options + files - udevadm wait options device|syspath + udevadm wait + options + devpath|syspath - udevadm lock options command + udevadm lock + options + command @@ -98,16 +114,18 @@ udevadm info - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> + <optional><replaceable>devpath</replaceable>|<replaceable>syspath</replaceable>|<replaceable>id</replaceable>|<replaceable>unit</replaceable>…</optional> Query the udev database for device information. Positional arguments should be used to specify one or more devices. Each one may be a device name (in which case it must start with /dev/), a sys path (in which case it must start - with /sys/), or a systemd device unit name (in which case it must end with - .device, see + with /sys/), a device ID (such as n1, c5:1, + or b259:1, see + sd_device_get_device_id3). + or a systemd device unit name (in which case it must end with .device, see systemd.device5). @@ -410,14 +428,14 @@ udevadm trigger - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> + <optional><replaceable>devpath</replaceable>|<replaceable>syspath</replaceable>|<replaceable>id</replaceable>|<replaceable>unit</replaceable>…</optional> Request device events from the kernel. Primarily used to replay events at system coldplug time. - Takes device specifications as positional arguments. See the description of info - above. + Takes device specifications as positional arguments. See the description of + udevadm info above. @@ -648,7 +666,7 @@ udevadm settle - <optional><replaceable>options</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> Watches the udev event queue, and exits if all current events are handled. @@ -681,7 +699,7 @@ - udevadm control <replaceable>option</replaceable> + udevadm control <replaceable>options</replaceable>… Modify the internal state of the running udev daemon. @@ -832,7 +850,7 @@ udevadm monitor - <optional><replaceable>options</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> Listens to the kernel uevents and events sent out by a udev rule @@ -885,8 +903,8 @@ udevadm test - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> + <replaceable>devpath</replaceable>|<replaceable>syspath</replaceable>|<replaceable>id</replaceable>|<replaceable>unit</replaceable> @@ -950,9 +968,9 @@ udevadm test-builtin - <optional><replaceable>options</replaceable></optional> + <optional><replaceable>options</replaceable>…</optional> <replaceable>command</replaceable> - <optional><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></optional> + <replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable> Run a built-in command COMMAND @@ -978,9 +996,8 @@ udevadm verify - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>file</replaceable></optional> - … + <optional><replaceable>options</replaceable>…</optional> + <optional><replaceable>files</replaceable>…</optional> Verify syntactic, semantic, and stylistic correctness of udev rules files. @@ -1051,9 +1068,8 @@ udevadm cat - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>file</replaceable></optional> - … + <optional><replaceable>options</replaceable>…</optional> + <optional><replaceable>file</replaceable>…</optional> Show udev rules files or udev.conf. @@ -1108,9 +1124,8 @@ udevadm wait - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>device|syspath</replaceable></optional> - … + <optional><replaceable>options</replaceable>…</optional> + <replaceable>devpath|syspath</replaceable>… Wait for devices or device symlinks being created and initialized by @@ -1170,9 +1185,8 @@ udevadm lock - <optional><replaceable>options</replaceable></optional> - <optional><replaceable>command</replaceable></optional> - … + <optional><replaceable>options</replaceable>…</optional> + <replaceable>command</replaceable>… udevadm lock takes an (advisory) exclusive lock on a block device (or all diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c index 45c39d4c73..e3bc4c4858 100644 --- a/src/udev/udevadm-info.c +++ b/src/udev/udevadm-info.c @@ -1276,7 +1276,7 @@ static int parse_argv(int argc, char *argv[]) { } int info_main(int argc, char *argv[], void *userdata) { - int r, ret; + int r; r = parse_argv(argc, argv); if (r <= 0) @@ -1298,19 +1298,18 @@ int info_main(int argc, char *argv[], void *userdata) { return print_tree(NULL); } - ret = 0; + int ret = 0; STRV_FOREACH(p, arg_devices) { _cleanup_(sd_device_unrefp) sd_device *device = NULL; - r = find_device(*p, NULL, &device); + r = find_device(*p, /* prefix = */ NULL, &device); if (r < 0) { if (r == -EINVAL) - log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys/ or a unit name: %m", *p); + log_error_errno(r, "Bad argument \"%s\", expected an absolute path in /dev/ or /sys/, device ID, or a unit name: %m", *p); else log_error_errno(r, "Unknown device \"%s\": %m", *p); - if (ret == 0) - ret = r; + RET_GATHER(ret, r); continue; } diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index 73c39f696c..7952d1dc14 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -75,6 +75,9 @@ int find_device(const char *id, const char *prefix, sd_device **ret) { assert(id); assert(ret); + if (sd_device_new_from_device_id(ret, id) >= 0) + return 0; + if (sd_device_new_from_path(ret, id) >= 0) return 0; diff --git a/test/units/TEST-17-UDEV.sanity-check.sh b/test/units/TEST-17-UDEV.sanity-check.sh index fa4533391a..7b95722f7a 100755 --- a/test/units/TEST-17-UDEV.sanity-check.sh +++ b/test/units/TEST-17-UDEV.sanity-check.sh @@ -82,6 +82,9 @@ udevadm control --revert udevadm info /dev/null udevadm info /sys/class/net/$netdev udevadm info "$(systemd-escape -p --suffix device /sys/devices/virtual/net/$netdev)" +[[ "$(udevadm info --json=short n1 | jq -r .DEVICE_ID)" == n1 ]] +udevadm info "$(udevadm info --json=short /dev/null | jq -r .DEVICE_ID)" +udevadm info "$(udevadm info --json=short /sys/class/net/$netdev | jq -r .DEVICE_ID)" udevadm info --property DEVNAME /sys/class/net/$netdev udevadm info --property DEVNAME --value /sys/class/net/$netdev udevadm info --property HELLO /sys/class/net/$netdev diff --git a/tools/command_ignorelist b/tools/command_ignorelist index 0159054b8d..4a48d4e614 100644 --- a/tools/command_ignorelist +++ b/tools/command_ignorelist @@ -494,44 +494,44 @@ udev.xml ./refsect1[title="Rules Files"]/refsect2[title="Keys"]/variablelist[4]/ udev.xml ./refsect1[title="Rules Files"]/refsect2[title="Keys"]/variablelist[4]/varlistentry[term="$$"] udevadm.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="-d"] udevadm.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="-V"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-q"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-p"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-n"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-r"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-x"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-P"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-d"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-e"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-c"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-v"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-n"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-t"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-c"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-s"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-S"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-A"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-p"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-g"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-y"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-b"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options\n "]/variablelist/varlistentry[term="-t"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options\n "]/variablelist/varlistentry[term="-E"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-e"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-l"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-s"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-S"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-R"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-p"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-m"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control option"]/variablelist/varlistentry[term="-t"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-k"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-u"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-p"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-s"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options\n "]/variablelist/varlistentry[term="-t"] -udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm test\n options\n devpath|file|unit\n "]/variablelist/varlistentry[term="-a"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-q"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-p"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-n"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-r"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-a"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-x"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-P"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-d"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-e"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm info\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-c"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-v"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-n"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-t"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-c"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-s"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-S"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-a"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-A"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-p"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-g"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-y"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm trigger\n options…\n devpath|syspath|id|unit…\n "]/variablelist/varlistentry[term="-b"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options…\n "]/variablelist/varlistentry[term="-t"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm settle\n options…\n "]/variablelist/varlistentry[term="-E"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-e"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-l"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-s"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-S"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-R"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-p"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-m"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm control options…"]/variablelist/varlistentry[term="-t"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-k"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-u"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-p"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-s"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm monitor\n options…\n "]/variablelist/varlistentry[term="-t"] +udevadm.xml ./refsect1[title="Options"]/refsect2[title="udevadm test\n options…\n devpath|syspath|id|unit\n "]/variablelist/varlistentry[term="-a"] vconsole.conf.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="KEYMAP="] vconsole.conf.xml ./refsect1[title="Options"]/variablelist/varlistentry[term="FONT="] file-hierarchy.xml ./refsect1[title="General Structure"]/variablelist/varlistentry[term="/"]