From 055234cd138691bb1931a665ea6bb51efbe7b61a Mon Sep 17 00:00:00 2001 From: Jelle van den Hooff Date: Thu, 5 Dec 2024 13:27:08 -0800 Subject: [PATCH] simulation: some socket logs --- internal/simulation/os_linux.go | 39 ++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/internal/simulation/os_linux.go b/internal/simulation/os_linux.go index 83cd613..f418fe7 100644 --- a/internal/simulation/os_linux.go +++ b/internal/simulation/os_linux.go @@ -1101,8 +1101,6 @@ func (l *LinuxOS) SysBind(fd int, addrPtr unsafe.Pointer, addrlen Socklen, invoc return err } - l.logfFor(invocation, "bind %d %s", fd, addr) - switch { case addr.Addr().Is4(): default: @@ -1114,6 +1112,23 @@ func (l *LinuxOS) SysBind(fd int, addrPtr unsafe.Pointer, addrlen Socklen, invoc return nil } +func addrAttr(addr unsafe.Pointer, addrlen Socklen) slog.Attr { + parsedAddr, parseErr := readAddr(addr, addrlen) + if parseErr != 0 { + return slog.Any("addr", parseErr) + } else { + return slog.Any("addr", parsedAddr) + } +} + +func (customSyscallLogger) LogEntrySysBind(s int, addr unsafe.Pointer, addrlen Socklen, syscall *syscallabi.Syscall) { + logSyscallEntry("SysBind", syscall, "fd", s, addrAttr(addr, addrlen)) +} + +func (customSyscallLogger) LogExitSysBind(s int, addr unsafe.Pointer, addrlen Socklen, syscall *syscallabi.Syscall, err error) { + logSyscallExit("SysBind", syscall, "err", err) +} + func (l *LinuxOS) SysListen(fd, backlog int, invocation *syscallabi.Syscall) error { l.mu.Lock() defer l.mu.Unlock() @@ -1326,8 +1341,6 @@ func (l *LinuxOS) SysGetsockname(fd int, rsa syscallabi.ValueView[RawSockaddrAny return syscall.EINVAL } - l.logfFor(invocation, "getsockname %d %d", fd, len.Get()) - fdInternal, ok := l.files[fd] if !ok { return syscall.EBADFD @@ -1356,6 +1369,14 @@ func (l *LinuxOS) SysGetsockname(fd int, rsa syscallabi.ValueView[RawSockaddrAny } } +func (customSyscallLogger) LogEntrySysGetsockname(fd int, rsa *RawSockaddrAny, addrlen *Socklen, syscall *syscallabi.Syscall) { + logSyscallEntry("SysGetsockname", syscall, "fd", fd) +} + +func (customSyscallLogger) LogExitSysGetsockname(fd int, rsa *RawSockaddrAny, addrlen *Socklen, syscall *syscallabi.Syscall, err error) { + logSyscallExit("SysGetsockname", syscall, addrAttr(unsafe.Pointer(rsa), *addrlen), "err", err) +} + func (l *LinuxOS) SysChdir(path string, invocation *syscallabi.Syscall) (err error) { l.mu.Lock() defer l.mu.Unlock() @@ -1517,8 +1538,6 @@ func (l *LinuxOS) SysConnect(fd int, addrPtr unsafe.Pointer, addrLen Socklen, in return errno } - l.logfFor(invocation, "connect %d %s", fd, addr) - switch { case addr.Addr().Is4(): default: @@ -1537,6 +1556,14 @@ func (l *LinuxOS) SysConnect(fd int, addrPtr unsafe.Pointer, addrLen Socklen, in return syscall.EINPROGRESS } +func (customSyscallLogger) LogEntrySysConnect(s int, addr unsafe.Pointer, addrlen Socklen, syscall *syscallabi.Syscall) { + logSyscallEntry("SysConnect", syscall, addrAttr(addr, addrlen)) +} + +func (customSyscallLogger) LogExitSysConnect(s int, addr unsafe.Pointer, addrlen Socklen, syscall *syscallabi.Syscall, err error) { + logSyscallExit("SysConnect", syscall, "err", err) +} + func (l *LinuxOS) SysGetrandom(ptr syscallabi.ByteSliceView, flags int, invocation *syscallabi.Syscall) (int, error) { // TODO: implement entirely in userspace?