diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-23 15:16:21 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-23 16:39:25 +0900 |
| commit | d972cffe5a221cc585e2edfdd1d3514eab51271c (patch) | |
| tree | 70c4d6fd0c2385011c65ae5084cdef3ac2fcd4bc /internal/netlink/rtnl.go | |
| parent | d8648304bb4208593be0c48b8b1b26c1caa8b3ea (diff) | |
internal/netlink: make full response available
The previous API makes it impossible to retrieve remaining messages in the current iteration.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/netlink/rtnl.go')
| -rw-r--r-- | internal/netlink/rtnl.go | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/internal/netlink/rtnl.go b/internal/netlink/rtnl.go index 1ed463b6..e6585bf8 100644 --- a/internal/netlink/rtnl.go +++ b/internal/netlink/rtnl.go @@ -18,23 +18,23 @@ func DialRoute() (*RouteConn, error) { } // rtnlConsume consumes a message from rtnetlink. -func rtnlConsume(msg *syscall.NetlinkMessage) error { - switch msg.Header.Type { - case syscall.NLMSG_DONE: - return Complete{} +func rtnlConsume(resp []syscall.NetlinkMessage) error { + for i := range resp { + switch resp[i].Header.Type { + case syscall.NLMSG_DONE: + return Complete{} - case syscall.NLMSG_ERROR: - if e := As[syscall.NlMsgerr](msg.Data); e != nil { - if e.Error == 0 { - return Complete{} + case syscall.NLMSG_ERROR: + if e := As[syscall.NlMsgerr](resp[i].Data); e != nil { + if e.Error == 0 { + return Complete{} + } + return syscall.Errno(-e.Error) } - return syscall.Errno(-e.Error) + return syscall.EBADE } - return syscall.EBADE - - default: - return nil } + return nil } // InAddr is equivalent to struct in_addr. |
