Skip to content

Commit

Permalink
Update to latest netlink library (#9)
Browse files Browse the repository at this point in the history
* Update to latest netlink library
* *_integration_test: unify OpError checks
  • Loading branch information
dstiliadis authored and ti-mo committed Mar 22, 2019
1 parent 8395e68 commit 0776081
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 26 deletions.
30 changes: 15 additions & 15 deletions conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func (c *Conn) Dump() ([]Flow, error) {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctGet),
Family: netfilter.ProtoUnspec, // ProtoUnspec dumps both IPv4 and IPv6
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump,
Flags: netlink.Request | netlink.Dump,
},
nil)

Expand All @@ -141,7 +141,7 @@ func (c *Conn) DumpFilter(f Filter) ([]Flow, error) {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctGet),
Family: netfilter.ProtoUnspec, // ProtoUnspec dumps both IPv4 and IPv6
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump,
Flags: netlink.Request | netlink.Dump,
},
f.marshal())

Expand All @@ -166,7 +166,7 @@ func (c *Conn) DumpExpect() ([]Expect, error) {
SubsystemID: netfilter.NFSubsysCTNetlinkExp,
MessageType: netfilter.MessageType(ctGet),
Family: netfilter.ProtoUnspec, // ProtoUnspec dumps both IPv4 and IPv6
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Dump | netlink.Acknowledge,
},
nil)

Expand All @@ -190,7 +190,7 @@ func (c *Conn) Flush() error {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctDelete),
Family: netfilter.ProtoUnspec, // Family is ignored for flush
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Acknowledge,
},
nil)

Expand All @@ -215,7 +215,7 @@ func (c *Conn) FlushFilter(f Filter) error {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctDelete),
Family: netfilter.ProtoUnspec, // Family is ignored for flush
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Acknowledge,
},
f.marshal())

Expand Down Expand Up @@ -254,8 +254,8 @@ func (c *Conn) Create(f Flow) error {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctNew),
Family: pf,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge |
netlink.HeaderFlagsExcl | netlink.HeaderFlagsCreate,
Flags: netlink.Request | netlink.Acknowledge |
netlink.Excl | netlink.Create,
}, attrs)

if err != nil {
Expand Down Expand Up @@ -289,8 +289,8 @@ func (c *Conn) CreateExpect(ex Expect) error {
SubsystemID: netfilter.NFSubsysCTNetlinkExp,
MessageType: netfilter.MessageType(ctExpNew),
Family: pf,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge |
netlink.HeaderFlagsExcl | netlink.HeaderFlagsCreate,
Flags: netlink.Request | netlink.Acknowledge |
netlink.Excl | netlink.Create,
}, attrs)

if err != nil {
Expand Down Expand Up @@ -327,7 +327,7 @@ func (c *Conn) Get(f Flow) (Flow, error) {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctGet),
Family: pf,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Acknowledge,
}, attrs)

if err != nil {
Expand Down Expand Up @@ -376,7 +376,7 @@ func (c *Conn) Update(f Flow) error {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctNew),
Family: pf,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Acknowledge,
}, attrs)

if err != nil {
Expand Down Expand Up @@ -412,7 +412,7 @@ func (c *Conn) Delete(f Flow) error {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctDelete),
Family: pf,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Acknowledge,
}, attrs)

if err != nil {
Expand All @@ -437,7 +437,7 @@ func (c *Conn) Stats() ([]Stats, error) {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctGetStatsCPU),
Family: netfilter.ProtoUnspec,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump,
Flags: netlink.Request | netlink.Dump,
}, nil)

if err != nil {
Expand All @@ -462,7 +462,7 @@ func (c *Conn) StatsExpect() ([]StatsExpect, error) {
SubsystemID: netfilter.NFSubsysCTNetlinkExp,
MessageType: netfilter.MessageType(ctExpGetStatsCPU),
Family: netfilter.ProtoUnspec,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump,
Flags: netlink.Request | netlink.Dump,
}, nil)

if err != nil {
Expand Down Expand Up @@ -491,7 +491,7 @@ func (c *Conn) StatsGlobal() (StatsGlobal, error) {
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctGetStats),
Family: netfilter.ProtoUnspec,
Flags: netlink.HeaderFlagsRequest | netlink.HeaderFlagsDump | netlink.HeaderFlagsAcknowledge,
Flags: netlink.Request | netlink.Dump | netlink.Acknowledge,
}, nil)

