aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/netlink/rtnl.go
diff options
context:
space:
mode:
authorOphestra <cat@gensokyo.uk>2026-03-23 15:16:21 +0900
committerOphestra <cat@gensokyo.uk>2026-03-23 16:39:25 +0900
commitd972cffe5a221cc585e2edfdd1d3514eab51271c (patch)
tree70c4d6fd0c2385011c65ae5084cdef3ac2fcd4bc /internal/netlink/rtnl.go
parentd8648304bb4208593be0c48b8b1b26c1caa8b3ea (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.go26
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.