aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/kobject/event.go17
-rw-r--r--internal/kobject/kobject.go396
-rw-r--r--internal/kobject/kobject_test.go1806
-rw-r--r--internal/kobject/testdata/00-coldboot266
-rw-r--r--internal/kobject/testdata/01-move1
-rw-r--r--internal/kobject/testdata/02-cpu8
-rw-r--r--internal/kobject/testdata/03-loop19
-rw-r--r--internal/kobject/testdata/04-loop-detach2
-rw-r--r--internal/kobject/testdata/05-loop-remove18
9 files changed, 2533 insertions, 0 deletions
diff --git a/internal/kobject/event.go b/internal/kobject/event.go
index 33cb91b8..38728599 100644
--- a/internal/kobject/event.go
+++ b/internal/kobject/event.go
@@ -2,6 +2,7 @@ package kobject
import (
"errors"
+ "maps"
"strconv"
"strings"
"unsafe"
@@ -28,6 +29,22 @@ type Event struct {
Subsystem string `json:"subsystem"`
}
+// Clone returns a copy of e.
+func (e *Event) Clone() Event {
+ v := *e
+ v.Env = maps.Clone(e.Env)
+ return v
+}
+
+// makeColdboot allocates a new [Object] from e in [StateColdboot].
+func (e *Event) makeColdboot() *Object {
+ return &Object{
+ State: StateColdboot,
+ DevPath: e.DevPath,
+ Subsystem: e.Subsystem,
+ }
+}
+
// Populate populates e with the contents of a [uevent.Message].
//
// The ACTION and DEVPATH environment variables are ignored and assumed to be
diff --git a/internal/kobject/kobject.go b/internal/kobject/kobject.go
new file mode 100644
index 00000000..f8f040e3
--- /dev/null
+++ b/internal/kobject/kobject.go
@@ -0,0 +1,396 @@
+// Package kobject interprets uevent messages from a NETLINK_KOBJECT_UEVENT socket.
+package kobject
+
+import (
+ "context"
+ "fmt"
+ "maps"
+ "strconv"
+ "sync"
+
+ "hakurei.app/internal/uevent"
+)
+
+const (
+ // StateColdboot denotes an [Object] populated by a coldboot event. It is
+ // eligible for all event actions.
+ StateColdboot = iota
+ // StateNew denotes an [Object] previously populated by a [uevent.KOBJ_ADD]
+ // event, but has not yet been targeted by a [uevent.KOBJ_BIND] event, or
+ // has been targeted by a [uevent.KOBJ_UNBIND] event.
+ StateNew
+ // StateBound denotes an [Object] that has been targeted by a
+ // [uevent.KOBJ_BIND] and has not been targeted by a [uevent.KOBJ_UNBIND]
+ // after that.
+ StateBound
+)
+
+// Object represents a kernel object.
+type Object struct {
+ // Origin of the object.
+ State int `json:"-"`
+ // Set by [uevent.KOBJ_OFFLINE] and [uevent.KOBJ_ONLINE].
+ Offline bool
+
+ // alloc_uevent_skb: devpath
+ DevPath string `json:"devpath"`
+ // registered per-driver (optional)
+ ModAlias string `json:"modalias,omitempty"`
+ // dev_driver_uevent: drv->name (optional)
+ Driver string `json:"driver,omitempty"`
+
+ // SUBSYSTEM value set by the kernel.
+ Subsystem string `json:"subsystem"`
+
+ // Uninterpreted environment variable pairs. An entry missing a separator
+ // gains the value "\x00".
+ Env map[string]string `json:"env"`
+}
+
+// Clone returns a copy of o.
+func (o *Object) Clone() Object {
+ v := *o
+ v.Env = maps.Clone(o.Env)
+ return v
+}
+
+// GoString returns compound literal for the underlying value.
+func (o *Object) GoString() string {
+ return fmt.Sprintf("&%#v", *o)
+}
+
+// merge merges uninterpreted environment variable pairs from an [Event].
+func (o *Object) merge(env map[string]string) {
+ for k, v := range env {
+ if v == "\x00" {
+ continue
+ }
+
+ switch k {
+ case "MODALIAS":
+ o.ModAlias = v
+ continue
+
+ case "DRIVER":
+ o.Driver = v
+ continue
+
+ default:
+ if o.Env == nil {
+ o.Env = make(map[string]string)
+ }
+ o.Env[k] = v
+ }
+ }
+}
+
+// update updates o with pairs from env, optionally stripping visited pairs.
+func (o *Object) update(env map[string]string, strip bool) {
+ for k := range o.Env {
+ if v, ok := env[k]; ok {
+ if strip {
+ delete(env, k)
+ }
+ o.Env[k] = v
+ }
+ }
+}
+
+// State processes a stream of [Event] populated from [uevent.Message] received
+// from a NETLINK_KOBJECT_UEVENT socket and presents an efficient representation
+// of kernel state.
+type State struct {
+ // Next expected SEQNUM.
+ seq uint64
+ // DevPath to environment variables.
+ uevent map[string]*Object
+ // Synchronises access to uevent and its objects.
+ ueventMu sync.RWMutex
+ // UUID for synthetic [uevent.Coldboot] events.
+ coldboot uevent.UUID
+ // Called on [uevent.KOBJ_CHANGE] with stripped environment variables.
+ handleChange func(o *Object, env map[string]string)
+ // Reports errors populating [Event] from [uevent.Message]. A user-supplied
+ // nil value is replaced with a noop.
+ reportErr func(error)
+}
+
+// New returns the address of a new [State].
+func New(
+ coldboot uevent.UUID,
+ handleChange func(o *Object, env map[string]string),
+ reportErr func(error),
+) *State {
+ return &State{
+ uevent: make(map[string]*Object),
+ coldboot: coldboot,
+ handleChange: handleChange,
+ reportErr: reportErr,
+ }
+}
+
+// UnexpectedColdbootError is reported by [State.Consume] for a coldboot event
+// with action other than the expected [uevent.KOBJ_ADD].
+type UnexpectedColdbootError Event
+
+func (e UnexpectedColdbootError) Error() string {
+ return "unexpected " + e.Action.String() + " coldboot event"
+}
+
+// DuplicateAddError is reported by [State.Consume] for a [uevent.KOBJ_ADD]
+// event on a still-existing entry that was not the result of a coldboot.
+type DuplicateAddError Event
+
+func (e DuplicateAddError) Error() string {
+ return "duplicate add event on devpath " + strconv.Quote(e.DevPath)
+}
+
+// TargetError is reported by [State.Consume] for an event on a nonexistent
+// entry. This is generally only possible before coldboot completes.
+type TargetError Event
+
+func (e TargetError) Error() string {
+ return "unexpected " + e.Action.String() +
+ " event on devpath " + strconv.Quote(e.DevPath)
+}
+
+// RemoveStateError is reported by [State.Consume] for a [uevent.KOBJ_REMOVE]
+// event targeting an entry in a state other than [StateColdboot] and [StateNew].
+type RemoveStateError Object
+
+func (e RemoveStateError) Error() string {
+ return "remove event targeting devpath " + strconv.Quote(e.DevPath) +
+ " in state " + strconv.Itoa(e.State)
+}
+
+// BindStateError is reported by [State.Consume] for a [uevent.KOBJ_BIND] event
+// targeting an entry in a state other than [StateColdboot] and [StateNew].
+type BindStateError Object
+
+func (e BindStateError) Error() string {
+ return "bind event targeting devpath " + strconv.Quote(e.DevPath) +
+ " in state " + strconv.Itoa(e.State)
+}
+
+// UnbindStateError is reported by [State.Consume] for a [uevent.KOBJ_UNBIND]
+// event targeting an entry in a state other than [StateBound].
+type UnbindStateError Object
+
+func (e UnbindStateError) Error() string {
+ return "unbind event targeting devpath " + strconv.Quote(e.DevPath) +
+ " in state " + strconv.Itoa(e.State)
+}
+
+// MalformedMoveError is reported by [State.Consume] for a [uevent.KOBJ_MOVE]
+// event missing the DEVPATH_OLD environment variable.
+type MalformedMoveError Event
+
+func (e MalformedMoveError) Error() string {
+ return "move event targeting devpath " + strconv.Quote(e.DevPath) +
+ " missing DEVPATH_OLD"
+}
+
+// UnexpectedOfflineError is reported by [State.Consume] for a
+// [uevent.KOBJ_OFFLINE] or [uevent.KOBJ_ONLINE] event targeting an already
+// offline or online object.
+type UnexpectedOfflineError Object
+
+func (e UnexpectedOfflineError) Error() string {
+ if e.Offline {
+ return "offline event targeting devpath " + strconv.Quote(e.DevPath)
+ }
+ return "online event targeting devpath " + strconv.Quote(e.DevPath)
+}
+
+// processEvent merges an event into s.
+func (s *State) processEvent(e *Event) {
+ s.ueventMu.Lock()
+ defer s.ueventMu.Unlock()
+
+ coldboot := e.Synth != nil
+ if e.Action != uevent.KOBJ_ADD && coldboot {
+ s.reportErr(UnexpectedColdbootError(e.Clone()))
+ return
+ }
+
+ switch e.Action {
+ case uevent.KOBJ_ADD:
+ if e.Synth == nil {
+ if o, ok := s.uevent[e.DevPath]; ok {
+ s.reportErr(DuplicateAddError(e.Clone()))
+ o.merge(e.Env)
+ return
+ }
+ }
+ o := e.makeColdboot()
+ if !coldboot {
+ o.State = StateNew
+ }
+ o.merge(e.Env)
+ s.uevent[e.DevPath] = o
+ return
+
+ case uevent.KOBJ_REMOVE:
+ if o, ok := s.uevent[e.DevPath]; !ok {
+ s.reportErr(TargetError(e.Clone()))
+ return
+ } else if o.State != StateColdboot && o.State != StateNew {
+ s.reportErr(RemoveStateError(o.Clone()))
+ }
+ delete(s.uevent, e.DevPath)
+ return
+
+ case uevent.KOBJ_CHANGE:
+ o, ok := s.uevent[e.DevPath]
+ if !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // this suffers from the coldboot race window similar to KOBJ_MOVE,
+ // however this action combines driver-specific and change-specific
+ // environment variables and combines them with environment
+ // variables meant to convey state of the kobject, and it is not
+ // possible to reliably separate them, so this fallback avoids the
+ // race at the cost of including some garbage in tracked state
+ o = e.makeColdboot()
+ o.merge(e.Env)
+ s.uevent[e.DevPath] = o
+ return
+ }
+ o.update(e.Env, true)
+ if s.handleChange != nil {
+ s.handleChange(o, e.Env)
+ }
+ return
+
+ case uevent.KOBJ_MOVE:
+ var o *Object
+ if old, ok := e.Env["DEVPATH_OLD"]; !ok {
+ s.reportErr(MalformedMoveError(e.Clone()))
+ // not reached
+ o = e.makeColdboot()
+ } else if o, ok = s.uevent[old]; !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // this generally happens during coldboot, dropping the event here
+ // may cause inconsistent state if the coldboot event for this
+ // object was generated before the bind event
+ delete(e.Env, "DEVPATH_OLD")
+ o = e.makeColdboot()
+ } else {
+ delete(s.uevent, old)
+ delete(e.Env, "DEVPATH_OLD")
+ }
+ o.merge(e.Env)
+ s.uevent[e.DevPath] = o
+ o.DevPath = e.DevPath
+ return
+
+ case uevent.KOBJ_ONLINE:
+ o, ok := s.uevent[e.DevPath]
+ if !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // coldboot race window similar to an unexpected KOBJ_MOVE
+ o = e.makeColdboot()
+ s.uevent[e.DevPath] = o
+ o.merge(e.Env)
+ }
+ if !o.Offline {
+ s.reportErr(UnexpectedOfflineError(o.Clone()))
+ }
+ o.Offline = false
+ return
+
+ case uevent.KOBJ_OFFLINE:
+ o, ok := s.uevent[e.DevPath]
+ if !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // coldboot race window similar to an unexpected KOBJ_MOVE
+ o = e.makeColdboot()
+ s.uevent[e.DevPath] = o
+ o.merge(e.Env)
+ }
+ if o.Offline {
+ s.reportErr(UnexpectedOfflineError(o.Clone()))
+ }
+ o.Offline = true
+ return
+
+ case uevent.KOBJ_BIND:
+ o, ok := s.uevent[e.DevPath]
+ if !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // coldboot race window similar to an unexpected KOBJ_MOVE
+ o = e.makeColdboot()
+ s.uevent[e.DevPath] = o
+ }
+ if o.State != StateColdboot && o.State != StateNew {
+ s.reportErr(BindStateError(o.Clone()))
+ }
+ o.State = StateBound
+ o.merge(e.Env)
+ return
+
+ case uevent.KOBJ_UNBIND:
+ o, ok := s.uevent[e.DevPath]
+ if !ok {
+ s.reportErr(TargetError(e.Clone()))
+ // coldboot race window similar to an unexpected KOBJ_MOVE, but does
+ // not result in inconsistent state if dropped
+ return
+ }
+ if o.State != StateBound {
+ s.reportErr(UnbindStateError(o.Clone()))
+ }
+ o.State = StateNew
+ o.Driver = ""
+ return
+
+ default: // not reached
+ s.reportErr(fmt.Errorf("invalid action %d", e.Action))
+ return
+ }
+}
+
+// BadSequenceError is reported by [State.Consume] for an unexpected SEQNUM.
+type BadSequenceError struct{ Got, Want uint64 }
+
+func (e BadSequenceError) Error() string {
+ return "SEQNUM=" + strconv.FormatUint(e.Got, 10) +
+ ", want " + strconv.FormatUint(e.Want, 10)
+}
+
+// Consume receives uevent messages and updates s to reflect state of kernel.
+func (s *State) Consume(ctx context.Context, events <-chan *uevent.Message) {
+ if s.uevent == nil {
+ s.uevent = make(map[string]*Object)
+ }
+ if s.reportErr == nil {
+ s.reportErr = func(error) {}
+ }
+
+ var e Event
+ for {
+ select {
+ case <-ctx.Done():
+ return
+
+ case m, ok := <-events:
+ if !ok {
+ return
+ }
+ e.Populate(s.reportErr, m)
+
+ // skip external synthetic event
+ if e.Synth != nil && *e.Synth != s.coldboot {
+ continue
+ }
+
+ if s.seq == 0 {
+ s.seq = e.Sequence
+ }
+ if s.seq != e.Sequence {
+ s.reportErr(BadSequenceError{e.Sequence, s.seq})
+ }
+ s.seq++
+ s.processEvent(&e)
+ }
+ }
+}
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
+ }
+}
diff --git a/internal/kobject/testdata/00-coldboot b/internal/kobject/testdata/00-coldboot
new file mode 100644
index 00000000..608fe2e7
--- /dev/null
+++ b/internal/kobject/testdata/00-coldboot
@@ -0,0 +1,266 @@
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXPWRBN:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXPWRBN:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXPWRBN:","SEQNUM=777"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXPWRBN:00/wakeup/wakeup7","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=778"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00/LNXCPU:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXCPU:","SEQNUM=779"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0010:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:ACPI0010:PNP0A05:","SEQNUM=780"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0103:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0103:","SEQNUM=781"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=782"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=783"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/PNP0A06:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A06:","SEQNUM=784"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/QEMU0002:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:QEMU0002:","SEQNUM=785"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=786"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:00/wakeup/wakeup0","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=787"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0303:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0303:","SEQNUM=788"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0400:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0400:","SEQNUM=789"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0501:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0501:","SEQNUM=790"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00/device:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=791"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0700:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0700:","SEQNUM=792"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0B00:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0B00:","SEQNUM=793"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/PNP0F13:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0F13:","SEQNUM=794"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=795"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:01/wakeup/wakeup1","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=796"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=797"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:03/wakeup/wakeup2","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=798"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=799"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:04/wakeup/wakeup3","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=800"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=801"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:05/wakeup/wakeup4","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=802"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=803"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:06/wakeup/wakeup5","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=804"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=805"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=806"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:09","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=807"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0a","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=808"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0b","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=809"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0c","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=810"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0d","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=811"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0e","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=812"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:0f","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=813"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:10","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=814"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:11","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=815"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:12","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=816"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:13","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=817"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:14","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=818"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:15","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=819"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:16","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=820"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:17","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=821"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:18","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=822"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:19","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=823"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1a","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=824"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1b","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=825"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1c","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=826"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1d","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=827"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=828"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1f","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=829"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:20","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=830"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:21","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=831"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:22","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=832"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0A03:","SEQNUM=833"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/wakeup/wakeup6","SUBSYSTEM=wakeup","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=834"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=835"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=836"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:02","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=837"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:03","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=838"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0C0F:04","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0C0F:","SEQNUM=839"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYBUS:","SEQNUM=840"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:01","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:01","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYBUS:","SEQNUM=841"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00","SUBSYSTEM=acpi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:LNXSYSTM:","SEQNUM=842"]}
+{"action":"add","devpath":"/devices/breakpoint","env":["ACTION=add","DEVPATH=/devices/breakpoint","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=843"]}
+{"action":"add","devpath":"/devices/cpu","env":["ACTION=add","DEVPATH=/devices/cpu","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=844"]}
+{"action":"add","devpath":"/devices/kprobe","env":["ACTION=add","DEVPATH=/devices/kprobe","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=845"]}
+{"action":"add","devpath":"/devices/msr","env":["ACTION=add","DEVPATH=/devices/msr","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=846"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:00.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:00.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=60000","PCI_ID=8086:1237","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:00.0","MODALIAS=pci:v00008086d00001237sv00001AF4sd00001100bc06sc00i00","SEQNUM=847"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=60100","PCI_ID=8086:7000","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.0","MODALIAS=pci:v00008086d00007000sv00001AF4sd00001100bc06sc01i00","SEQNUM=848"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/ata_port/ata1","SUBSYSTEM=ata_port","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=849"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/host0/scsi_host/host0","SUBSYSTEM=scsi_host","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=850"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/host0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/host0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_host","SEQNUM=851"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/ata_link/link1","SUBSYSTEM=ata_link","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=852"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.0/ata_device/dev1.0","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=853"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata1/link1/dev1.1/ata_device/dev1.1","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=854"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/ata_port/ata2","SUBSYSTEM=ata_port","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=855"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/scsi_host/host1","SUBSYSTEM=scsi_host","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=856"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/bsg/1:0:0:0","SUBSYSTEM=bsg","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=251","MINOR=0","DEVNAME=bsg/1:0:0:0","SEQNUM=857"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0/scsi_device/1:0:0:0","env":["ACTION=add","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","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=858"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0/1:0:0:0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_device","MODALIAS=scsi:t-0x05","SEQNUM=859"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1/target1:0:0","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_target","SEQNUM=860"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/host1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/host1","SUBSYSTEM=scsi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=scsi_host","SEQNUM=861"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/ata_link/link2","SUBSYSTEM=ata_link","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=862"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.0/ata_device/dev2.0","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=863"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1/ata2/link2/dev2.1/ata_device/dev2.1","SUBSYSTEM=ata_device","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=864"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.1","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=ata_piix","PCI_CLASS=10180","PCI_ID=8086:7010","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.1","MODALIAS=pci:v00008086d00007010sv00001AF4sd00001100bc01sc01i80","SEQNUM=865"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:01.3","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:01.3","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=68000","PCI_ID=8086:7113","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:01.3","MODALIAS=pci:v00008086d00007113sv00001AF4sd00001100bc06sc80i00","SEQNUM=866"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:02.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:02.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","PCI_CLASS=20000","PCI_ID=8086:100E","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:02.0","MODALIAS=pci:v00008086d0000100Esv00001AF4sd00001100bc02sc00i00","SEQNUM=867"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0","SUBSYSTEM=pci","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=virtio-pci","PCI_CLASS=10000","PCI_ID=1AF4:1001","PCI_SUBSYS_ID=1AF4:0002","PCI_SLOT_NAME=0000:00:03.0","MODALIAS=pci:v00001AF4d00001001sv00001AF4sd00000002bc01sc00i00","SEQNUM=868"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0/virtio0/block/vda","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0/virtio0/block/vda","SUBSYSTEM=block","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=254","MINOR=0","DEVNAME=vda","DEVTYPE=disk","DISKSEQ=1","SEQNUM=869"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:03.0/virtio0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:03.0/virtio0","SUBSYSTEM=virtio","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=virtio_blk","MODALIAS=virtio:d00000002v00001AF4","SEQNUM=870"]}
+{"action":"add","devpath":"/devices/pci0000:00/QEMU0002:00","env":["ACTION=add","DEVPATH=/devices/pci0000:00/QEMU0002:00","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:QEMU0002:","SEQNUM=871"]}
+{"action":"add","devpath":"/devices/pci0000:00/pci_bus/0000:00","env":["ACTION=add","DEVPATH=/devices/pci0000:00/pci_bus/0000:00","SUBSYSTEM=pci_bus","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=872"]}
+{"action":"add","devpath":"/devices/platform/PNP0103:00","env":["ACTION=add","DEVPATH=/devices/platform/PNP0103:00","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=acpi:PNP0103:","SEQNUM=873"]}
+{"action":"add","devpath":"/devices/platform/pcspkr","env":["ACTION=add","DEVPATH=/devices/platform/pcspkr","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MODALIAS=platform:pcspkr","SEQNUM=874"]}
+{"action":"add","devpath":"/devices/platform/reg-dummy/regulator/regulator.0","env":["ACTION=add","DEVPATH=/devices/platform/reg-dummy/regulator/regulator.0","SUBSYSTEM=regulator","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=875"]}
+{"action":"add","devpath":"/devices/platform/reg-dummy","env":["ACTION=add","DEVPATH=/devices/platform/reg-dummy","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=reg-dummy","MODALIAS=platform:reg-dummy","SEQNUM=876"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.1/tty/ttyS1","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=65","DEVNAME=ttyS1","SEQNUM=877"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.1","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.1","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=878"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.2/tty/ttyS2","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=66","DEVNAME=ttyS2","SEQNUM=879"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.2","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.2","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=880"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.3/tty/ttyS3","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=67","DEVNAME=ttyS3","SEQNUM=881"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0/serial8250:0.3","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0/serial8250:0.3","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=882"]}
+{"action":"add","devpath":"/devices/platform/serial8250/serial8250:0","env":["ACTION=add","DEVPATH=/devices/platform/serial8250/serial8250:0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=ctrl","DRIVER=ctrl","SEQNUM=883"]}
+{"action":"add","devpath":"/devices/platform/serial8250","env":["ACTION=add","DEVPATH=/devices/platform/serial8250","SUBSYSTEM=platform","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=serial8250","MODALIAS=platform:serial8250","SEQNUM=884"]}
+{"action":"add","devpath":"/devices/pnp0/00:00","env":["ACTION=add","DEVPATH=/devices/pnp0/00:00","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=885"]}
+{"action":"add","devpath":"/devices/pnp0/00:01","env":["ACTION=add","DEVPATH=/devices/pnp0/00:01","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=886"]}
+{"action":"add","devpath":"/devices/pnp0/00:02","env":["ACTION=add","DEVPATH=/devices/pnp0/00:02","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=887"]}
+{"action":"add","devpath":"/devices/pnp0/00:03","env":["ACTION=add","DEVPATH=/devices/pnp0/00:03","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=888"]}
+{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0/00:04:0.0/tty/ttyS0","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=64","DEVNAME=ttyS0","SEQNUM=889"]}
+{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0/00:04:0.0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0/00:04:0.0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=port","DRIVER=port","SEQNUM=890"]}
+{"action":"add","devpath":"/devices/pnp0/00:04/00:04:0","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04/00:04:0","SUBSYSTEM=serial-base","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DEVTYPE=ctrl","DRIVER=ctrl","SEQNUM=891"]}
+{"action":"add","devpath":"/devices/pnp0/00:04","env":["ACTION=add","DEVPATH=/devices/pnp0/00:04","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=serial","SEQNUM=892"]}
+{"action":"add","devpath":"/devices/pnp0/00:05","env":["ACTION=add","DEVPATH=/devices/pnp0/00:05","SUBSYSTEM=pnp","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=893"]}
+{"action":"add","devpath":"/devices/software","env":["ACTION=add","DEVPATH=/devices/software","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=894"]}
+{"action":"add","devpath":"/devices/system/clockevents/broadcast","env":["ACTION=add","DEVPATH=/devices/system/clockevents/broadcast","SUBSYSTEM=clockevents","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=895"]}
+{"action":"add","devpath":"/devices/system/clockevents/clockevent0","env":["ACTION=add","DEVPATH=/devices/system/clockevents/clockevent0","SUBSYSTEM=clockevents","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=896"]}
+{"action":"add","devpath":"/devices/system/clocksource/clocksource0","env":["ACTION=add","DEVPATH=/devices/system/clocksource/clocksource0","SUBSYSTEM=clocksource","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=897"]}
+{"action":"add","devpath":"/devices/system/container/PNP0A06:00","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:00","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=898"]}
+{"action":"add","devpath":"/devices/system/container/PNP0A06:01","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:01","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=899"]}
+{"action":"add","devpath":"/devices/system/container/PNP0A06:02","env":["ACTION=add","DEVPATH=/devices/system/container/PNP0A06:02","SUBSYSTEM=container","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=900"]}
+{"action":"add","devpath":"/devices/system/cpu/cpu0","env":["ACTION=add","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","DRIVER=processor","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","SEQNUM=901"]}
+{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=902"]}
+{"action":"add","devpath":"/devices/system/memory/memory0","env":["ACTION=add","DEVPATH=/devices/system/memory/memory0","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=903"]}
+{"action":"add","devpath":"/devices/system/memory/memory1","env":["ACTION=add","DEVPATH=/devices/system/memory/memory1","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=904"]}
+{"action":"add","devpath":"/devices/system/memory/memory2","env":["ACTION=add","DEVPATH=/devices/system/memory/memory2","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=905"]}
+{"action":"add","devpath":"/devices/system/memory/memory3","env":["ACTION=add","DEVPATH=/devices/system/memory/memory3","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=906"]}
+{"action":"add","devpath":"/devices/system/memory/memory4","env":["ACTION=add","DEVPATH=/devices/system/memory/memory4","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=907"]}
+{"action":"add","devpath":"/devices/system/memory/memory5","env":["ACTION=add","DEVPATH=/devices/system/memory/memory5","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=908"]}
+{"action":"add","devpath":"/devices/system/memory/memory6","env":["ACTION=add","DEVPATH=/devices/system/memory/memory6","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=909"]}
+{"action":"add","devpath":"/devices/system/memory/memory7","env":["ACTION=add","DEVPATH=/devices/system/memory/memory7","SUBSYSTEM=memory","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=910"]}
+{"action":"add","devpath":"/devices/system/node/node0","env":["ACTION=add","DEVPATH=/devices/system/node/node0","SUBSYSTEM=node","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=911"]}
+{"action":"add","devpath":"/devices/tracepoint","env":["ACTION=add","DEVPATH=/devices/tracepoint","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=912"]}
+{"action":"add","devpath":"/devices/uprobe","env":["ACTION=add","DEVPATH=/devices/uprobe","SUBSYSTEM=event_source","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=913"]}
+{"action":"add","devpath":"/devices/virtual/bdi/254:0","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/254:0","SUBSYSTEM=bdi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=914"]}
+{"action":"add","devpath":"/devices/virtual/devlink/:ata2--scsi:1:0:0:0","env":["ACTION=add","DEVPATH=/devices/virtual/devlink/:ata2--scsi:1:0:0:0","SUBSYSTEM=devlink","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=915"]}
+{"action":"add","devpath":"/devices/virtual/dmi/id","env":["ACTION=add","DEVPATH=/devices/virtual/dmi/id","SUBSYSTEM=dmi","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","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:","SEQNUM=916"]}
+{"action":"add","devpath":"/devices/virtual/mem/full","env":["ACTION=add","DEVPATH=/devices/virtual/mem/full","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=7","DEVNAME=full","DEVMODE=0666","SEQNUM=917"]}
+{"action":"add","devpath":"/devices/virtual/mem/kmsg","env":["ACTION=add","DEVPATH=/devices/virtual/mem/kmsg","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=11","DEVNAME=kmsg","DEVMODE=0644","SEQNUM=918"]}
+{"action":"add","devpath":"/devices/virtual/mem/mem","env":["ACTION=add","DEVPATH=/devices/virtual/mem/mem","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=1","DEVNAME=mem","SEQNUM=919"]}
+{"action":"add","devpath":"/devices/virtual/mem/null","env":["ACTION=add","DEVPATH=/devices/virtual/mem/null","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=3","DEVNAME=null","DEVMODE=0666","SEQNUM=920"]}
+{"action":"add","devpath":"/devices/virtual/mem/port","env":["ACTION=add","DEVPATH=/devices/virtual/mem/port","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=4","DEVNAME=port","SEQNUM=921"]}
+{"action":"add","devpath":"/devices/virtual/mem/random","env":["ACTION=add","DEVPATH=/devices/virtual/mem/random","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=8","DEVNAME=random","DEVMODE=0666","SEQNUM=922"]}
+{"action":"add","devpath":"/devices/virtual/mem/urandom","env":["ACTION=add","DEVPATH=/devices/virtual/mem/urandom","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=9","DEVNAME=urandom","DEVMODE=0666","SEQNUM=923"]}
+{"action":"add","devpath":"/devices/virtual/mem/zero","env":["ACTION=add","DEVPATH=/devices/virtual/mem/zero","SUBSYSTEM=mem","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=1","MINOR=5","DEVNAME=zero","DEVMODE=0666","SEQNUM=924"]}
+{"action":"add","devpath":"/devices/virtual/memory_tiering/memory_tier4","env":["ACTION=add","DEVPATH=/devices/virtual/memory_tiering/memory_tier4","SUBSYSTEM=memory_tiering","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=925"]}
+{"action":"add","devpath":"/devices/virtual/misc/cpu_dma_latency","env":["ACTION=add","DEVPATH=/devices/virtual/misc/cpu_dma_latency","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=259","DEVNAME=cpu_dma_latency","SEQNUM=926"]}
+{"action":"add","devpath":"/devices/virtual/misc/hpet","env":["ACTION=add","DEVPATH=/devices/virtual/misc/hpet","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=228","DEVNAME=hpet","SEQNUM=927"]}
+{"action":"add","devpath":"/devices/virtual/misc/snapshot","env":["ACTION=add","DEVPATH=/devices/virtual/misc/snapshot","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=231","DEVNAME=snapshot","SEQNUM=928"]}
+{"action":"add","devpath":"/devices/virtual/misc/udmabuf","env":["ACTION=add","DEVPATH=/devices/virtual/misc/udmabuf","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=258","DEVNAME=udmabuf","SEQNUM=929"]}
+{"action":"add","devpath":"/devices/virtual/misc/userfaultfd","env":["ACTION=add","DEVPATH=/devices/virtual/misc/userfaultfd","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=257","DEVNAME=userfaultfd","SEQNUM=930"]}
+{"action":"add","devpath":"/devices/virtual/misc/vga_arbiter","env":["ACTION=add","DEVPATH=/devices/virtual/misc/vga_arbiter","SUBSYSTEM=misc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=10","MINOR=256","DEVNAME=vga_arbiter","SEQNUM=931"]}
+{"action":"add","devpath":"/devices/virtual/net/lo","env":["ACTION=add","DEVPATH=/devices/virtual/net/lo","SUBSYSTEM=net","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","INTERFACE=lo","IFINDEX=1","SEQNUM=932"]}
+{"action":"add","devpath":"/devices/virtual/thermal/cooling_device0","env":["ACTION=add","DEVPATH=/devices/virtual/thermal/cooling_device0","SUBSYSTEM=thermal","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=933"]}
+{"action":"add","devpath":"/devices/virtual/tty/console","env":["ACTION=add","DEVPATH=/devices/virtual/tty/console","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=1","DEVNAME=console","SEQNUM=934"]}
+{"action":"add","devpath":"/devices/virtual/tty/ptmx","env":["ACTION=add","DEVPATH=/devices/virtual/tty/ptmx","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=2","DEVNAME=ptmx","DEVMODE=0666","SEQNUM=935"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=5","MINOR=0","DEVNAME=tty","DEVMODE=0666","SEQNUM=936"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty0","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty0","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=0","DEVNAME=tty0","SEQNUM=937"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty1","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty1","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=1","DEVNAME=tty1","SEQNUM=938"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty10","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty10","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=10","DEVNAME=tty10","SEQNUM=939"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty11","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty11","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=11","DEVNAME=tty11","SEQNUM=940"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty12","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty12","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=12","DEVNAME=tty12","SEQNUM=941"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty13","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty13","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=13","DEVNAME=tty13","SEQNUM=942"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty14","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty14","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=14","DEVNAME=tty14","SEQNUM=943"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty15","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty15","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=15","DEVNAME=tty15","SEQNUM=944"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty16","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty16","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=16","DEVNAME=tty16","SEQNUM=945"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty17","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty17","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=17","DEVNAME=tty17","SEQNUM=946"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty18","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty18","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=18","DEVNAME=tty18","SEQNUM=947"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty19","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty19","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=19","DEVNAME=tty19","SEQNUM=948"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty2","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty2","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=2","DEVNAME=tty2","SEQNUM=949"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty20","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty20","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=20","DEVNAME=tty20","SEQNUM=950"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty21","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty21","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=21","DEVNAME=tty21","SEQNUM=951"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty22","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty22","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=22","DEVNAME=tty22","SEQNUM=952"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty23","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty23","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=23","DEVNAME=tty23","SEQNUM=953"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty24","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty24","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=24","DEVNAME=tty24","SEQNUM=954"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty25","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty25","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=25","DEVNAME=tty25","SEQNUM=955"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty26","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty26","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=26","DEVNAME=tty26","SEQNUM=956"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty27","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty27","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=27","DEVNAME=tty27","SEQNUM=957"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty28","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty28","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=28","DEVNAME=tty28","SEQNUM=958"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty29","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty29","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=29","DEVNAME=tty29","SEQNUM=959"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty3","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty3","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=3","DEVNAME=tty3","SEQNUM=960"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty30","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty30","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=30","DEVNAME=tty30","SEQNUM=961"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty31","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty31","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=31","DEVNAME=tty31","SEQNUM=962"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty32","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty32","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=32","DEVNAME=tty32","SEQNUM=963"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty33","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty33","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=33","DEVNAME=tty33","SEQNUM=964"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty34","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty34","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=34","DEVNAME=tty34","SEQNUM=965"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty35","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty35","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=35","DEVNAME=tty35","SEQNUM=966"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty36","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty36","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=36","DEVNAME=tty36","SEQNUM=967"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty37","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty37","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=37","DEVNAME=tty37","SEQNUM=968"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty38","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty38","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=38","DEVNAME=tty38","SEQNUM=969"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty39","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty39","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=39","DEVNAME=tty39","SEQNUM=970"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty4","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty4","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=4","DEVNAME=tty4","SEQNUM=971"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty40","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty40","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=40","DEVNAME=tty40","SEQNUM=972"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty41","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty41","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=41","DEVNAME=tty41","SEQNUM=973"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty42","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty42","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=42","DEVNAME=tty42","SEQNUM=974"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty43","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty43","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=43","DEVNAME=tty43","SEQNUM=975"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty44","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty44","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=44","DEVNAME=tty44","SEQNUM=976"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty45","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty45","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=45","DEVNAME=tty45","SEQNUM=977"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty46","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty46","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=46","DEVNAME=tty46","SEQNUM=978"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty47","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty47","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=47","DEVNAME=tty47","SEQNUM=979"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty48","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty48","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=48","DEVNAME=tty48","SEQNUM=980"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty49","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty49","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=49","DEVNAME=tty49","SEQNUM=981"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty5","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty5","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=5","DEVNAME=tty5","SEQNUM=982"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty50","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty50","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=50","DEVNAME=tty50","SEQNUM=983"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty51","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty51","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=51","DEVNAME=tty51","SEQNUM=984"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty52","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty52","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=52","DEVNAME=tty52","SEQNUM=985"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty53","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty53","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=53","DEVNAME=tty53","SEQNUM=986"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty54","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty54","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=54","DEVNAME=tty54","SEQNUM=987"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty55","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty55","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=55","DEVNAME=tty55","SEQNUM=988"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty56","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty56","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=56","DEVNAME=tty56","SEQNUM=989"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty57","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty57","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=57","DEVNAME=tty57","SEQNUM=990"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty58","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty58","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=58","DEVNAME=tty58","SEQNUM=991"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty59","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty59","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=59","DEVNAME=tty59","SEQNUM=992"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty6","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty6","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=6","DEVNAME=tty6","SEQNUM=993"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty60","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty60","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=60","DEVNAME=tty60","SEQNUM=994"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty61","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty61","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=61","DEVNAME=tty61","SEQNUM=995"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty62","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty62","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=62","DEVNAME=tty62","SEQNUM=996"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty63","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty63","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=63","DEVNAME=tty63","SEQNUM=997"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty7","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty7","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=7","DEVNAME=tty7","SEQNUM=998"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty8","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty8","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=8","DEVNAME=tty8","SEQNUM=999"]}
+{"action":"add","devpath":"/devices/virtual/tty/tty9","env":["ACTION=add","DEVPATH=/devices/virtual/tty/tty9","SUBSYSTEM=tty","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=4","MINOR=9","DEVNAME=tty9","SEQNUM=1000"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcs","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcs","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=0","DEVNAME=vcs","SEQNUM=1001"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcs1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcs1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=1","DEVNAME=vcs1","SEQNUM=1002"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcsa","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsa","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=128","DEVNAME=vcsa","SEQNUM=1003"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcsa1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsa1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=129","DEVNAME=vcsa1","SEQNUM=1004"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcsu","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsu","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=64","DEVNAME=vcsu","SEQNUM=1005"]}
+{"action":"add","devpath":"/devices/virtual/vc/vcsu1","env":["ACTION=add","DEVPATH=/devices/virtual/vc/vcsu1","SUBSYSTEM=vc","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","MAJOR=7","MINOR=65","DEVNAME=vcsu1","SEQNUM=1006"]}
+{"action":"add","devpath":"/devices/virtual/vtconsole/vtcon0","env":["ACTION=add","DEVPATH=/devices/virtual/vtconsole/vtcon0","SUBSYSTEM=vtconsole","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1007"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/nvme-auth-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-auth-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1008"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/nvme-delete-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-delete-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1009"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/nvme-reset-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-reset-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1010"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/nvme-wq","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/nvme-wq","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1011"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/scsi_tmf_0","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/scsi_tmf_0","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1012"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/scsi_tmf_1","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/scsi_tmf_1","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1013"]}
+{"action":"add","devpath":"/devices/virtual/workqueue/writeback","env":["ACTION=add","DEVPATH=/devices/virtual/workqueue/writeback","SUBSYSTEM=workqueue","SYNTH_UUID=fe4d7c9d-b8c6-4a70-9ef1-3d8a58d18eed","SEQNUM=1014"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1015"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1016"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1017"]}
+{"action":"bind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1018"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1019"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1020"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1021"]}
+{"action":"bind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1022"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1023"]}
+{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","SEQNUM=1024"]}
+{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1025"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1026"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1027"]}
+{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","SEQNUM=1028"]}
+{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1029"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1030"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:07/wakeup/wakeup8","SUBSYSTEM=wakeup","SEQNUM=1031"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1032"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:04.0/virtio1","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:04.0/virtio1","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1033"]}
+{"action":"bind","devpath":"/devices/pci0000:00/0000:00:04.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:04.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:04.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1034"]}
+{"action":"add","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=add","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1035"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1036"]}
+{"action":"add","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=add","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1037"]}
+{"action":"bind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=bind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","DRIVER=virtio-pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1038"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0/virtio2","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0/virtio2","SUBSYSTEM=virtio","MODALIAS=virtio:d00000019v00001AF4","SEQNUM=1039"]}
+{"action":"unbind","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=unbind","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","SEQNUM=1040"]}
+{"action":"remove","devpath":"/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","env":["ACTION=remove","DEVPATH=/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:08/wakeup/wakeup9","SUBSYSTEM=wakeup","SEQNUM=1041"]}
+{"action":"remove","devpath":"/devices/pci0000:00/0000:00:05.0","env":["ACTION=remove","DEVPATH=/devices/pci0000:00/0000:00:05.0","SUBSYSTEM=pci","PCI_CLASS=40100","PCI_ID=1AF4:1059","PCI_SUBSYS_ID=1AF4:1100","PCI_SLOT_NAME=0000:00:05.0","MODALIAS=pci:v00001AF4d00001059sv00001AF4sd00001100bc04sc01i00","SEQNUM=1042"]}
diff --git a/internal/kobject/testdata/01-move b/internal/kobject/testdata/01-move
new file mode 100644
index 00000000..5f1d6792
--- /dev/null
+++ b/internal/kobject/testdata/01-move
@@ -0,0 +1 @@
+{"action":"move","devpath":"/devices/virtual/net/_lo","env":["ACTION=move","DEVPATH=/devices/virtual/net/_lo","SUBSYSTEM=net","DEVPATH_OLD=/devices/virtual/net/lo","INTERFACE=_lo","IFINDEX=1","SEQNUM=1043"]}
diff --git a/internal/kobject/testdata/02-cpu b/internal/kobject/testdata/02-cpu
new file mode 100644
index 00000000..1bed5946
--- /dev/null
+++ b/internal/kobject/testdata/02-cpu
@@ -0,0 +1,8 @@
+{"action":"remove","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=remove","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1044"]}
+{"action":"offline","devpath":"/devices/system/cpu/cpu0","env":["ACTION=offline","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","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,001C,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,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1045"]}
+{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1046"]}
+{"action":"online","devpath":"/devices/system/cpu/cpu0","env":["ACTION=online","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","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,001C,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,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1047"]}
+{"action":"remove","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=remove","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1048"]}
+{"action":"offline","devpath":"/devices/system/cpu/cpu0","env":["ACTION=offline","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","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,001C,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,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1049"]}
+{"action":"add","devpath":"/devices/system/machinecheck/machinecheck0","env":["ACTION=add","DEVPATH=/devices/system/machinecheck/machinecheck0","SUBSYSTEM=machinecheck","SEQNUM=1050"]}
+{"action":"online","devpath":"/devices/system/cpu/cpu0","env":["ACTION=online","DEVPATH=/devices/system/cpu/cpu0","SUBSYSTEM=cpu","DRIVER=processor","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,001C,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,00C1,00C8,00ED,00F3,010F,0115,0165,016C,0282\n","SEQNUM=1051"]}
diff --git a/internal/kobject/testdata/03-loop b/internal/kobject/testdata/03-loop
new file mode 100644
index 00000000..57d758e2
--- /dev/null
+++ b/internal/kobject/testdata/03-loop
@@ -0,0 +1,19 @@
+{"action":"add","devpath":"/devices/virtual/misc/loop-control","env":["ACTION=add","DEVPATH=/devices/virtual/misc/loop-control","SUBSYSTEM=misc","MAJOR=10","MINOR=237","DEVNAME=loop-control","SEQNUM=1052"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:0","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:0","SUBSYSTEM=bdi","SEQNUM=1053"]}
+{"action":"add","devpath":"/devices/virtual/block/loop0","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=2","SEQNUM=1054"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:1","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:1","SUBSYSTEM=bdi","SEQNUM=1055"]}
+{"action":"add","devpath":"/devices/virtual/block/loop1","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop1","SUBSYSTEM=block","MAJOR=7","MINOR=1","DEVNAME=loop1","DEVTYPE=disk","DISKSEQ=3","SEQNUM=1056"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:2","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:2","SUBSYSTEM=bdi","SEQNUM=1057"]}
+{"action":"add","devpath":"/devices/virtual/block/loop2","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop2","SUBSYSTEM=block","MAJOR=7","MINOR=2","DEVNAME=loop2","DEVTYPE=disk","DISKSEQ=4","SEQNUM=1058"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:3","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:3","SUBSYSTEM=bdi","SEQNUM=1059"]}
+{"action":"add","devpath":"/devices/virtual/block/loop3","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop3","SUBSYSTEM=block","MAJOR=7","MINOR=3","DEVNAME=loop3","DEVTYPE=disk","DISKSEQ=5","SEQNUM=1060"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:4","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:4","SUBSYSTEM=bdi","SEQNUM=1061"]}
+{"action":"add","devpath":"/devices/virtual/block/loop4","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop4","SUBSYSTEM=block","MAJOR=7","MINOR=4","DEVNAME=loop4","DEVTYPE=disk","DISKSEQ=6","SEQNUM=1062"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:5","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:5","SUBSYSTEM=bdi","SEQNUM=1063"]}
+{"action":"add","devpath":"/devices/virtual/block/loop5","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop5","SUBSYSTEM=block","MAJOR=7","MINOR=5","DEVNAME=loop5","DEVTYPE=disk","DISKSEQ=7","SEQNUM=1064"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:6","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:6","SUBSYSTEM=bdi","SEQNUM=1065"]}
+{"action":"add","devpath":"/devices/virtual/block/loop6","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop6","SUBSYSTEM=block","MAJOR=7","MINOR=6","DEVNAME=loop6","DEVTYPE=disk","DISKSEQ=8","SEQNUM=1066"]}
+{"action":"add","devpath":"/devices/virtual/bdi/7:7","env":["ACTION=add","DEVPATH=/devices/virtual/bdi/7:7","SUBSYSTEM=bdi","SEQNUM=1067"]}
+{"action":"add","devpath":"/devices/virtual/block/loop7","env":["ACTION=add","DEVPATH=/devices/virtual/block/loop7","SUBSYSTEM=block","MAJOR=7","MINOR=7","DEVNAME=loop7","DEVTYPE=disk","DISKSEQ=9","SEQNUM=1068"]}
+{"action":"add","devpath":"/module/loop","env":["ACTION=add","DEVPATH=/module/loop","SUBSYSTEM=module","SEQNUM=1069"]}
+{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1070"]}
diff --git a/internal/kobject/testdata/04-loop-detach b/internal/kobject/testdata/04-loop-detach
new file mode 100644
index 00000000..a9240a06
--- /dev/null
+++ b/internal/kobject/testdata/04-loop-detach
@@ -0,0 +1,2 @@
+{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1071"]}
+{"action":"change","devpath":"/devices/virtual/block/loop0","env":["ACTION=change","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","DISK_MEDIA_CHANGE=1","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=10","SEQNUM=1072"]}
diff --git a/internal/kobject/testdata/05-loop-remove b/internal/kobject/testdata/05-loop-remove
new file mode 100644
index 00000000..08cbbe9b
--- /dev/null
+++ b/internal/kobject/testdata/05-loop-remove
@@ -0,0 +1,18 @@
+{"action":"remove","devpath":"/devices/virtual/misc/loop-control","env":["ACTION=remove","DEVPATH=/devices/virtual/misc/loop-control","SUBSYSTEM=misc","MAJOR=10","MINOR=237","DEVNAME=loop-control","SEQNUM=1073"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:0","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:0","SUBSYSTEM=bdi","SEQNUM=1074"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop0","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop0","SUBSYSTEM=block","MAJOR=7","MINOR=0","DEVNAME=loop0","DEVTYPE=disk","DISKSEQ=11","SEQNUM=1075"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:1","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:1","SUBSYSTEM=bdi","SEQNUM=1076"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop1","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop1","SUBSYSTEM=block","MAJOR=7","MINOR=1","DEVNAME=loop1","DEVTYPE=disk","DISKSEQ=3","SEQNUM=1077"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:2","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:2","SUBSYSTEM=bdi","SEQNUM=1078"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop2","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop2","SUBSYSTEM=block","MAJOR=7","MINOR=2","DEVNAME=loop2","DEVTYPE=disk","DISKSEQ=4","SEQNUM=1079"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:3","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:3","SUBSYSTEM=bdi","SEQNUM=1080"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop3","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop3","SUBSYSTEM=block","MAJOR=7","MINOR=3","DEVNAME=loop3","DEVTYPE=disk","DISKSEQ=5","SEQNUM=1081"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:4","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:4","SUBSYSTEM=bdi","SEQNUM=1082"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop4","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop4","SUBSYSTEM=block","MAJOR=7","MINOR=4","DEVNAME=loop4","DEVTYPE=disk","DISKSEQ=6","SEQNUM=1083"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:5","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:5","SUBSYSTEM=bdi","SEQNUM=1084"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop5","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop5","SUBSYSTEM=block","MAJOR=7","MINOR=5","DEVNAME=loop5","DEVTYPE=disk","DISKSEQ=7","SEQNUM=1085"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:6","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:6","SUBSYSTEM=bdi","SEQNUM=1086"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop6","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop6","SUBSYSTEM=block","MAJOR=7","MINOR=6","DEVNAME=loop6","DEVTYPE=disk","DISKSEQ=8","SEQNUM=1087"]}
+{"action":"remove","devpath":"/devices/virtual/bdi/7:7","env":["ACTION=remove","DEVPATH=/devices/virtual/bdi/7:7","SUBSYSTEM=bdi","SEQNUM=1088"]}
+{"action":"remove","devpath":"/devices/virtual/block/loop7","env":["ACTION=remove","DEVPATH=/devices/virtual/block/loop7","SUBSYSTEM=block","MAJOR=7","MINOR=7","DEVNAME=loop7","DEVTYPE=disk","DISKSEQ=9","SEQNUM=1089"]}
+{"action":"remove","devpath":"/module/loop","env":["ACTION=remove","DEVPATH=/module/loop","SUBSYSTEM=module","SEQNUM=1090"]}