From dbdd4267fa8a53e54952d27fe634f5fae77e93b6 Mon Sep 17 00:00:00 2001 From: Timo Beckers Date: Sat, 4 Apr 2020 10:18:07 +0200 Subject: [PATCH 1/2] Upgrade dependencies netlink, go-cmp, net, sys --- go.mod | 8 ++++---- go.sum | 26 ++++++++++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index 14c1f91..d24cd76 100644 --- a/go.mod +++ b/go.mod @@ -3,10 +3,10 @@ module github.com/ti-mo/netfilter go 1.12 require ( - github.com/google/go-cmp v0.3.1 - github.com/mdlayher/netlink v1.0.1-0.20191210152442-a1644773bc99 + github.com/google/go-cmp v0.4.0 + github.com/mdlayher/netlink v1.1.0 github.com/pkg/errors v0.8.1 github.com/stretchr/testify v1.3.0 - golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 // indirect - golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect + golang.org/x/sys v0.0.0-20200331124033-c3d80250170d ) diff --git a/go.sum b/go.sum index 6f29df0..0586fbb 100644 --- a/go.sum +++ b/go.sum @@ -4,11 +4,16 @@ github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a h1:84IpUNXj4mCR9CuCEvSiCArMbzr/TMbuPIadKDwypkI= github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4 h1:nwOc1YaOrYJ37sEBrtWZrdqzK22hiJs3GpDmP3sR2Yw= +github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= github.com/mdlayher/netlink v0.0.0-20190409211403-11939a169225/go.mod h1:eQB3mZE4aiYnlUsyGGCOpPETfdQq4Jhsgf1fk3cwQaA= -github.com/mdlayher/netlink v1.0.1-0.20191210152442-a1644773bc99 h1:j14xqbiblLsxSSBc6uvABovvqAIr8mHnwaXCKRAtlkk= -github.com/mdlayher/netlink v1.0.1-0.20191210152442-a1644773bc99/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.0.0/go.mod h1:KxeJAFOFLG6AjpyDkQ/iIhxygIUKD+vcwqcnu43w/+M= +github.com/mdlayher/netlink v1.1.0 h1:mpdLgm+brq10nI9zM1BpX1kpDbh3NLl3RSnVq6ZSkfg= +github.com/mdlayher/netlink v1.1.0/go.mod h1:H4WCitaheIsdF9yOYu8CFmCgQthAPIWZmcKp9uZHgmY= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -21,13 +26,22 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJV golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297 h1:k7pJ2yAPLPgbskkFdhRCsA77k2fySZ1zf2zCjvQCiIM= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553 h1:efeOvDhwQ29Dj3SdAV/MJf8oukgn+8D8WgaCaRMchF8= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190411185658-b44545bcd369/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 h1:gSbV7h1NRL2G1xTg/owz62CST1oJBmxy4QpMMregXVQ= -golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From ddd1644ea3090c615d30e0997302e9249cb26377 Mon Sep 17 00:00:00 2001 From: Timo Beckers Date: Sat, 4 Apr 2020 11:29:40 +0200 Subject: [PATCH 2/2] Conn - set read/write deadlines and buffer sizes --- attribute.go | 2 +- conn.go | 34 ++++++++++++++++++++++++++++++++++ conn_test.go | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/attribute.go b/attribute.go index 6e7a5a8..48ff808 100644 --- a/attribute.go +++ b/attribute.go @@ -21,7 +21,7 @@ func NewAttributeDecoder(b []byte) (*netlink.AttributeDecoder, error) { return ad, nil } -// NewAttributeDecoder instantiates a new netlink.AttributeEncoder +// NewAttributeEncoder instantiates a new netlink.AttributeEncoder // configured with a Big Endian byte order. func NewAttributeEncoder() *netlink.AttributeEncoder { ae := netlink.NewAttributeEncoder() diff --git a/conn.go b/conn.go index 191c39b..ed72d68 100644 --- a/conn.go +++ b/conn.go @@ -2,6 +2,7 @@ package netfilter import ( "sync" + "time" "github.com/pkg/errors" @@ -122,3 +123,36 @@ func (c *Conn) IsMulticast() bool { func (c *Conn) SetOption(option netlink.ConnOption, enable bool) error { return c.conn.SetOption(option, enable) } + +// SetDeadline sets the read and write deadlines associated with the connection. +// +// Deadline functionality is only supported on Go 1.12+. Calling this function +// on older versions of Go will result in an error. +func (c *Conn) SetDeadline(t time.Time) error { + return c.conn.SetDeadline(t) +} + +// SetReadDeadline sets the read deadline associated with the connection. +// +// Deadline functionality is only supported on Go 1.12+. Calling this function +// on older versions of Go will result in an error. +func (c *Conn) SetReadDeadline(t time.Time) error { + return c.conn.SetReadDeadline(t) +} + +// SetWriteDeadline sets the write deadline associated with the connection. +// +// Deadline functionality is only supported on Go 1.12+. Calling this function on older versions of Go will result in an error. +func (c *Conn) SetWriteDeadline(t time.Time) error { + return c.conn.SetWriteDeadline(t) +} + +// SetReadBuffer sets the size of the operating system's receive buffer associated with the Conn. +func (c *Conn) SetReadBuffer(bytes int) error { + return c.conn.SetReadBuffer(bytes) +} + +// SetWriteBuffer sets the size of the operating system's transmit buffer associated with the Conn. +func (c *Conn) SetWriteBuffer(bytes int) error { + return c.conn.SetWriteBuffer(bytes) +} diff --git a/conn_test.go b/conn_test.go index 6f2c1f1..aa01cb7 100644 --- a/conn_test.go +++ b/conn_test.go @@ -1,7 +1,9 @@ package netfilter import ( + "math" "testing" + "time" "github.com/pkg/errors" @@ -81,7 +83,7 @@ func TestConnQuery(t *testing.T) { func TestConnQueryMulticast(t *testing.T) { - // Dummy Conn initially marked as Multicast + // Dummy Conn initially marked as Multicast. connMulticast := Conn{isMulticast: true} assert.Equal(t, connMulticast.IsMulticast(), true) @@ -95,7 +97,7 @@ func TestConnQueryMulticast(t *testing.T) { func TestConnReceive(t *testing.T) { - // Inject a message directly into the nltest connection + // Inject a message directly into the nltest connection. _, _ = connEcho.conn.Send(nlMsgReqAck) // Drain the socket @@ -104,3 +106,31 @@ func TestConnReceive(t *testing.T) { t.Fatalf("error in Receive: %v", err) } } + +func TestConnDeadline(t *testing.T) { + + c, err := Dial(nil) + require.NoError(t, err, "opening Conn") + + require.NoError(t, c.SetDeadline(time.Now().Add(time.Second)), "setting global deadline") + require.NoError(t, c.SetReadDeadline(time.Now().Add(time.Second)), "setting read deadline") + require.NoError(t, c.SetWriteDeadline(time.Now().Add(time.Second)), "setting write deadline") + + err = c.Close() + require.NoError(t, err, "closing Conn") +} + +func TestConnBuffers(t *testing.T) { + + c, err := Dial(nil) + require.NoError(t, err, "opening Conn") + + require.NoError(t, c.SetReadBuffer(256), "setting read buffer") + require.Error(t, c.SetReadBuffer(math.MaxInt32+1), "setting invalid read buffer") + + require.NoError(t, c.SetWriteBuffer(256), "setting write buffer") + require.Error(t, c.SetWriteBuffer(math.MaxInt32+1), "setting invalid write buffer") + + err = c.Close() + require.NoError(t, err, "closing Conn") +}