aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/kobject/kobject_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/kobject/kobject_test.go')
-rw-r--r--internal/kobject/kobject_test.go1806
1 files changed, 1806 insertions, 0 deletions
diff --git a/internal/kobject/kobject_test.go b/internal/kobject/kobject_test.go
new file mode 100644
index 00000000..892ff241
--- /dev/null
+++ b/internal/kobject/kobject_test.go
@@ -0,0 +1,1806 @@
+package kobject_test
+
+import (
+ "bytes"
+ _ "embed"
+ "encoding/json"
+ "fmt"
+ "io"
+ "maps"
+ "reflect"
+ "slices"
+ "strings"
+ "testing"
+ "unsafe"
+
+ . "hakurei.app/internal/kobject"
+ "hakurei.app/internal/uevent"
+)
+
+func TestConsume(t *testing.T) {
+ t.Parallel()
+
+ coldboot := uevent.UUID(bytes.Repeat([]byte{0xfd}, len(uevent.UUID{})))
+ testCases := []struct {
+ name string
+ messages []*uevent.Message
+ want map[string]*Object
+ c []map[string]string
+ errs []error
+ }{
+ {"drop external synth", []*uevent.Message{
+ {DevPath: "\x00", Env: []string{
+ "SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed",
+ }},
+ }, map[string]*Object{}, nil, nil},
+
+ {"unexpected coldboot", []*uevent.Message{
+ {Action: uevent.KOBJ_BIND, DevPath: "\x00", Env: []string{
+ "SYNTH_UUID=fdfdfdfd-fdfd-fdfd-fdfd-fdfdfdfdfdfd",
+ }},
+ }, map[string]*Object{}, nil, []error{
+ UnexpectedColdbootError{
+ Action: uevent.KOBJ_BIND,
+ DevPath: "\x00",
+ Env: map[string]string{},
+ Synth: &coldboot,
+ },
+ }},
+
+ {"sequence", []*uevent.Message{
+ {Action: uevent.KOBJ_ADD, DevPath: "\x00"},
+ {Action: uevent.KOBJ_OFFLINE, DevPath: "\x00"},
+ }, map[string]*Object{
+ "\x00": {
+ State: StateNew,
+ Offline: true,
+ DevPath: "\x00",
+ },
+ }, nil, []error{
+ BadSequenceError{Got: 0, Want: 1},
+ }},
+
+ {"action", []*uevent.Message{
+ {Action: 0xbeef, DevPath: "\x00"},
+ }, map[string]*Object{}, nil, []error{
+ fmt.Errorf("invalid action %d", 0xbeef),
+ }},
+
+ {"add", []*uevent.Message{
+ {Action: uevent.KOBJ_ADD, DevPath: "\x00", Env: []string{
+ "V=\xff",
+ "SEQNUM=1",
+ }},
+ {Action: uevent.KOBJ_ADD, DevPath: "\x00", Env: []string{
+ "V=\xfd",
+ "SEQNUM=2",
+ }},
+ }, map[string]*Object{
+ "\x00": {
+ State: StateNew,
+ DevPath: "\x00",
+ Env: map[string]string{"V": "\xfd"},
+ },
+ }, nil, []error{
+ DuplicateAddError{
+ Action: uevent.KOBJ_ADD,
+ DevPath: "\x00",
+ Env: map[string]string{"V": "\xfd"},
+ Sequence: 2,
+ },
+ }},
+
+ {"remove", []*uevent.Message{
+ {Action: uevent.KOBJ_REMOVE, DevPath: "\x00", Env: []string{
+ "SEQNUM=0",
+ }},
+ {Action: uevent.KOBJ_ADD, DevPath: "\x00", Env: []string{
+ "SYNTH_UUID=" + coldboot.String(),
+ "SEQNUM=1",
+ }},
+ {Action: uevent.KOBJ_BIND, DevPath: "\x00", Env: []string{
+ "DRIVER=\xfd",
+ "SEQNUM=2",
+ }},
+ {Action: uevent.KOBJ_REMOVE, DevPath: "\x00", Env: []string{
+ "SEQNUM=3",
+ }},
+ }, map[string]*Object{}, nil, []error{
+ TargetError{
+ Action: uevent.KOBJ_REMOVE,
+ DevPath: "\x00",
+ Env: map[string]string{},
+ },
+ RemoveStateError{
+ State: StateBound,
+ DevPath: "\x00",
+ Driver: "\xfd",
+ },
+ }},
+
+ {"change", []*uevent.Message{
+ {Action: uevent.KOBJ_CHANGE, DevPath: "\x00", Env: []string{
+ "V=\xff",
+ "SEQNUM=9",
+ }},
+ }, map[string]*Object{
+ "\x00": {
+ State: StateColdboot,
+ DevPath: "\x00",
+ Env: map[string]string{"V": "\xff"},
+ },
+ }, nil, []error{
+ TargetError{
+ Action: uevent.KOBJ_CHANGE,
+ DevPath: "\x00",
+ Sequence: 9,
+ Env: map[string]string{
+ "V": "\xff",
+ },
+ },
+ }},
+
+ {"move", []*uevent.Message{
+ {Action: uevent.KOBJ_MOVE, DevPath: "\x0f", Env: []string{
+ "V=\xfc",
+ "SEQNUM=0",
+ }},
+ {Action: uevent.KOBJ_MOVE, DevPath: "\x0e", Env: []string{
+ "V=\xfd",
+ "DEVPATH_OLD=\xff",
+ "SEQNUM=1",
+ }},
+ }, map[string]*Object{
+ "\x0f": {DevPath: "\x0f", Env: map[string]string{"V": "\xfc"}},
+ "\x0e": {DevPath: "\x0e", Env: map[string]string{"V": "\xfd"}},
+ }, nil, []error{
+ MalformedMoveError{
+ Action: uevent.KOBJ_MOVE,
+ DevPath: "\x0f",
+ Env: map[string]string{
+ "V": "\xfc",
+ },
+ },
+ TargetError{
+ Action: uevent.KOBJ_MOVE,
+ DevPath: "\x0e",
+ Env: map[string]string{
+ "V": "\xfd",
+ "DEVPATH_OLD": "\xff",
+ },
+ Sequence: 1,
+ },
+ }},
+
+ {"offline", []*uevent.Message{
+ {Action: uevent.KOBJ_ONLINE, DevPath: "\xfd", Env: []string{
+ "V=\xff",
+ "SEQNUM=9",
+ }},
+ {Action: uevent.KOBJ_OFFLINE, DevPath: "\xfd", Env: []string{
+ "_V=\xfc",
+ "SEQNUM=10",
+ }},
+ {Action: uevent.KOBJ_OFFLINE, DevPath: "\xfd", Env: []string{
+ "SEQNUM=11",
+ }},
+ {Action: uevent.KOBJ_OFFLINE, DevPath: "\xfc", Env: []string{
+ "V=\xf0",
+ "SEQNUM=12",
+ }},
+ }, map[string]*Object{
+ "\xfd": {
+ Offline: true,
+ DevPath: "\xfd",
+ Env: map[string]string{"V": "\xff"},
+ },
+ "\xfc": {
+ Offline: true,
+ DevPath: "\xfc",
+ Env: map[string]string{"V": "\xf0"},
+ },
+ }, nil, []error{
+ TargetError{
+ Action: uevent.KOBJ_ONLINE,
+ DevPath: "\xfd",
+ Env: map[string]string{
+ "V": "\xff",
+ },
+ Sequence: 9,
+ },
+ UnexpectedOfflineError{
+ DevPath: "\xfd",
+ Env: map[string]string{
+ "V": "\xff",
+ },
+ },
+ UnexpectedOfflineError{
+ Offline: true,
+ DevPath: "\xfd",
+ Env: map[string]string{"V": "\xff"},
+ },
+ TargetError{
+ Action: uevent.KOBJ_OFFLINE,
+ DevPath: "\xfc",
+ Env: map[string]string{"V": "\xf0"},
+ Sequence: 12,
+ },
+ }},
+
+ {"bind", []*uevent.Message{
+ {Action: uevent.KOBJ_ADD, DevPath: "\x00", Env: []string{
+ "V=\xff",
+ "DRIVER=\x00",
+ "SEQNUM=1",
+ }},
+ {Action: uevent.KOBJ_UNBIND, DevPath: "\x00", Env: []string{
+ "_V=\xfd",
+ "SEQNUM=2",
+ }},
+ {Action: uevent.KOBJ_BIND, DevPath: "\x00", Env: []string{
+ "__V=\xfc",
+ "SEQNUM=3",
+ }},
+ {Action: uevent.KOBJ_BIND, DevPath: "\x00", Env: []string{
+ "___V=\xfb",
+ "SEQNUM=4",
+ }},
+ {Action: uevent.KOBJ_BIND, DevPath: "\x0c", Env: []string{
+ "V=\xf0",
+ "DRIVER=\x01",
+ "SEQNUM=5",
+ }},
+ }, map[string]*Object{
+ "\x00": {
+ State: StateBound,
+ DevPath: "\x00",
+ Env: map[string]string{
+ "V": "\xff",
+ // unbind not merged
+ "__V": "\xfc",
+ "___V": "\xfb",
+ },
+ },
+ "\f": {
+ State: StateBound,
+ DevPath: "\f",
+ Driver: "\x01",
+ Env: map[string]string{
+ "V": "\xf0",
+ },
+ }}, nil, []error{
+ UnbindStateError{
+ State: StateNew,
+ DevPath: "\x00",
+ Env: map[string]string{"V": "\xff"},
+ },
+ BindStateError{
+ State: StateBound,
+ DevPath: "\x00",
+ Env: map[string]string{"V": "\xff", "__V": "\xfc"},
+ },
+ TargetError{
+ Action: uevent.KOBJ_BIND,
+ DevPath: "\f",
+ Env: map[string]string{"V": "\xf0", "DRIVER": "\x01"},
+ Sequence: 5,
+ },
+ }},
+
+ {"unbind", []*uevent.Message{
+ {Action: uevent.KOBJ_UNBIND, DevPath: "\xfd", Env: []string{
+ "SEQNUM=9",
+ }},
+ }, map[string]*Object{}, nil, []error{
+ TargetError{
+ Action: uevent.KOBJ_UNBIND,
+ DevPath: "\xfd",
+ Env: map[string]string{},
+ Sequence: 9,
+ },
+ }},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ var (
+ c []map[string]string
+ errs []error
+ )
+ s := New(coldboot, func(o *Object, env map[string]string) {
+ c = append(c, env)
+ }, func(err error) {
+ errs = append(errs, err)
+ })
+ ueventVal := reflect.ValueOf(s).Elem().FieldByName("uevent")
+ got := reflect.NewAt(ueventVal.Type(), unsafe.Pointer(ueventVal.UnsafeAddr())).
+ Elem().Interface().(map[string]*Object)
+
+ events := make(chan *uevent.Message, len(tc.messages))
+ for _, m := range tc.messages {
+ events <- m
+ }
+ close(events)
+ s.Consume(t.Context(), events)
+
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("Consume: %#v, want %#v", got, tc.want)
+ }
+ if !slices.EqualFunc(c, tc.c, maps.Equal) {
+ t.Errorf("Consume: c = %#v, want %#v", c, tc.c)
+ }
+ if !reflect.DeepEqual(errs, tc.errs) {
+ t.Errorf("Consume: errs = %#v, want %#v", errs, tc.errs)
+ }
+ })
+ }
+}
+
+func TestErrors(t *testing.T) {
+ t.Parallel()
+
+ testCases := []struct {
+ name string
+ err error
+ want string
+ }{
+ {"BadSequenceError", BadSequenceError{
+ Got: 0xcafe,
+ Want: 0xbabe,
+ }, "SEQNUM=51966, want 47806"},
+
+ {"UnexpectedColdbootError", UnexpectedColdbootError{
+ Action: 0xbeef,
+ }, "unexpected unsupported kobject_action 48879 coldboot event"},
+
+ {"DuplicateAddError", DuplicateAddError{
+ Action: uevent.KOBJ_ADD,
+ DevPath: "\x00",
+ }, `duplicate add event on devpath "\x00"`},
+
+ {"TargetError", TargetError{
+ Action: uevent.KOBJ_UNBIND,
+ DevPath: "\x00",
+ }, `unexpected unbind event on devpath "\x00"`},
+
+ {"RemoveStateError", RemoveStateError{
+ State: StateBound,
+ DevPath: "\x00",
+ }, `remove event targeting devpath "\x00" in state 2`},
+
+ {"BindStateError", BindStateError{
+ State: StateBound,
+ DevPath: "\x00",
+ }, `bind event targeting devpath "\x00" in state 2`},
+
+ {"UnbindStateError", UnbindStateError{
+ State: StateNew,
+ DevPath: "\x00",
+ }, `unbind event targeting devpath "\x00" in state 1`},
+
+ {"MalformedMoveError", MalformedMoveError{
+ DevPath: "\x00",
+ }, `move event targeting devpath "\x00" missing DEVPATH_OLD`},
+
+ {"UnexpectedOfflineError", UnexpectedOfflineError{
+ DevPath: "\x00",
+ }, `online event targeting devpath "\x00"`},
+ {"UnexpectedOfflineError offline", UnexpectedOfflineError{
+ DevPath: "\x00",
+ Offline: true,
+ }, `offline event targeting devpath "\x00"`},
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ t.Parallel()
+
+ if got := tc.err.Error(); got != tc.want {
+ t.Errorf("Error: %s, want %s", got, tc.want)
+ }
+ })
+ }
+}
+
+var (
+ //go:embed testdata/00-coldboot
+ testdata00 string
+ //go:embed testdata/01-move
+ testdata01 string
+ //go:embed testdata/02-cpu
+ testdata02 string
+ //go:embed testdata/03-loop
+ testdata03 string
+ //go:embed testdata/04-loop-detach
+ testdata04 string
+ //go:embed testdata/05-loop-remove
+ testdata05 string
+)
+
+func TestConsumeSample(t *testing.T) {
+ t.Parallel()
+
+ steps := []struct {
+ name string
+ data string
+ want func(want map[string]*Object)
+ c []map[string]string
+ }{
+ {"coldboot", testdata00, func(want map[string]*Object) {
+ maps.Copy(want, map[string]*Object{
+ "/devices/LNXSYSTM:00": {
+ DevPath: "/devices/LNXSYSTM:00",
+ ModAlias: "acpi:LNXSYSTM:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXPWRBN:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXPWRBN:00",
+ ModAlias: "acpi:LNXPWRBN:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7": {
+ DevPath: "/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00",
+ ModAlias: "acpi:LNXSYBUS:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00",
+ ModAlias: "acpi:ACPI0010:PNP0A05:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00",
+ ModAlias: "acpi:LNXCPU:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00",
+ ModAlias: "acpi:PNP0103:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00",
+ ModAlias: "acpi:PNP0A03:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00",
+ ModAlias: "acpi:PNP0A06:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01",
+ ModAlias: "acpi:PNP0A06:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02",
+ ModAlias: "acpi:PNP0A06:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00",
+ ModAlias: "acpi:QEMU0002:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00",
+ ModAlias: "acpi:PNP0303:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00",
+ ModAlias: "acpi:PNP0400:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00",
+ ModAlias: "acpi:PNP0501:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00",
+ ModAlias: "acpi:PNP0700:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00",
+ ModAlias: "acpi:PNP0B00:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00",
+ ModAlias: "acpi:PNP0F13:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8": {
+ State: StateNew,
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8",
+ Subsystem: "wakeup"},
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6",
+ Subsystem: "wakeup",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00",
+ ModAlias: "acpi:PNP0C0F:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01",
+ ModAlias: "acpi:PNP0C0F:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02",
+ ModAlias: "acpi:PNP0C0F:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03",
+ ModAlias: "acpi:PNP0C0F:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04",
+ ModAlias: "acpi:PNP0C0F:",
+ Subsystem: "acpi",
+ },
+ "/devices/LNXSYSTM:00/LNXSYBUS:01": {
+ DevPath: "/devices/LNXSYSTM:00/LNXSYBUS:01",
+ ModAlias: "acpi:LNXSYBUS:",
+ Subsystem: "acpi",
+ },
+ "/devices/breakpoint": {
+ DevPath: "/devices/breakpoint",
+ Subsystem: "event_source",
+ },
+ "/devices/cpu": {
+ DevPath: "/devices/cpu",
+ Subsystem: "event_source",
+ },
+ "/devices/kprobe": {
+ DevPath: "/devices/kprobe",
+ Subsystem: "event_source",
+ },
+ "/devices/msr": {
+ DevPath: "/devices/msr",
+ Subsystem: "event_source",
+ },
+ "/devices/pci0000:00/0000:00:00.0": {
+ DevPath: "/devices/pci0000:00/0000:00:00.0",
+ ModAlias: "pci:v00008086d00001237sv00001AF4sd00001100bc06sc00i00",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "60000", "PCI_ID": "8086:1237", "PCI_SLOT_NAME": "0000:00:00.0", "PCI_SUBSYS_ID": "1AF4:1100"},
+ },
+ "/devices/pci0000:00/0000:00:01.0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.0",
+ ModAlias: "pci:v00008086d00007000sv00001AF4sd00001100bc06sc01i00",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "60100", "PCI_ID": "8086:7000", "PCI_SLOT_NAME": "0000:00:01.0", "PCI_SUBSYS_ID": "1AF4:1100"},
+ },
+ "/devices/pci0000:00/0000:00:01.1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1",
+ ModAlias: "pci:v00008086d00007010sv00001AF4sd00001100bc01sc01i80",
+ Driver: "ata_piix",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "10180", "PCI_ID": "8086:7010", "PCI_SLOT_NAME": "0000:00:01.1", "PCI_SUBSYS_ID": "1AF4:1100"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1",
+ Subsystem: "ata_port",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/host0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/host0",
+ Subsystem: "scsi",
+ Env: map[string]string{"DEVTYPE": "scsi_host"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0",
+ Subsystem: "scsi_host",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1",
+ Subsystem: "ata_link",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0",
+ Subsystem: "ata_device",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1",
+ Subsystem: "ata_device",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2",
+ Subsystem: "ata_port",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1",
+ Subsystem: "scsi",
+ Env: map[string]string{"DEVTYPE": "scsi_host"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1",
+ Subsystem: "scsi_host",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0",
+ Subsystem: "scsi",
+ Env: map[string]string{"DEVTYPE": "scsi_target"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0",
+ ModAlias: "scsi:t-0x05",
+ Subsystem: "scsi",
+ Env: map[string]string{"DEVTYPE": "scsi_device"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0",
+ Subsystem: "bsg",
+ Env: map[string]string{"DEVNAME": "bsg/1:0:0:0", "MAJOR": "251", "MINOR": "0"},
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/scsi_device/1:0:0:0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/scsi_device/1:0:0:0",
+ Subsystem: "scsi_device",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2",
+ Subsystem: "ata_link",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0",
+ Subsystem: "ata_device",
+ },
+ "/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1": {
+ DevPath: "/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1",
+ Subsystem: "ata_device",
+ },
+ "/devices/pci0000:00/0000:00:01.3": {
+ DevPath: "/devices/pci0000:00/0000:00:01.3",
+ ModAlias: "pci:v00008086d00007113sv00001AF4sd00001100bc06sc80i00",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "68000", "PCI_ID": "8086:7113", "PCI_SLOT_NAME": "0000:00:01.3", "PCI_SUBSYS_ID": "1AF4:1100"},
+ },
+ "/devices/pci0000:00/0000:00:02.0": {
+ DevPath: "/devices/pci0000:00/0000:00:02.0",
+ ModAlias: "pci:v00008086d0000100Esv00001AF4sd00001100bc02sc00i00",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "20000", "PCI_ID": "8086:100E", "PCI_SLOT_NAME": "0000:00:02.0", "PCI_SUBSYS_ID": "1AF4:1100"},
+ },
+ "/devices/pci0000:00/0000:00:03.0": {
+ DevPath: "/devices/pci0000:00/0000:00:03.0",
+ ModAlias: "pci:v00001AF4d00001001sv00001AF4sd00000002bc01sc00i00",
+ Driver: "virtio-pci",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "10000", "PCI_ID": "1AF4:1001", "PCI_SLOT_NAME": "0000:00:03.0", "PCI_SUBSYS_ID": "1AF4:0002"},
+ },
+ "/devices/pci0000:00/0000:00:03.0/virtio0": {
+ DevPath: "/devices/pci0000:00/0000:00:03.0/virtio0",
+ ModAlias: "virtio:d00000002v00001AF4",
+ Driver: "virtio_blk",
+ Subsystem: "virtio",
+ },
+ "/devices/pci0000:00/0000:00:03.0/virtio0/block/vda": {
+ DevPath: "/devices/pci0000:00/0000:00:03.0/virtio0/block/vda",
+ Subsystem: "block",
+ Env: map[string]string{"DEVNAME": "vda", "DEVTYPE": "disk", "DISKSEQ": "1", "MAJOR": "254", "MINOR": "0"},
+ },
+ "/devices/pci0000:00/0000:00:04.0": {
+ State: 2,
+ DevPath: "/devices/pci0000:00/0000:00:04.0",
+ ModAlias: "pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00",
+ Driver: "virtio-pci",
+ Subsystem: "pci",
+ Env: map[string]string{"PCI_CLASS": "40100", "PCI_ID": "1AF4:1059", "PCI_SLOT_NAME": "0000:00:04.0", "PCI_SUBSYS_ID": "1AF4:1100"}},
+ "/devices/pci0000:00/0000:00:04.0/virtio1": {
+ State: StateNew,
+ DevPath: "/devices/pci0000:00/0000:00:04.0/virtio1",
+ ModAlias: "virtio:d00000019v00001AF4",
+ Subsystem: "virtio"},
+ "/devices/pci0000:00/QEMU0002:00": {
+ DevPath: "/devices/pci0000:00/QEMU0002:00",
+ ModAlias: "acpi:QEMU0002:",
+ Subsystem: "platform",
+ },
+ "/devices/pci0000:00/pci_bus/0000:00": {
+ DevPath: "/devices/pci0000:00/pci_bus/0000:00",
+ Subsystem: "pci_bus",
+ },
+ "/devices/platform/PNP0103:00": {
+ DevPath: "/devices/platform/PNP0103:00",
+ ModAlias: "acpi:PNP0103:",
+ Subsystem: "platform",
+ },
+ "/devices/platform/pcspkr": {
+ DevPath: "/devices/platform/pcspkr",
+ ModAlias: "platform:pcspkr",
+ Subsystem: "platform",
+ },
+ "/devices/platform/reg-dummy": {
+ DevPath: "/devices/platform/reg-dummy",
+ ModAlias: "platform:reg-dummy",
+ Driver: "reg-dummy",
+ Subsystem: "platform",
+ },
+ "/devices/platform/reg-dummy/regulator/regulator.0": {
+ DevPath: "/devices/platform/reg-dummy/regulator/regulator.0",
+ Subsystem: "regulator",
+ },
+ "/devices/platform/serial8250": {
+ DevPath: "/devices/platform/serial8250",
+ ModAlias: "platform:serial8250",
+ Driver: "serial8250",
+ Subsystem: "platform",
+ },
+ "/devices/platform/serial8250/serial8250:0": {
+ DevPath: "/devices/platform/serial8250/serial8250:0",
+ Driver: "ctrl",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "ctrl"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.1": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.1",
+ Driver: "port",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "port"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "ttyS1", "MAJOR": "4", "MINOR": "65"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.2": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.2",
+ Driver: "port",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "port"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "ttyS2", "MAJOR": "4", "MINOR": "66"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.3": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.3",
+ Driver: "port",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "port"},
+ },
+ "/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3": {
+ DevPath: "/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "ttyS3", "MAJOR": "4", "MINOR": "67"},
+ },
+ "/devices/pnp0/00:00": {
+ DevPath: "/devices/pnp0/00:00",
+ Subsystem: "pnp",
+ },
+ "/devices/pnp0/00:01": {
+ DevPath: "/devices/pnp0/00:01",
+ Subsystem: "pnp",
+ },
+ "/devices/pnp0/00:02": {
+ DevPath: "/devices/pnp0/00:02",
+ Subsystem: "pnp",
+ },
+ "/devices/pnp0/00:03": {
+ DevPath: "/devices/pnp0/00:03",
+ Subsystem: "pnp",
+ },
+ "/devices/pnp0/00:04": {
+ DevPath: "/devices/pnp0/00:04",
+ Driver: "serial",
+ Subsystem: "pnp",
+ },
+ "/devices/pnp0/00:04/00:04:0": {
+ DevPath: "/devices/pnp0/00:04/00:04:0",
+ Driver: "ctrl",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "ctrl"},
+ },
+ "/devices/pnp0/00:04/00:04:0/00:04:0.0": {
+ DevPath: "/devices/pnp0/00:04/00:04:0/00:04:0.0",
+ Driver: "port",
+ Subsystem: "serial-base",
+ Env: map[string]string{"DEVTYPE": "port"},
+ },
+ "/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0": {
+ DevPath: "/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "ttyS0", "MAJOR": "4", "MINOR": "64"},
+ },
+ "/devices/pnp0/00:05": {
+ DevPath: "/devices/pnp0/00:05",
+ Subsystem: "pnp",
+ },
+ "/devices/software": {
+ DevPath: "/devices/software",
+ Subsystem: "event_source",
+ },
+ "/devices/system/clockevents/broadcast": {
+ DevPath: "/devices/system/clockevents/broadcast",
+ Subsystem: "clockevents",
+ },
+ "/devices/system/clockevents/clockevent0": {
+ DevPath: "/devices/system/clockevents/clockevent0",
+ Subsystem: "clockevents",
+ },
+ "/devices/system/clocksource/clocksource0": {
+ DevPath: "/devices/system/clocksource/clocksource0",
+ Subsystem: "clocksource",
+ },
+ "/devices/system/container/PNP0A06:00": {
+ DevPath: "/devices/system/container/PNP0A06:00",
+ Subsystem: "container",
+ },
+ "/devices/system/container/PNP0A06:01": {
+ DevPath: "/devices/system/container/PNP0A06:01",
+ Subsystem: "container",
+ },
+ "/devices/system/container/PNP0A06:02": {
+ DevPath: "/devices/system/container/PNP0A06:02",
+ Subsystem: "container",
+ },
+ "/devices/system/cpu/cpu0": {
+ DevPath: "/devices/system/cpu/cpu0",
+ ModAlias: "cpu:type:x86,ven0002fam000Fmod006B:feature:,0000,0002,0003,0004,0005,0006,0007,0008,0009,000B,000C,000D,000E,000F,0010,0011,0013,0017,0018,0019,001A,0020,0022,0023,0024,0025,0026,0027,0028,0029,002B,002C,002D,002E,002F,0030,0031,0034,0037,0038,003D,0064,006E,0070,0074,0075,0076,0079,007A,007F,0080,008D,0095,009F,00C0,00C8,00ED,00F3,010F,0115,0165,016C,0282\n",
+ Driver: "processor",
+ Subsystem: "cpu",
+ },
+ "/devices/system/machinecheck/machinecheck0": {
+ DevPath: "/devices/system/machinecheck/machinecheck0",
+ Subsystem: "machinecheck",
+ },
+ "/devices/system/memory/memory0": {
+ DevPath: "/devices/system/memory/memory0",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory1": {
+ DevPath: "/devices/system/memory/memory1",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory2": {
+ DevPath: "/devices/system/memory/memory2",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory3": {
+ DevPath: "/devices/system/memory/memory3",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory4": {
+ DevPath: "/devices/system/memory/memory4",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory5": {
+ DevPath: "/devices/system/memory/memory5",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory6": {
+ DevPath: "/devices/system/memory/memory6",
+ Subsystem: "memory",
+ },
+ "/devices/system/memory/memory7": {
+ DevPath: "/devices/system/memory/memory7",
+ Subsystem: "memory",
+ },
+ "/devices/system/node/node0": {
+ DevPath: "/devices/system/node/node0",
+ Subsystem: "node",
+ },
+ "/devices/tracepoint": {
+ DevPath: "/devices/tracepoint",
+ Subsystem: "event_source",
+ },
+ "/devices/uprobe": {
+ DevPath: "/devices/uprobe",
+ Subsystem: "event_source",
+ },
+ "/devices/virtual/bdi/254:0": {
+ DevPath: "/devices/virtual/bdi/254:0",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/devlink/:ata2--scsi:1:0:0:0": {
+ DevPath: "/devices/virtual/devlink/:ata2--scsi:1:0:0:0",
+ Subsystem: "devlink",
+ },
+ "/devices/virtual/dmi/id": {
+ DevPath: "/devices/virtual/dmi/id",
+ ModAlias: "dmi:bvnSeaBIOS:bvrrel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org:bd04/01/2014:br0.0:svnQEMU:pnStandardPC(i440FX+PIIX,1996):pvrpc-i440fx-10.1:cvnQEMU:ct1:cvrpc-i440fx-10.1:sku:",
+ Subsystem: "dmi",
+ },
+ "/devices/virtual/mem/full": {
+ DevPath: "/devices/virtual/mem/full",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "full", "MAJOR": "1", "MINOR": "7"},
+ },
+ "/devices/virtual/mem/kmsg": {
+ DevPath: "/devices/virtual/mem/kmsg",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0644", "DEVNAME": "kmsg", "MAJOR": "1", "MINOR": "11"},
+ },
+ "/devices/virtual/mem/mem": {
+ DevPath: "/devices/virtual/mem/mem",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVNAME": "mem", "MAJOR": "1", "MINOR": "1"},
+ },
+ "/devices/virtual/mem/null": {
+ DevPath: "/devices/virtual/mem/null",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "null", "MAJOR": "1", "MINOR": "3"},
+ },
+ "/devices/virtual/mem/port": {
+ DevPath: "/devices/virtual/mem/port",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVNAME": "port", "MAJOR": "1", "MINOR": "4"},
+ },
+ "/devices/virtual/mem/random": {
+ DevPath: "/devices/virtual/mem/random",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "random", "MAJOR": "1", "MINOR": "8"},
+ },
+ "/devices/virtual/mem/urandom": {
+ DevPath: "/devices/virtual/mem/urandom",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "urandom", "MAJOR": "1", "MINOR": "9"},
+ },
+ "/devices/virtual/mem/zero": {
+ DevPath: "/devices/virtual/mem/zero",
+ Subsystem: "mem",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "zero", "MAJOR": "1", "MINOR": "5"},
+ },
+ "/devices/virtual/memory_tiering/memory_tier4": {
+ DevPath: "/devices/virtual/memory_tiering/memory_tier4",
+ Subsystem: "memory_tiering",
+ },
+ "/devices/virtual/misc/cpu_dma_latency": {
+ DevPath: "/devices/virtual/misc/cpu_dma_latency",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "cpu_dma_latency", "MAJOR": "10", "MINOR": "259"},
+ },
+ "/devices/virtual/misc/hpet": {
+ DevPath: "/devices/virtual/misc/hpet",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "hpet", "MAJOR": "10", "MINOR": "228"},
+ },
+ "/devices/virtual/misc/snapshot": {
+ DevPath: "/devices/virtual/misc/snapshot",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "snapshot", "MAJOR": "10", "MINOR": "231"},
+ },
+ "/devices/virtual/misc/udmabuf": {
+ DevPath: "/devices/virtual/misc/udmabuf",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "udmabuf", "MAJOR": "10", "MINOR": "258"},
+ },
+ "/devices/virtual/misc/userfaultfd": {
+ DevPath: "/devices/virtual/misc/userfaultfd",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "userfaultfd", "MAJOR": "10", "MINOR": "257"},
+ },
+ "/devices/virtual/misc/vga_arbiter": {
+ DevPath: "/devices/virtual/misc/vga_arbiter",
+ Subsystem: "misc",
+ Env: map[string]string{"DEVNAME": "vga_arbiter", "MAJOR": "10", "MINOR": "256"},
+ },
+ "/devices/virtual/net/lo": {
+ DevPath: "/devices/virtual/net/lo",
+ Subsystem: "net",
+ Env: map[string]string{"IFINDEX": "1", "INTERFACE": "lo"},
+ },
+ "/devices/virtual/thermal/cooling_device0": {
+ DevPath: "/devices/virtual/thermal/cooling_device0",
+ Subsystem: "thermal",
+ },
+ "/devices/virtual/tty/console": {
+ DevPath: "/devices/virtual/tty/console",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "console", "MAJOR": "5", "MINOR": "1"},
+ },
+ "/devices/virtual/tty/ptmx": {
+ DevPath: "/devices/virtual/tty/ptmx",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "ptmx", "MAJOR": "5", "MINOR": "2"},
+ },
+ "/devices/virtual/tty/tty": {
+ DevPath: "/devices/virtual/tty/tty",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVMODE": "0666", "DEVNAME": "tty", "MAJOR": "5", "MINOR": "0"},
+ },
+ "/devices/virtual/tty/tty0": {
+ DevPath: "/devices/virtual/tty/tty0",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty0", "MAJOR": "4", "MINOR": "0"},
+ },
+ "/devices/virtual/tty/tty1": {
+ DevPath: "/devices/virtual/tty/tty1",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty1", "MAJOR": "4", "MINOR": "1"},
+ },
+ "/devices/virtual/tty/tty10": {
+ DevPath: "/devices/virtual/tty/tty10",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty10", "MAJOR": "4", "MINOR": "10"},
+ },
+ "/devices/virtual/tty/tty11": {
+ DevPath: "/devices/virtual/tty/tty11",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty11", "MAJOR": "4", "MINOR": "11"},
+ },
+ "/devices/virtual/tty/tty12": {
+ DevPath: "/devices/virtual/tty/tty12",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty12", "MAJOR": "4", "MINOR": "12"},
+ },
+ "/devices/virtual/tty/tty13": {
+ DevPath: "/devices/virtual/tty/tty13",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty13", "MAJOR": "4", "MINOR": "13"},
+ },
+ "/devices/virtual/tty/tty14": {
+ DevPath: "/devices/virtual/tty/tty14",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty14", "MAJOR": "4", "MINOR": "14"},
+ },
+ "/devices/virtual/tty/tty15": {
+ DevPath: "/devices/virtual/tty/tty15",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty15", "MAJOR": "4", "MINOR": "15"},
+ },
+ "/devices/virtual/tty/tty16": {
+ DevPath: "/devices/virtual/tty/tty16",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty16", "MAJOR": "4", "MINOR": "16"},
+ },
+ "/devices/virtual/tty/tty17": {
+ DevPath: "/devices/virtual/tty/tty17",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty17", "MAJOR": "4", "MINOR": "17"},
+ },
+ "/devices/virtual/tty/tty18": {
+ DevPath: "/devices/virtual/tty/tty18",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty18", "MAJOR": "4", "MINOR": "18"},
+ },
+ "/devices/virtual/tty/tty19": {
+ DevPath: "/devices/virtual/tty/tty19",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty19", "MAJOR": "4", "MINOR": "19"},
+ },
+ "/devices/virtual/tty/tty2": {
+ DevPath: "/devices/virtual/tty/tty2",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty2", "MAJOR": "4", "MINOR": "2"},
+ },
+ "/devices/virtual/tty/tty20": {
+ DevPath: "/devices/virtual/tty/tty20",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty20", "MAJOR": "4", "MINOR": "20"},
+ },
+ "/devices/virtual/tty/tty21": {
+ DevPath: "/devices/virtual/tty/tty21",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty21", "MAJOR": "4", "MINOR": "21"},
+ },
+ "/devices/virtual/tty/tty22": {
+ DevPath: "/devices/virtual/tty/tty22",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty22", "MAJOR": "4", "MINOR": "22"},
+ },
+ "/devices/virtual/tty/tty23": {
+ DevPath: "/devices/virtual/tty/tty23",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty23", "MAJOR": "4", "MINOR": "23"},
+ },
+ "/devices/virtual/tty/tty24": {
+ DevPath: "/devices/virtual/tty/tty24",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty24", "MAJOR": "4", "MINOR": "24"},
+ },
+ "/devices/virtual/tty/tty25": {
+ DevPath: "/devices/virtual/tty/tty25",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty25", "MAJOR": "4", "MINOR": "25"},
+ },
+ "/devices/virtual/tty/tty26": {
+ DevPath: "/devices/virtual/tty/tty26",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty26", "MAJOR": "4", "MINOR": "26"},
+ },
+ "/devices/virtual/tty/tty27": {
+ DevPath: "/devices/virtual/tty/tty27",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty27", "MAJOR": "4", "MINOR": "27"},
+ },
+ "/devices/virtual/tty/tty28": {
+ DevPath: "/devices/virtual/tty/tty28",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty28", "MAJOR": "4", "MINOR": "28"},
+ },
+ "/devices/virtual/tty/tty29": {
+ DevPath: "/devices/virtual/tty/tty29",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty29", "MAJOR": "4", "MINOR": "29"},
+ },
+ "/devices/virtual/tty/tty3": {
+ DevPath: "/devices/virtual/tty/tty3",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty3", "MAJOR": "4", "MINOR": "3"},
+ },
+ "/devices/virtual/tty/tty30": {
+ DevPath: "/devices/virtual/tty/tty30",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty30", "MAJOR": "4", "MINOR": "30"},
+ },
+ "/devices/virtual/tty/tty31": {
+ DevPath: "/devices/virtual/tty/tty31",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty31", "MAJOR": "4", "MINOR": "31"},
+ },
+ "/devices/virtual/tty/tty32": {
+ DevPath: "/devices/virtual/tty/tty32",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty32", "MAJOR": "4", "MINOR": "32"},
+ },
+ "/devices/virtual/tty/tty33": {
+ DevPath: "/devices/virtual/tty/tty33",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty33", "MAJOR": "4", "MINOR": "33"},
+ },
+ "/devices/virtual/tty/tty34": {
+ DevPath: "/devices/virtual/tty/tty34",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty34", "MAJOR": "4", "MINOR": "34"},
+ },
+ "/devices/virtual/tty/tty35": {
+ DevPath: "/devices/virtual/tty/tty35",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty35", "MAJOR": "4", "MINOR": "35"},
+ },
+ "/devices/virtual/tty/tty36": {
+ DevPath: "/devices/virtual/tty/tty36",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty36", "MAJOR": "4", "MINOR": "36"},
+ },
+ "/devices/virtual/tty/tty37": {
+ DevPath: "/devices/virtual/tty/tty37",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty37", "MAJOR": "4", "MINOR": "37"},
+ },
+ "/devices/virtual/tty/tty38": {
+ DevPath: "/devices/virtual/tty/tty38",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty38", "MAJOR": "4", "MINOR": "38"},
+ },
+ "/devices/virtual/tty/tty39": {
+ DevPath: "/devices/virtual/tty/tty39",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty39", "MAJOR": "4", "MINOR": "39"},
+ },
+ "/devices/virtual/tty/tty4": {
+ DevPath: "/devices/virtual/tty/tty4",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty4", "MAJOR": "4", "MINOR": "4"},
+ },
+ "/devices/virtual/tty/tty40": {
+ DevPath: "/devices/virtual/tty/tty40",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty40", "MAJOR": "4", "MINOR": "40"},
+ },
+ "/devices/virtual/tty/tty41": {
+ DevPath: "/devices/virtual/tty/tty41",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty41", "MAJOR": "4", "MINOR": "41"},
+ },
+ "/devices/virtual/tty/tty42": {
+ DevPath: "/devices/virtual/tty/tty42",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty42", "MAJOR": "4", "MINOR": "42"},
+ },
+ "/devices/virtual/tty/tty43": {
+ DevPath: "/devices/virtual/tty/tty43",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty43", "MAJOR": "4", "MINOR": "43"},
+ },
+ "/devices/virtual/tty/tty44": {
+ DevPath: "/devices/virtual/tty/tty44",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty44", "MAJOR": "4", "MINOR": "44"},
+ },
+ "/devices/virtual/tty/tty45": {
+ DevPath: "/devices/virtual/tty/tty45",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty45", "MAJOR": "4", "MINOR": "45"},
+ },
+ "/devices/virtual/tty/tty46": {
+ DevPath: "/devices/virtual/tty/tty46",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty46", "MAJOR": "4", "MINOR": "46"},
+ },
+ "/devices/virtual/tty/tty47": {
+ DevPath: "/devices/virtual/tty/tty47",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty47", "MAJOR": "4", "MINOR": "47"},
+ },
+ "/devices/virtual/tty/tty48": {
+ DevPath: "/devices/virtual/tty/tty48",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty48", "MAJOR": "4", "MINOR": "48"},
+ },
+ "/devices/virtual/tty/tty49": {
+ DevPath: "/devices/virtual/tty/tty49",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty49", "MAJOR": "4", "MINOR": "49"},
+ },
+ "/devices/virtual/tty/tty5": {
+ DevPath: "/devices/virtual/tty/tty5",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty5", "MAJOR": "4", "MINOR": "5"},
+ },
+ "/devices/virtual/tty/tty50": {
+ DevPath: "/devices/virtual/tty/tty50",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty50", "MAJOR": "4", "MINOR": "50"},
+ },
+ "/devices/virtual/tty/tty51": {
+ DevPath: "/devices/virtual/tty/tty51",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty51", "MAJOR": "4", "MINOR": "51"},
+ },
+ "/devices/virtual/tty/tty52": {
+ DevPath: "/devices/virtual/tty/tty52",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty52", "MAJOR": "4", "MINOR": "52"},
+ },
+ "/devices/virtual/tty/tty53": {
+ DevPath: "/devices/virtual/tty/tty53",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty53", "MAJOR": "4", "MINOR": "53"},
+ },
+ "/devices/virtual/tty/tty54": {
+ DevPath: "/devices/virtual/tty/tty54",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty54", "MAJOR": "4", "MINOR": "54"},
+ },
+ "/devices/virtual/tty/tty55": {
+ DevPath: "/devices/virtual/tty/tty55",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty55", "MAJOR": "4", "MINOR": "55"},
+ },
+ "/devices/virtual/tty/tty56": {
+ DevPath: "/devices/virtual/tty/tty56",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty56", "MAJOR": "4", "MINOR": "56"},
+ },
+ "/devices/virtual/tty/tty57": {
+ DevPath: "/devices/virtual/tty/tty57",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty57", "MAJOR": "4", "MINOR": "57"},
+ },
+ "/devices/virtual/tty/tty58": {
+ DevPath: "/devices/virtual/tty/tty58",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty58", "MAJOR": "4", "MINOR": "58"},
+ },
+ "/devices/virtual/tty/tty59": {
+ DevPath: "/devices/virtual/tty/tty59",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty59", "MAJOR": "4", "MINOR": "59"},
+ },
+ "/devices/virtual/tty/tty6": {
+ DevPath: "/devices/virtual/tty/tty6",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty6", "MAJOR": "4", "MINOR": "6"},
+ },
+ "/devices/virtual/tty/tty60": {
+ DevPath: "/devices/virtual/tty/tty60",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty60", "MAJOR": "4", "MINOR": "60"},
+ },
+ "/devices/virtual/tty/tty61": {
+ DevPath: "/devices/virtual/tty/tty61",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty61", "MAJOR": "4", "MINOR": "61"},
+ },
+ "/devices/virtual/tty/tty62": {
+ DevPath: "/devices/virtual/tty/tty62",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty62", "MAJOR": "4", "MINOR": "62"},
+ },
+ "/devices/virtual/tty/tty63": {
+ DevPath: "/devices/virtual/tty/tty63",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty63", "MAJOR": "4", "MINOR": "63"},
+ },
+ "/devices/virtual/tty/tty7": {
+ DevPath: "/devices/virtual/tty/tty7",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty7", "MAJOR": "4", "MINOR": "7"},
+ },
+ "/devices/virtual/tty/tty8": {
+ DevPath: "/devices/virtual/tty/tty8",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty8", "MAJOR": "4", "MINOR": "8"},
+ },
+ "/devices/virtual/tty/tty9": {
+ DevPath: "/devices/virtual/tty/tty9",
+ Subsystem: "tty",
+ Env: map[string]string{"DEVNAME": "tty9", "MAJOR": "4", "MINOR": "9"},
+ },
+ "/devices/virtual/vc/vcs": {
+ DevPath: "/devices/virtual/vc/vcs",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcs", "MAJOR": "7", "MINOR": "0"},
+ },
+ "/devices/virtual/vc/vcs1": {
+ DevPath: "/devices/virtual/vc/vcs1",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcs1", "MAJOR": "7", "MINOR": "1"},
+ },
+ "/devices/virtual/vc/vcsa": {
+ DevPath: "/devices/virtual/vc/vcsa",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcsa", "MAJOR": "7", "MINOR": "128"},
+ },
+ "/devices/virtual/vc/vcsa1": {
+ DevPath: "/devices/virtual/vc/vcsa1",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcsa1", "MAJOR": "7", "MINOR": "129"},
+ },
+ "/devices/virtual/vc/vcsu": {
+ DevPath: "/devices/virtual/vc/vcsu",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcsu", "MAJOR": "7", "MINOR": "64"},
+ },
+ "/devices/virtual/vc/vcsu1": {
+ DevPath: "/devices/virtual/vc/vcsu1",
+ Subsystem: "vc",
+ Env: map[string]string{"DEVNAME": "vcsu1", "MAJOR": "7", "MINOR": "65"},
+ },
+ "/devices/virtual/vtconsole/vtcon0": {
+ DevPath: "/devices/virtual/vtconsole/vtcon0",
+ Subsystem: "vtconsole",
+ },
+ "/devices/virtual/workqueue/nvme-auth-wq": {
+ DevPath: "/devices/virtual/workqueue/nvme-auth-wq",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/nvme-delete-wq": {
+ DevPath: "/devices/virtual/workqueue/nvme-delete-wq",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/nvme-reset-wq": {
+ DevPath: "/devices/virtual/workqueue/nvme-reset-wq",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/nvme-wq": {
+ DevPath: "/devices/virtual/workqueue/nvme-wq",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/scsi_tmf_0": {
+ DevPath: "/devices/virtual/workqueue/scsi_tmf_0",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/scsi_tmf_1": {
+ DevPath: "/devices/virtual/workqueue/scsi_tmf_1",
+ Subsystem: "workqueue",
+ },
+ "/devices/virtual/workqueue/writeback": {
+ DevPath: "/devices/virtual/workqueue/writeback",
+ Subsystem: "workqueue"}})
+ }, nil},
+
+ {"move", testdata01, func(want map[string]*Object) {
+ o := want["/devices/virtual/net/lo"].Clone()
+ delete(want, "/devices/virtual/net/lo")
+ o.DevPath = "/devices/virtual/net/_lo"
+ o.Env["INTERFACE"] = "_lo"
+ want["/devices/virtual/net/_lo"] = &o
+ }, nil},
+
+ {"cpu", testdata02, func(want map[string]*Object) {
+ o := want["/devices/system/machinecheck/machinecheck0"].Clone()
+ o.State = StateNew
+ want["/devices/system/machinecheck/machinecheck0"] = &o
+ }, nil},
+
+ {"loop", testdata03, func(want map[string]*Object) {
+ maps.Copy(want, map[string]*Object{
+ "/devices/virtual/bdi/7:0": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:0",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:1": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:1",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:2": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:2",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:3": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:3",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:4": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:4",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:5": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:5",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:6": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:6",
+ Subsystem: "bdi",
+ },
+ "/devices/virtual/bdi/7:7": {
+ State: StateNew,
+ DevPath: "/devices/virtual/bdi/7:7",
+ Subsystem: "bdi",
+ },
+
+ "/devices/virtual/block/loop0": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop0",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop0",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "10",
+ "MAJOR": "7",
+ "MINOR": "0",
+ },
+ },
+ "/devices/virtual/block/loop1": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop1",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop1",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "3",
+ "MAJOR": "7",
+ "MINOR": "1",
+ },
+ },
+ "/devices/virtual/block/loop2": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop2",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop2",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "4",
+ "MAJOR": "7",
+ "MINOR": "2",
+ },
+ },
+ "/devices/virtual/block/loop3": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop3",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop3",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "5",
+ "MAJOR": "7",
+ "MINOR": "3",
+ },
+ },
+ "/devices/virtual/block/loop4": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop4",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop4",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "6",
+ "MAJOR": "7",
+ "MINOR": "4",
+ },
+ },
+ "/devices/virtual/block/loop5": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop5",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop5",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "7",
+ "MAJOR": "7",
+ "MINOR": "5",
+ },
+ },
+ "/devices/virtual/block/loop6": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop6",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop6",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "8",
+ "MAJOR": "7",
+ "MINOR": "6",
+ },
+ },
+ "/devices/virtual/block/loop7": {
+ State: StateNew,
+ DevPath: "/devices/virtual/block/loop7",
+ Subsystem: "block",
+ Env: map[string]string{
+ "DEVNAME": "loop7",
+ "DEVTYPE": "disk",
+ "DISKSEQ": "9",
+ "MAJOR": "7",
+ "MINOR": "7",
+ },
+ },
+ "/devices/virtual/misc/loop-control": {
+ State: StateNew,
+ DevPath: "/devices/virtual/misc/loop-control",
+ Subsystem: "misc",
+ Env: map[string]string{
+ "DEVNAME": "loop-control",
+ "MAJOR": "10",
+ "MINOR": "237",
+ },
+ },
+
+ "/module/loop": {
+ State: StateNew,
+ DevPath: "/module/loop",
+ Subsystem: "module",
+ },
+ })
+ }, []map[string]string{{}}},
+
+ {"loop-detach", testdata04, nil, []map[string]string{
+ {},
+ {"DISK_MEDIA_CHANGE": "1"},
+ }},
+
+ {"loop-remove", testdata05, func(want map[string]*Object) {
+ for _, k := range []string{
+ "/devices/virtual/misc/loop-control",
+ "/devices/virtual/bdi/7:0",
+ "/devices/virtual/block/loop0",
+ "/devices/virtual/bdi/7:1",
+ "/devices/virtual/block/loop1",
+ "/devices/virtual/bdi/7:2",
+ "/devices/virtual/block/loop2",
+ "/devices/virtual/bdi/7:3",
+ "/devices/virtual/block/loop3",
+ "/devices/virtual/bdi/7:4",
+ "/devices/virtual/block/loop4",
+ "/devices/virtual/bdi/7:5",
+ "/devices/virtual/block/loop5",
+ "/devices/virtual/bdi/7:6",
+ "/devices/virtual/block/loop6",
+ "/devices/virtual/bdi/7:7",
+ "/devices/virtual/block/loop7",
+ "/module/loop",
+ } {
+ delete(want, k)
+ }
+ }, nil},
+ }
+ var c []map[string]string
+ s := New(uevent.UUID{
+ 0xfe, 0x4d, 0x7c, 0x9d,
+ 0xb8, 0xc6,
+ 0x4a, 0x70,
+ 0x9e, 0xf1,
+ 0x3d, 0x8a, 0x58, 0xd1, 0x8e, 0xed,
+ }, func(o *Object, env map[string]string) {
+ c = append(c, env)
+ }, func(err error) {
+ t.Fatal(err)
+ })
+ ueventVal := reflect.ValueOf(s).Elem().FieldByName("uevent")
+ got := reflect.NewAt(ueventVal.Type(), unsafe.Pointer(ueventVal.UnsafeAddr())).
+ Elem().Interface().(map[string]*Object)
+ want := make(map[string]*Object)
+ for _, step := range steps {
+ if step.want != nil {
+ step.want(want)
+ }
+ events := make(chan *uevent.Message)
+ go func() {
+ defer close(events)
+ d := json.NewDecoder(strings.NewReader(step.data))
+ for {
+ var m uevent.Message
+ if err := d.Decode(&m); err != nil {
+ if err == io.EOF {
+ break
+ }
+ panic(err)
+ }
+ events <- &m
+ }
+ }()
+
+ s.Consume(t.Context(), events)
+ if !reflect.DeepEqual(got, want) {
+ t.Fatalf("%s: %#v, want %#v", step.name, got, want)
+ }
+ if !slices.EqualFunc(c, step.c, maps.Equal) {
+ t.Fatalf("%s: c = %#v, want %#v", step.name, c, step.c)
+ }
+ c = nil
+ }
+}