From 7eb61793211f2f1a4b7c83507de66f7063347126 Mon Sep 17 00:00:00 2001 From: Matt Layher Date: Sun, 7 Mar 2021 04:58:16 -0500 Subject: [PATCH] netlink: replace more syscalls with socket.Conn methods Signed-off-by: Matt Layher --- conn_linux.go | 41 +++++------------------------------------ go.mod | 4 ++-- go.sum | 7 ++++--- 3 files changed, 11 insertions(+), 41 deletions(-) diff --git a/conn_linux.go b/conn_linux.go index 622952c..2fb3907 100644 --- a/conn_linux.go +++ b/conn_linux.go @@ -182,26 +182,10 @@ func (c *conn) LeaveGroup(group uint32) error { } // SetBPF attaches an assembled BPF program to a conn. -func (c *conn) SetBPF(filter []bpf.RawInstruction) error { - // We can't point to the first instruction in the array if no instructions - // are present. - if len(filter) == 0 { - return os.NewSyscallError("setsockopt", unix.EINVAL) - } - - prog := unix.SockFprog{ - Len: uint16(len(filter)), - Filter: (*unix.SockFilter)(unsafe.Pointer(&filter[0])), - } - - return c.s.SetsockoptSockFprog(unix.SOL_SOCKET, unix.SO_ATTACH_FILTER, &prog) -} +func (c *conn) SetBPF(filter []bpf.RawInstruction) error { return c.s.SetBPF(filter) } // RemoveBPF removes a BPF filter from a conn. -func (c *conn) RemoveBPF() error { - // 0 argument is ignored by SO_DETACH_FILTER. - return c.s.SetsockoptInt(unix.SOL_SOCKET, unix.SO_DETACH_FILTER, 0) -} +func (c *conn) RemoveBPF() error { return c.s.RemoveBPF() } // SetOption enables or disables a netlink socket option for the Conn. func (c *conn) SetOption(option ConnOption, enable bool) error { @@ -225,28 +209,13 @@ func (c *conn) SetWriteDeadline(t time.Time) error { return c.s.SetWriteDeadline // SetReadBuffer sets the size of the operating system's receive buffer // associated with the Conn. -func (c *conn) SetReadBuffer(bytes int) error { - // First try SO_RCVBUFFORCE. Given necessary permissions this syscall - // ignores limits. Fall back to the non-force version. - err := c.s.SetsockoptInt(unix.SOL_SOCKET, unix.SO_RCVBUFFORCE, bytes) - if err != nil { - err = c.s.SetsockoptInt(unix.SOL_SOCKET, unix.SO_RCVBUF, bytes) - } - return err -} +func (c *conn) SetReadBuffer(bytes int) error { return c.s.SetReadBuffer(bytes) } // SetReadBuffer sets the size of the operating system's transmit buffer // associated with the Conn. -func (c *conn) SetWriteBuffer(bytes int) error { - // First try SO_SNDBUFFORCE. Given necessary permissions this syscall - // ignores limits. Fall back to the non-force version. - err := c.s.SetsockoptInt(unix.SOL_SOCKET, unix.SO_SNDBUFFORCE, bytes) - if err != nil { - err = c.s.SetsockoptInt(unix.SOL_SOCKET, unix.SO_SNDBUF, bytes) - } - return err -} +func (c *conn) SetWriteBuffer(bytes int) error { return c.s.SetWriteBuffer(bytes) } +// SyscallConn returns a raw network connection. func (c *conn) SyscallConn() (syscall.RawConn, error) { return c.s.SyscallConn() } // linuxOption converts a ConnOption to its Linux value. diff --git a/go.mod b/go.mod index 729bb1f..6dfbfd8 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module github.com/mdlayher/netlink go 1.12 require ( - github.com/google/go-cmp v0.5.4 + github.com/google/go-cmp v0.5.5 github.com/josharian/native v0.0.0-20200817173448-b6b71def0850 github.com/jsimonetti/rtnetlink v0.0.0-20210212075122-66c871082f2b github.com/mdlayher/ethtool v0.0.0-20210210192532-2b88debcdd43 - github.com/mdlayher/socket v0.0.0-20210306175320-3bd2bafef4aa + github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b ) diff --git a/go.sum b/go.sum index 59effc2..74fa460 100644 --- a/go.sum +++ b/go.sum @@ -3,8 +3,9 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/josharian/native v0.0.0-20200817173448-b6b71def0850 h1:uhL5Gw7BINiiPAo24A2sxkcDI0Jt/sqp1v5xQCniEFA= github.com/josharian/native v0.0.0-20200817173448-b6b71def0850/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= @@ -27,8 +28,8 @@ github.com/mdlayher/netlink v1.2.0/go.mod h1:kwVW1io0AZy9A1E2YYgaD4Cj+C+GPkU6klX github.com/mdlayher/netlink v1.2.1/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU= github.com/mdlayher/netlink v1.2.2-0.20210123213345-5cc92139ae3e/go.mod h1:bacnNlfhqHqqLo4WsYeXSqfyXkInQ9JneWI68v1KwSU= github.com/mdlayher/netlink v1.3.0/go.mod h1:xK/BssKuwcRXHrtN04UBkwQ6dY9VviGGuriDdoPSWys= -github.com/mdlayher/socket v0.0.0-20210306175320-3bd2bafef4aa h1:xBDuzWhQM3HG13dTCWKkPS7md2OSCj0ZmU1Ikjs/pLA= -github.com/mdlayher/socket v0.0.0-20210306175320-3bd2bafef4aa/go.mod h1:dS/1eOKagfMJfDBsCAHyh+ngJes1eihEZi6jiZg7AYI= +github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00 h1:qEtkL8n1DAHpi5/AOgAckwGQUlMe4+jhL/GMt+GKIks= +github.com/mdlayher/socket v0.0.0-20210307095302-262dc9984e00/go.mod h1:GAFlyu4/XV68LkQKYzKhIo/WW7j3Zi0YRAz/BOoanUc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=