var sg StatsGlobal
Expand Down
3 changes: 1 addition & 2 deletions conn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (

"github.com/mdlayher/netlink"
"github.com/stretchr/testify/assert"

"github.com/ti-mo/conntrack"
"github.com/ti-mo/netfilter"
)
Expand All @@ -18,7 +17,7 @@ func TestConnDialError(t *testing.T) {
// Attempt to open a Netlink socket into a netns that is highly unlikely
// to exist, so we can catch an error from Dial.
_, err := conntrack.Dial(&netlink.Config{NetNS: 1337})
assert.EqualError(t, err, "bad file descriptor")
assert.EqualError(t, err, "setns: bad file descriptor")
}

func ExampleConn_createUpdateFlow() {
Expand Down
2 changes: 1 addition & 1 deletion event.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (et *eventType) unmarshal(h netfilter.Header) error {
case ctNew:
// Since the MessageType is only of kind new, get or delete,
// the header's flags are used to distinguish between NEW and UPDATE.
if h.Flags&(netlink.HeaderFlagsCreate|netlink.HeaderFlagsExcl) != 0 {
if h.Flags&(netlink.Create|netlink.Excl) != 0 {
*et = EventNew
} else {
*et = EventUpdate
Expand Down
10 changes: 7 additions & 3 deletions event_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,17 @@ package conntrack

import (
"net"
"os"
"testing"

"github.com/mdlayher/netlink"
"github.com/pkg/errors"
"github.com/ti-mo/netfilter"
"golang.org/x/sys/unix"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/mdlayher/netlink"
"github.com/ti-mo/netfilter"
)

func TestConnListen(t *testing.T) {
Expand All @@ -36,7 +38,9 @@ func TestConnListen(t *testing.T) {
go func() {
err, ok := <-errChan
if ok {
require.Equal(t, errors.Cause(err), unix.EBADF)
opErr, ok := errors.Cause(err).(*netlink.OpError)
require.True(t, ok)
require.EqualError(t, os.NewSyscallError("recvmsg", unix.EBADF), opErr.Err.Error())
}
}()

Expand Down
4 changes: 2 additions & 2 deletions event_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ var eventTypeTests = []struct {
nfh: netfilter.Header{
SubsystemID: netfilter.NFSubsysCTNetlink,
MessageType: netfilter.MessageType(ctNew),
Flags: netlink.HeaderFlagsCreate | netlink.HeaderFlagsExcl,
Flags: netlink.Create | netlink.Excl,
},
et: EventNew,
},
Expand Down Expand Up @@ -112,7 +112,7 @@ var eventTests = []struct {
name: "correct empty new flow event",
nfh: netfilter.Header{
SubsystemID: netfilter.NFSubsysCTNetlink,
Flags: netlink.HeaderFlagsCreate | netlink.HeaderFlagsExcl,
Flags: netlink.Create | netlink.Excl,
},
e: Event{
Type: EventNew,
Expand Down
10 changes: 9 additions & 1 deletion expect_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@ import (
"net"
"testing"

"github.com/pkg/errors"
"golang.org/x/sys/unix"

"github.com/stretchr/testify/require"

"github.com/mdlayher/netlink"
)

// No meaningful integration test possible until we can figure out how
Expand Down Expand Up @@ -61,5 +66,8 @@ func TestConnCreateExpect(t *testing.T) {
}

err = c.CreateExpect(ex)
require.EqualError(t, err, "error executing Netlink query: invalid argument", ex)

opErr, ok := errors.Cause(err).(*netlink.OpError)
require.True(t, ok)
require.EqualError(t, unix.EINVAL, opErr.Err.Error())
}
9 changes: 7 additions & 2 deletions flow_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,12 @@ import (
"testing"

"github.com/pkg/errors"
"github.com/stretchr/testify/require"
"golang.org/x/sys/unix"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"

"github.com/mdlayher/netlink"
)

// Create a given number of flows with a randomized component and check the amount
Expand Down Expand Up @@ -256,7 +258,10 @@ func TestConnCreateGetFlow(t *testing.T) {

for n, f := range flows {
_, err := c.Get(f)
require.EqualError(t, errors.Cause(err), unix.ENOENT.Error(), "get flow before creating")

opErr, ok := errors.Cause(err).(*netlink.OpError)
require.True(t, ok)
require.EqualError(t, unix.ENOENT, opErr.Err.Error(), "get flow before creating")

err = c.Create(f)
require.NoError(t, err, "creating flow", n)
Expand Down

0 comments on commit 0776081

Please sign in to comment.