All checks were successful
Test / Create distribution (push) Successful in 2m38s
Test / Sandbox (push) Successful in 2m49s
Test / ShareFS (push) Successful in 3m44s
Test / Hakurei (push) Successful in 4m0s
Test / Sandbox (race detector) (push) Successful in 5m24s
Test / Hakurei (race detector) (push) Successful in 6m32s
Test / Flake checks (push) Successful in 1m21s
This tracks kernel state by merging a stream of uevent. Inconsistencies are reported and recovered from gracefully. Signed-off-by: Ophestra <cat@gensokyo.uk>
1807 lines
60 KiB
Go
1807 lines
60 KiB
Go
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
|
|
}
|
|
}
|