diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-19 16:15:18 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-19 16:15:18 +0300 |
| commit | 843def4f5c23db050cccfae57a9acb5899c110f4 (patch) | |
| tree | d90d94c39ff59c7df7278f29f5402c58c391daec /internal/eventloop_runtime.go | |
| parent | 061fb2b2380752eed06a78d10567da172ea8e27c (diff) | |
x6: add pipe/eventfd fd-from-air syscall support
Diffstat (limited to 'internal/eventloop_runtime.go')
| -rw-r--r-- | internal/eventloop_runtime.go | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/internal/eventloop_runtime.go b/internal/eventloop_runtime.go index 94648e0..cce7299 100644 --- a/internal/eventloop_runtime.go +++ b/internal/eventloop_runtime.go @@ -147,6 +147,7 @@ func (e *eventLoop) initRawHandlers() { e.registerNamePathHandlers() e.registerMiscHandlers() e.registerSocketHandlers() + e.registerIPCHandlers() } // registerOpenHandlers wires enter/exit handlers for open-family events. @@ -301,6 +302,37 @@ func (e *eventLoop) registerSocketHandlers() { } } +func (e *eventLoop) registerIPCHandlers() { + e.rawHandlers[types.ENTER_PIPE_EVENT] = func(raw []byte, _ chan<- *event.Pair) { + pipeEv, ok := decodeRawEvent(e, types.ENTER_PIPE_EVENT, raw, types.NewPipeEventFast) + if !ok { + return + } + e.tracepointEntered(pipeEv) + } + e.rawHandlers[types.EXIT_PIPE_EVENT] = func(raw []byte, ch chan<- *event.Pair) { + pipeEv, ok := decodeRawEvent(e, types.EXIT_PIPE_EVENT, raw, types.NewPipeEventFast) + if !ok { + return + } + e.tracepointExited(pipeEv, ch) + } + e.rawHandlers[types.ENTER_EVENTFD_EVENT] = func(raw []byte, _ chan<- *event.Pair) { + eventfdEv, ok := decodeRawEvent(e, types.ENTER_EVENTFD_EVENT, raw, types.NewEventfdEventFast) + if !ok { + return + } + e.tracepointEntered(eventfdEv) + } + e.rawHandlers[types.EXIT_EVENTFD_EVENT] = func(raw []byte, ch chan<- *event.Pair) { + eventfdEv, ok := decodeRawEvent(e, types.EXIT_EVENTFD_EVENT, raw, types.NewEventfdEventFast) + if !ok { + return + } + e.tracepointExited(eventfdEv, ch) + } +} + func decodeRawEvent[T any](e *eventLoop, eventType types.EventType, raw []byte, decode func([]byte) *T) (*T, bool) { decoded := decode(raw) if decoded == nil { |
