diff options
| author | Ophestra <cat@gensokyo.uk> | 2026-03-27 18:10:17 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2026-03-27 19:08:48 +0900 |
| commit | c61188649b757ba81c813ff2f7351a3d393cdce1 (patch) | |
| tree | 967945e572b47a0b0f5cbe9566cb579aec771517 /internal/netlink/rtnl.go | |
| parent | 6a87a9683821fa759915ffcbd59f37e9c2c98613 (diff) | |
internal/netlink: export generic connection
This enables abstractions around some families to be implemented in a separate package.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/netlink/rtnl.go')
| -rw-r--r-- | internal/netlink/rtnl.go | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/internal/netlink/rtnl.go b/internal/netlink/rtnl.go index 243bc27e..e370bae7 100644 --- a/internal/netlink/rtnl.go +++ b/internal/netlink/rtnl.go @@ -7,11 +7,14 @@ import ( ) // RouteConn represents a NETLINK_ROUTE socket. -type RouteConn struct{ *conn } +type RouteConn struct{ conn *Conn } + +// Close closes the underlying socket. +func (c *RouteConn) Close() error { return c.conn.Close() } // DialRoute returns the address of a newly connected [RouteConn]. func DialRoute() (*RouteConn, error) { - c, err := dial(syscall.NETLINK_ROUTE, 0) + c, err := Dial(syscall.NETLINK_ROUTE, 0) if err != nil { return nil, err } @@ -19,9 +22,9 @@ func DialRoute() (*RouteConn, error) { } // rtnlConsume consumes a message from rtnetlink. -func (c *conn) rtnlConsume(resp []syscall.NetlinkMessage) error { +func (c *RouteConn) rtnlConsume(resp []syscall.NetlinkMessage) error { for i := range resp { - if err := c.checkReply(&resp[i].Header); err != nil { + if err := c.conn.checkReply(&resp[i].Header); err != nil { return err } @@ -62,7 +65,7 @@ func (c *RouteConn) writeIfAddrmsg( msg *syscall.IfAddrmsg, attrs ...RtAttrMsg[InAddr], ) bool { - c.typ, c.flags = typ, syscall.NLM_F_REQUEST|syscall.NLM_F_ACK|flags + c.conn.typ, c.conn.flags = typ, syscall.NLM_F_REQUEST|syscall.NLM_F_ACK|flags if !add(c.conn, msg) { return false } @@ -85,7 +88,7 @@ func (c *RouteConn) SendIfAddrmsg( if !c.writeIfAddrmsg(typ, flags, msg, attrs...) { return syscall.ENOMEM } - return c.Roundtrip(ctx, c.conn.rtnlConsume) + return c.conn.Roundtrip(ctx, c.rtnlConsume) } // writeNewaddrLo writes a RTM_NEWADDR message for the loopback address. @@ -114,7 +117,7 @@ func (c *RouteConn) SendNewaddrLo(ctx context.Context, lo uint32) error { if !c.writeNewaddrLo(lo) { return syscall.ENOMEM } - return c.Roundtrip(ctx, c.conn.rtnlConsume) + return c.conn.Roundtrip(ctx, c.rtnlConsume) } // writeIfInfomsg writes an ifinfomsg structure to conn. @@ -122,7 +125,7 @@ func (c *RouteConn) writeIfInfomsg( typ, flags uint16, msg *syscall.IfInfomsg, ) bool { - c.typ, c.flags = typ, syscall.NLM_F_REQUEST|syscall.NLM_F_ACK|flags + c.conn.typ, c.conn.flags = typ, syscall.NLM_F_REQUEST|syscall.NLM_F_ACK|flags return add(c.conn, msg) } @@ -135,5 +138,5 @@ func (c *RouteConn) SendIfInfomsg( if !c.writeIfInfomsg(typ, flags, msg) { return syscall.ENOMEM } - return c.Roundtrip(ctx, c.conn.rtnlConsume) + return c.conn.Roundtrip(ctx, c.rtnlConsume) } |
