mirror of
https://github.com/vishvananda/netlink.git
synced 2026-04-22 15:17:08 +08:00
test: Improve test reliability with proper cleanup and isolation
Refactors test setup and teardown logic to use `t.Cleanup` instead of `defer`. This ensures that cleanup functions are correctly scoped to each subtest's lifecycle, improving test isolation and reliability. The `setUpNetlinkTest` helper function is also improved to correctly save and restore the original network namespace, ensuring that tests do not leak state. To support this, a `Close()` method that returns an error is added to the `Handle` struct, allowing for proper cleanup of underlying netlink sockets. The test helpers are updated to use this new method, preventing resource leaks between tests. Additionally, a bug in the `netns` tests is fixed where a large namespace ID could overflow a 32-bit integer, causing spurious failures on some systems.
This commit is contained in:
committed by
Vish (Ishaya) Abrams
parent
00c3a3def6
commit
1e35ba25dc
+4
-8
@@ -87,8 +87,7 @@ func DoTestAddr(t *testing.T, FunctionUndertest func(Link, *Addr) error) {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tt.t = t
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
link, err := LinkByName("lo")
|
||||
if err != nil {
|
||||
@@ -171,8 +170,7 @@ func DoTestAddr(t *testing.T, FunctionUndertest func(Link, *Addr) error) {
|
||||
}
|
||||
|
||||
func TestAddrAddReplace(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
for _, nilLink := range []bool{false, true} {
|
||||
var address = &net.IPNet{IP: net.IPv4(127, 0, 0, 2), Mask: net.CIDRMask(24, 32)}
|
||||
@@ -251,8 +249,7 @@ func expectAddrUpdate(ch <-chan AddrUpdate, add bool, dst net.IP) bool {
|
||||
}
|
||||
|
||||
func TestAddrSubscribeWithOptions(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan AddrUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -289,8 +286,7 @@ func TestAddrSubscribeWithOptions(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAddrSubscribeListExisting(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan AddrUpdate)
|
||||
done := make(chan struct{})
|
||||
|
||||
@@ -9,8 +9,7 @@ import (
|
||||
func TestBridgeVlan(t *testing.T) {
|
||||
minKernelRequired(t, 3, 10)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := remountSysfs(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -81,8 +80,7 @@ func TestBridgeVlan(t *testing.T) {
|
||||
|
||||
func TestBridgeVlanTunnelInfo(t *testing.T) {
|
||||
minKernelRequired(t, 4, 11)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
if err := remountSysfs(); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -206,8 +204,7 @@ func TestBridgeVlanTunnelInfo(t *testing.T) {
|
||||
|
||||
func TestBridgeGroupFwdMask(t *testing.T) {
|
||||
minKernelRequired(t, 4, 15) //minimal release for per-port group_fwd_mask
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := remountSysfs(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
+1
-2
@@ -8,8 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func TestChainAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
+3
-6
@@ -54,8 +54,7 @@ func testClassStats(this, that *ClassStatistics, t *testing.T) {
|
||||
}
|
||||
|
||||
func TestClassAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -235,8 +234,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
||||
ClassChange when the parent/handle pair exists and that it will create a
|
||||
new class if the handle is modified.
|
||||
*/
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -474,8 +472,7 @@ func TestHtbClassAddHtbClassChangeDel(t *testing.T) {
|
||||
|
||||
func TestClassHfsc(t *testing.T) {
|
||||
// New network namespace for tests
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "sch_hfsc")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "sch_hfsc"))
|
||||
|
||||
// Set up testing link and check if succeeded
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
|
||||
+14
-11
@@ -225,10 +225,11 @@ type ProtoInfo interface {
|
||||
type ProtoInfoTCP struct {
|
||||
State uint8
|
||||
}
|
||||
|
||||
// Protocol returns "tcp".
|
||||
func (*ProtoInfoTCP) Protocol() string {return "tcp"}
|
||||
func (*ProtoInfoTCP) Protocol() string { return "tcp" }
|
||||
func (p *ProtoInfoTCP) toNlData() ([]*nl.RtAttr, error) {
|
||||
ctProtoInfo := nl.NewRtAttr(unix.NLA_F_NESTED | nl.CTA_PROTOINFO, []byte{})
|
||||
ctProtoInfo := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_PROTOINFO, []byte{})
|
||||
ctProtoInfoTCP := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_PROTOINFO_TCP, []byte{})
|
||||
ctProtoInfoTCPState := nl.NewRtAttr(nl.CTA_PROTOINFO_TCP_STATE, nl.Uint8Attr(p.State))
|
||||
ctProtoInfoTCP.AddChild(ctProtoInfoTCPState)
|
||||
@@ -238,14 +239,16 @@ func (p *ProtoInfoTCP) toNlData() ([]*nl.RtAttr, error) {
|
||||
}
|
||||
|
||||
// ProtoInfoSCTP only supports the protocol name.
|
||||
type ProtoInfoSCTP struct {}
|
||||
type ProtoInfoSCTP struct{}
|
||||
|
||||
// Protocol returns "sctp".
|
||||
func (*ProtoInfoSCTP) Protocol() string {return "sctp"}
|
||||
func (*ProtoInfoSCTP) Protocol() string { return "sctp" }
|
||||
|
||||
// ProtoInfoDCCP only supports the protocol name.
|
||||
type ProtoInfoDCCP struct {}
|
||||
type ProtoInfoDCCP struct{}
|
||||
|
||||
// Protocol returns "dccp".
|
||||
func (*ProtoInfoDCCP) Protocol() string {return "dccp"}
|
||||
func (*ProtoInfoDCCP) Protocol() string { return "dccp" }
|
||||
|
||||
// The full conntrack flow structure is very complicated and can be found in the file:
|
||||
// http://git.netfilter.org/libnetfilter_conntrack/tree/include/internal/object.h
|
||||
@@ -287,7 +290,7 @@ func (t *IPTuple) toNlData(family uint8) ([]*nl.RtAttr, error) {
|
||||
ctTupleProtoSrcPort := nl.NewRtAttr(nl.CTA_PROTO_SRC_PORT, nl.BEUint16Attr(t.SrcPort))
|
||||
ctTupleProto.AddChild(ctTupleProtoSrcPort)
|
||||
ctTupleProtoDstPort := nl.NewRtAttr(nl.CTA_PROTO_DST_PORT, nl.BEUint16Attr(t.DstPort))
|
||||
ctTupleProto.AddChild(ctTupleProtoDstPort, )
|
||||
ctTupleProto.AddChild(ctTupleProtoDstPort)
|
||||
|
||||
return []*nl.RtAttr{ctTupleIP, ctTupleProto}, nil
|
||||
}
|
||||
@@ -364,7 +367,7 @@ func (s *ConntrackFlow) toNlData() ([]*nl.RtAttr, error) {
|
||||
// <len, CTA_TIMEOUT>
|
||||
// <BEuint64>
|
||||
// <len, NLA_F_NESTED|CTA_PROTOINFO>
|
||||
|
||||
|
||||
// CTA_TUPLE_ORIG
|
||||
ctTupleOrig := nl.NewRtAttr(unix.NLA_F_NESTED|nl.CTA_TUPLE_ORIG, nil)
|
||||
forwardFlowAttrs, err := s.Forward.toNlData(s.FamilyType)
|
||||
@@ -547,12 +550,12 @@ func parseTimeStamp(r *bytes.Reader, readSize uint16) (tstart, tstop uint64) {
|
||||
|
||||
func parseProtoInfoTCPState(r *bytes.Reader) (s uint8) {
|
||||
binary.Read(r, binary.BigEndian, &s)
|
||||
r.Seek(nl.SizeofNfattr - 1, seekCurrent)
|
||||
r.Seek(nl.SizeofNfattr-1, seekCurrent)
|
||||
return s
|
||||
}
|
||||
|
||||
// parseProtoInfoTCP reads the entire nested protoinfo structure, but only parses the state attr.
|
||||
func parseProtoInfoTCP(r *bytes.Reader, attrLen uint16) (*ProtoInfoTCP) {
|
||||
func parseProtoInfoTCP(r *bytes.Reader, attrLen uint16) *ProtoInfoTCP {
|
||||
p := new(ProtoInfoTCP)
|
||||
bytesRead := 0
|
||||
for bytesRead < int(attrLen) {
|
||||
@@ -666,7 +669,7 @@ func parseRawData(data []byte) *ConntrackFlow {
|
||||
switch t {
|
||||
case nl.CTA_MARK:
|
||||
s.Mark = parseConnectionMark(reader)
|
||||
case nl.CTA_LABELS:
|
||||
case nl.CTA_LABELS:
|
||||
s.Labels = parseConnectionLabels(reader)
|
||||
case nl.CTA_TIMEOUT:
|
||||
s.TimeOut = parseTimeOut(reader)
|
||||
|
||||
+108
-108
@@ -82,8 +82,8 @@ func applyFilter(flowList []ConntrackFlow, ipv4Filter *ConntrackFilter, ipv6Filt
|
||||
// TestConntrackSocket test the opening of a NETFILTER family socket
|
||||
func TestConntrackSocket(t *testing.T) {
|
||||
skipUnlessRoot(t)
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack")
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
|
||||
|
||||
h, err := NewHandle(unix.NETLINK_NETFILTER)
|
||||
CheckErrorFail(t, err)
|
||||
@@ -107,11 +107,11 @@ func TestConntrackTableList(t *testing.T) {
|
||||
// conntrack l3proto was unified since 4.19
|
||||
// https://github.com/torvalds/linux/commit/a0ae2562c6c4b2721d9fddba63b7286c13517d9f
|
||||
if k < 4 || k == 4 && m < 19 {
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4")
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv6")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4"))
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv6"))
|
||||
}
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack")
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
|
||||
|
||||
// Creates a new namespace and bring up the loopback interface
|
||||
origns, ns, h := nsCreateAndEnter(t)
|
||||
@@ -180,8 +180,8 @@ func TestConntrackTableFlush(t *testing.T) {
|
||||
t.Skipf("Fails in CI: Flow creation fails")
|
||||
}
|
||||
skipUnlessRoot(t)
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack")
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_netlink"))
|
||||
k, m, err := KernelVersion()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -189,9 +189,9 @@ func TestConntrackTableFlush(t *testing.T) {
|
||||
// conntrack l3proto was unified since 4.19
|
||||
// https://github.com/torvalds/linux/commit/a0ae2562c6c4b2721d9fddba63b7286c13517d9f
|
||||
if k < 4 || k == 4 && m < 19 {
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack_ipv4"))
|
||||
}
|
||||
setUpNetlinkTestWithKModule(t, "nf_conntrack")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "nf_conntrack"))
|
||||
// Creates a new namespace and bring up the loopback interface
|
||||
origns, ns, h := nsCreateAndEnter(t)
|
||||
defer netns.Set(*origns)
|
||||
@@ -265,7 +265,7 @@ func TestConntrackTableDelete(t *testing.T) {
|
||||
requiredModules = append(requiredModules, "nf_conntrack_ipv4")
|
||||
}
|
||||
|
||||
setUpNetlinkTestWithKModule(t, requiredModules...)
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, requiredModules...))
|
||||
|
||||
// Creates a new namespace and bring up the loopback interface
|
||||
origns, ns, h := nsCreateAndEnter(t)
|
||||
@@ -350,22 +350,22 @@ func TestConntrackTableDelete(t *testing.T) {
|
||||
func TestConntrackFilter(t *testing.T) {
|
||||
var flowList []ConntrackFlow
|
||||
flowList = append(flowList, ConntrackFlow{
|
||||
FamilyType: unix.AF_INET,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.ParseIP("10.0.0.1"),
|
||||
DstIP: net.ParseIP("20.0.0.1"),
|
||||
SrcPort: 1000,
|
||||
DstPort: 2000,
|
||||
Protocol: 17,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("20.0.0.1"),
|
||||
DstIP: net.ParseIP("192.168.1.1"),
|
||||
SrcPort: 2000,
|
||||
DstPort: 1000,
|
||||
Protocol: 17,
|
||||
},
|
||||
FamilyType: unix.AF_INET,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.ParseIP("10.0.0.1"),
|
||||
DstIP: net.ParseIP("20.0.0.1"),
|
||||
SrcPort: 1000,
|
||||
DstPort: 2000,
|
||||
Protocol: 17,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("20.0.0.1"),
|
||||
DstIP: net.ParseIP("192.168.1.1"),
|
||||
SrcPort: 2000,
|
||||
DstPort: 1000,
|
||||
Protocol: 17,
|
||||
},
|
||||
},
|
||||
ConntrackFlow{
|
||||
FamilyType: unix.AF_INET,
|
||||
Forward: IPTuple{
|
||||
@@ -1000,7 +1000,7 @@ func TestConntrackUpdateV4(t *testing.T) {
|
||||
}
|
||||
// Implicitly skips test if not root:
|
||||
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
|
||||
defer teardown()
|
||||
t.Cleanup(teardown)
|
||||
|
||||
ns, err := netns.GetFromName(nsStr)
|
||||
if err != nil {
|
||||
@@ -1015,23 +1015,23 @@ func TestConntrackUpdateV4(t *testing.T) {
|
||||
flow := ConntrackFlow{
|
||||
FamilyType: FAMILY_V4,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.IP{234,234,234,234},
|
||||
DstIP: net.IP{123,123,123,123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
SrcIP: net.IP{234, 234, 234, 234},
|
||||
DstIP: net.IP{123, 123, 123, 123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.IP{123,123,123,123},
|
||||
DstIP: net.IP{234,234,234,234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.IP{123, 123, 123, 123},
|
||||
DstIP: net.IP{234, 234, 234, 234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
// No point checking equivalence of timeout, but value must
|
||||
// be reasonable to allow for a potentially slow subsequent read.
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_SYN_SENT2,
|
||||
},
|
||||
@@ -1054,8 +1054,8 @@ func TestConntrackUpdateV4(t *testing.T) {
|
||||
|
||||
filter := ConntrackFilter{
|
||||
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
|
||||
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
|
||||
},
|
||||
@@ -1063,7 +1063,7 @@ func TestConntrackUpdateV4(t *testing.T) {
|
||||
ConntrackOrigSrcPort: flow.Forward.SrcPort,
|
||||
ConntrackOrigDstPort: flow.Forward.DstPort,
|
||||
},
|
||||
protoFilter:unix.IPPROTO_TCP,
|
||||
protoFilter: unix.IPPROTO_TCP,
|
||||
}
|
||||
|
||||
var match *ConntrackFlow
|
||||
@@ -1133,7 +1133,7 @@ func TestConntrackUpdateV6(t *testing.T) {
|
||||
}
|
||||
// Implicitly skips test if not root:
|
||||
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
|
||||
defer teardown()
|
||||
t.Cleanup(teardown)
|
||||
|
||||
ns, err := netns.GetFromName(nsStr)
|
||||
if err != nil {
|
||||
@@ -1148,23 +1148,23 @@ func TestConntrackUpdateV6(t *testing.T) {
|
||||
flow := ConntrackFlow{
|
||||
FamilyType: FAMILY_V6,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
// No point checking equivalence of timeout, but value must
|
||||
// be reasonable to allow for a potentially slow subsequent read.
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_SYN_SENT2,
|
||||
},
|
||||
@@ -1187,8 +1187,8 @@ func TestConntrackUpdateV6(t *testing.T) {
|
||||
|
||||
filter := ConntrackFilter{
|
||||
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
|
||||
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
|
||||
},
|
||||
@@ -1196,7 +1196,7 @@ func TestConntrackUpdateV6(t *testing.T) {
|
||||
ConntrackOrigSrcPort: flow.Forward.SrcPort,
|
||||
ConntrackOrigDstPort: flow.Forward.DstPort,
|
||||
},
|
||||
protoFilter:unix.IPPROTO_TCP,
|
||||
protoFilter: unix.IPPROTO_TCP,
|
||||
}
|
||||
|
||||
var match *ConntrackFlow
|
||||
@@ -1264,7 +1264,7 @@ func TestConntrackCreateV4(t *testing.T) {
|
||||
}
|
||||
// Implicitly skips test if not root:
|
||||
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
|
||||
defer teardown()
|
||||
t.Cleanup(teardown)
|
||||
|
||||
ns, err := netns.GetFromName(nsStr)
|
||||
if err != nil {
|
||||
@@ -1279,23 +1279,23 @@ func TestConntrackCreateV4(t *testing.T) {
|
||||
flow := ConntrackFlow{
|
||||
FamilyType: FAMILY_V4,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.IP{234,234,234,234},
|
||||
DstIP: net.IP{123,123,123,123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
SrcIP: net.IP{234, 234, 234, 234},
|
||||
DstIP: net.IP{123, 123, 123, 123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.IP{123,123,123,123},
|
||||
DstIP: net.IP{234,234,234,234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.IP{123, 123, 123, 123},
|
||||
DstIP: net.IP{234, 234, 234, 234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
// No point checking equivalence of timeout, but value must
|
||||
// be reasonable to allow for a potentially slow subsequent read.
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_ESTABLISHED,
|
||||
},
|
||||
@@ -1313,8 +1313,8 @@ func TestConntrackCreateV4(t *testing.T) {
|
||||
|
||||
filter := ConntrackFilter{
|
||||
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
|
||||
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
|
||||
},
|
||||
@@ -1322,7 +1322,7 @@ func TestConntrackCreateV4(t *testing.T) {
|
||||
ConntrackOrigSrcPort: flow.Forward.SrcPort,
|
||||
ConntrackOrigDstPort: flow.Forward.DstPort,
|
||||
},
|
||||
protoFilter:unix.IPPROTO_TCP,
|
||||
protoFilter: unix.IPPROTO_TCP,
|
||||
}
|
||||
|
||||
var match *ConntrackFlow
|
||||
@@ -1359,7 +1359,7 @@ func TestConntrackCreateV6(t *testing.T) {
|
||||
}
|
||||
// Implicitly skips test if not root:
|
||||
nsStr, teardown := setUpNamedNetlinkTestWithKModule(t, requiredModules...)
|
||||
defer teardown()
|
||||
t.Cleanup(teardown)
|
||||
|
||||
ns, err := netns.GetFromName(nsStr)
|
||||
if err != nil {
|
||||
@@ -1374,23 +1374,23 @@ func TestConntrackCreateV6(t *testing.T) {
|
||||
flow := ConntrackFlow{
|
||||
FamilyType: FAMILY_V6,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
// No point checking equivalence of timeout, but value must
|
||||
// be reasonable to allow for a potentially slow subsequent read.
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
TimeOut: 100,
|
||||
Mark: 12,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_ESTABLISHED,
|
||||
},
|
||||
@@ -1408,8 +1408,8 @@ func TestConntrackCreateV6(t *testing.T) {
|
||||
|
||||
filter := ConntrackFilter{
|
||||
ipNetFilter: map[ConntrackFilterType]*net.IPNet{
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackOrigSrcIP: NewIPNet(flow.Forward.SrcIP),
|
||||
ConntrackOrigDstIP: NewIPNet(flow.Forward.DstIP),
|
||||
ConntrackReplySrcIP: NewIPNet(flow.Reverse.SrcIP),
|
||||
ConntrackReplyDstIP: NewIPNet(flow.Reverse.DstIP),
|
||||
},
|
||||
@@ -1417,7 +1417,7 @@ func TestConntrackCreateV6(t *testing.T) {
|
||||
ConntrackOrigSrcPort: flow.Forward.SrcPort,
|
||||
ConntrackOrigDstPort: flow.Forward.DstPort,
|
||||
},
|
||||
protoFilter:unix.IPPROTO_TCP,
|
||||
protoFilter: unix.IPPROTO_TCP,
|
||||
}
|
||||
|
||||
var match *ConntrackFlow
|
||||
@@ -1448,43 +1448,43 @@ func TestConntrackFlowToNlData(t *testing.T) {
|
||||
flowV4 := ConntrackFlow{
|
||||
FamilyType: FAMILY_V4,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.IP{234,234,234,234},
|
||||
DstIP: net.IP{123,123,123,123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
SrcIP: net.IP{234, 234, 234, 234},
|
||||
DstIP: net.IP{123, 123, 123, 123},
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.IP{123,123,123,123},
|
||||
DstIP: net.IP{234,234,234,234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.IP{123, 123, 123, 123},
|
||||
DstIP: net.IP{234, 234, 234, 234},
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Mark: 5,
|
||||
TimeOut: 10,
|
||||
Mark: 5,
|
||||
TimeOut: 10,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_ESTABLISHED,
|
||||
},
|
||||
}
|
||||
flowV6 := ConntrackFlow {
|
||||
flowV6 := ConntrackFlow{
|
||||
FamilyType: FAMILY_V6,
|
||||
Forward: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
SrcIP: net.ParseIP("2001:db8::68"),
|
||||
DstIP: net.ParseIP("2001:db9::32"),
|
||||
SrcPort: 48385,
|
||||
DstPort: 53,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Mark: 5,
|
||||
TimeOut: 10,
|
||||
Reverse: IPTuple{
|
||||
SrcIP: net.ParseIP("2001:db9::32"),
|
||||
DstIP: net.ParseIP("2001:db8::68"),
|
||||
SrcPort: 53,
|
||||
DstPort: 48385,
|
||||
Protocol: unix.IPPROTO_TCP,
|
||||
},
|
||||
Mark: 5,
|
||||
TimeOut: 10,
|
||||
ProtoInfo: &ProtoInfoTCP{
|
||||
State: nl.TCP_CONNTRACK_ESTABLISHED,
|
||||
},
|
||||
@@ -1497,7 +1497,7 @@ func TestConntrackFlowToNlData(t *testing.T) {
|
||||
t.Fatalf("Error converting ConntrackFlow to netlink messages: %s", err)
|
||||
}
|
||||
// Mock nfgenmsg header
|
||||
bytesV4 = append(bytesV4, flowV4.FamilyType,0,0,0)
|
||||
bytesV4 = append(bytesV4, flowV4.FamilyType, 0, 0, 0)
|
||||
for _, a := range attrsV4 {
|
||||
bytesV4 = append(bytesV4, a.Serialize()...)
|
||||
}
|
||||
@@ -1507,7 +1507,7 @@ func TestConntrackFlowToNlData(t *testing.T) {
|
||||
t.Fatalf("Error converting ConntrackFlow to netlink messages: %s", err)
|
||||
}
|
||||
// Mock nfgenmsg header
|
||||
bytesV6 = append(bytesV6, flowV6.FamilyType,0,0,0)
|
||||
bytesV6 = append(bytesV6, flowV6.FamilyType, 0, 0, 0)
|
||||
for _, a := range attrsV6 {
|
||||
bytesV6 = append(bytesV6, a.Serialize()...)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package netlink
|
||||
|
||||
+4
-5
@@ -16,7 +16,7 @@ import (
|
||||
|
||||
func TestDevLinkGetDeviceList(t *testing.T) {
|
||||
minKernelRequired(t, 4, 12)
|
||||
setUpNetlinkTestWithKModule(t, "devlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
|
||||
_, err := DevLinkGetDeviceList()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -25,7 +25,7 @@ func TestDevLinkGetDeviceList(t *testing.T) {
|
||||
|
||||
func TestDevLinkGetDeviceByName(t *testing.T) {
|
||||
minKernelRequired(t, 4, 12)
|
||||
setUpNetlinkTestWithKModule(t, "devlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
|
||||
_, err := DevLinkGetDeviceByName("foo", "bar")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -34,7 +34,7 @@ func TestDevLinkGetDeviceByName(t *testing.T) {
|
||||
|
||||
func TestDevLinkSetEswitchMode(t *testing.T) {
|
||||
minKernelRequired(t, 4, 12)
|
||||
setUpNetlinkTestWithKModule(t, "devlink")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
|
||||
dev, err := DevLinkGetDeviceByName("foo", "bar")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -271,8 +271,7 @@ func areInfoStructsEqual(first *DevlinkDeviceInfo, second *DevlinkDeviceInfo) bo
|
||||
|
||||
func TestDevlinkGetDeviceResources(t *testing.T) {
|
||||
minKernelRequired(t, 5, 11)
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "devlink")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "devlink"))
|
||||
|
||||
if bus == "" || device == "" {
|
||||
//TODO: setup netdevsim device instead of getting device from flags
|
||||
|
||||
+19
-38
@@ -14,8 +14,7 @@ import (
|
||||
)
|
||||
|
||||
func TestFilterAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -108,8 +107,7 @@ func TestFilterAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterReplace(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -169,8 +167,7 @@ func TestFilterReplace(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestAdvancedFilterAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "baz"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -365,8 +362,7 @@ func TestAdvancedFilterAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterFwAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -512,8 +508,7 @@ func TestFilterFwAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterFwActAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -642,8 +637,7 @@ func TestFilterFwActAddDel(t *testing.T) {
|
||||
|
||||
func TestFilterU32BpfAddDel(t *testing.T) {
|
||||
t.Skipf("Fd does not match in ci")
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -775,8 +769,7 @@ func TestFilterU32BpfAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32ConnmarkAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -916,8 +909,7 @@ func TestFilterU32ConnmarkAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32CsumAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatalf("add link foo error: %v", err)
|
||||
}
|
||||
@@ -1084,8 +1076,7 @@ func TestFilterClsActBpfAddDel(t *testing.T) {
|
||||
// This feature was added in kernel 4.5
|
||||
minKernelRequired(t, 4, 5)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
qdisc, link := setupLinkForTestWithQdisc(t, "foo")
|
||||
filterattrs := FilterAttrs{
|
||||
@@ -1159,8 +1150,7 @@ func TestFilterMatchAllAddDel(t *testing.T) {
|
||||
// This classifier was added in kernel 4.7
|
||||
minKernelRequired(t, 4, 7)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
_, link := setupLinkForTestWithQdisc(t, "foo")
|
||||
_, link2 := setupLinkForTestWithQdisc(t, "bar")
|
||||
filter := &MatchAll{
|
||||
@@ -1227,8 +1217,7 @@ func TestFilterMatchAllAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32TunnelKeyAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1399,8 +1388,7 @@ func TestFilterU32TunnelKeyAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32SkbEditAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -1576,8 +1564,7 @@ func TestFilterU32SkbEditAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32LinkOption(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatalf("add link foo error: %v", err)
|
||||
}
|
||||
@@ -1718,8 +1705,7 @@ func TestFilterU32LinkOption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterFlowerAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2118,8 +2104,7 @@ func TestFilterFlowerAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterIPv6FlowerPedit(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2278,8 +2263,7 @@ func TestFilterIPv6FlowerPedit(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32PoliceAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2457,8 +2441,7 @@ func TestFilterU32PoliceAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterU32DirectPoliceAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2559,8 +2542,7 @@ func TestFilterU32DirectPoliceAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterChainAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -2658,8 +2640,7 @@ func TestFilterSampleAddDel(t *testing.T) {
|
||||
t.Skip("psample genetlink family unavailable - is CONFIG_PSAMPLE enabled?")
|
||||
}
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
+1
-2
@@ -79,8 +79,7 @@ func TestFouAddDel(t *testing.T) {
|
||||
minKernelRequired(t, 3, 18)
|
||||
|
||||
// the fou module is usually not compiled in the kernel so we'll load it
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "fou")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "fou"))
|
||||
|
||||
fou := Fou{
|
||||
Port: 5555,
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package netlink
|
||||
|
||||
+3
-4
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
@@ -8,8 +9,7 @@ import (
|
||||
)
|
||||
|
||||
func TestPDPv0AddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
|
||||
|
||||
if err := LinkAdd(testGTPLink(t)); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -61,8 +61,7 @@ func TestPDPv0AddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPDPv1AddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
|
||||
|
||||
if err := LinkAdd(testGTPLink(t)); err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
+8
-4
@@ -165,12 +165,16 @@ func newHandle(newNs, curNs netns.NsHandle, nlFamilies ...int) (*Handle, error)
|
||||
return h, nil
|
||||
}
|
||||
|
||||
// Close releases the resources allocated to this handle
|
||||
func (h *Handle) Close() {
|
||||
// Close closes all netlink sockets held by this Handle.
|
||||
func (h *Handle) Close() error {
|
||||
var firstErr error
|
||||
for _, sh := range h.sockets {
|
||||
sh.Close()
|
||||
if err := sh.Close(); err != nil && firstErr == nil {
|
||||
firstErr = err
|
||||
}
|
||||
}
|
||||
h.sockets = nil
|
||||
return firstErr
|
||||
}
|
||||
|
||||
// Delete releases the resources allocated to this handle
|
||||
@@ -178,7 +182,7 @@ func (h *Handle) Close() {
|
||||
// Deprecated: use Close instead which is in line with typical resource release
|
||||
// patterns for files and other resources.
|
||||
func (h *Handle) Delete() {
|
||||
h.Close()
|
||||
_ = h.Close()
|
||||
}
|
||||
|
||||
func (h *Handle) newNetlinkRequest(proto, flags int) *nl.NetlinkRequest {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
|
||||
+5
-10
@@ -88,8 +88,7 @@ func TestParseIpsetListResult(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestIpsetCreateListAddDelDestroy(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
timeout := uint32(3)
|
||||
err := IpsetCreate("my-test-ipset-1", "hash:ip", IpsetCreateOptions{
|
||||
Replace: true,
|
||||
@@ -444,8 +443,7 @@ func TestIpsetCreateListAddDelDestroyWithTestCases(t *testing.T) {
|
||||
|
||||
for _, tC := range testCases {
|
||||
t.Run(tC.desc, func(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
err := IpsetCreate(tC.setname, tC.typename, tC.options)
|
||||
if err != nil {
|
||||
@@ -615,8 +613,7 @@ func TestIpsetBitmapCreateListWithTestCases(t *testing.T) {
|
||||
|
||||
for _, tC := range testCases {
|
||||
t.Run(tC.desc, func(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
err := IpsetCreate(tC.setname, tC.typename, tC.options)
|
||||
if err != nil {
|
||||
@@ -643,8 +640,7 @@ func TestIpsetBitmapCreateListWithTestCases(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestIpsetSwap(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ipset1 := "my-test-ipset-swap-1"
|
||||
ipset2 := "my-test-ipset-swap-2"
|
||||
@@ -723,8 +719,7 @@ func nextIP(ip net.IP) {
|
||||
// TestIpsetMaxElements tests that we can create an ipset containing
|
||||
// 128k elements, which is double the default size (64k elements).
|
||||
func TestIpsetMaxElements(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ipsetName := "my-test-ipset-max"
|
||||
maxElements := uint32(128 << 10)
|
||||
|
||||
+93
-179
@@ -708,29 +708,25 @@ func compareBareUDP(t *testing.T, expected, actual *BareUDP) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelWithIndex(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Dummy{LinkAttrs{Index: 1000, Name: "foo"}})
|
||||
}
|
||||
|
||||
func TestLinkAddDelDummy(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Dummy{LinkAttrs{Name: "foo"}})
|
||||
}
|
||||
|
||||
func TestLinkAddDelDummyWithGroup(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Dummy{LinkAttrs{Name: "foo", Group: 42}})
|
||||
}
|
||||
|
||||
func TestLinkModify(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
linkName := "foo"
|
||||
originalMTU := 1500
|
||||
@@ -760,22 +756,19 @@ func TestLinkModify(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelIfb(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Ifb{LinkAttrs{Name: "foo"}})
|
||||
}
|
||||
|
||||
func TestLinkAddDelBridge(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Bridge{LinkAttrs: LinkAttrs{Name: "foo", MTU: 1400}})
|
||||
}
|
||||
|
||||
func TestLinkAddDelGeneve(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Geneve{
|
||||
LinkAttrs: LinkAttrs{Name: "foo4", EncapType: "geneve"},
|
||||
@@ -789,8 +782,7 @@ func TestLinkAddDelGeneve(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelGeneveFlowBased(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Geneve{
|
||||
LinkAttrs: LinkAttrs{Name: "foo"},
|
||||
@@ -800,7 +792,7 @@ func TestLinkAddDelGeneveFlowBased(t *testing.T) {
|
||||
|
||||
func TestGeneveCompareToIP(t *testing.T) {
|
||||
ns, tearDown := setUpNamedNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(tearDown)
|
||||
|
||||
expected := &Geneve{
|
||||
ID: 0x764332, // 23 bits
|
||||
@@ -838,8 +830,7 @@ func TestGeneveCompareToIP(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelGretap(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Gretap{
|
||||
LinkAttrs: LinkAttrs{Name: "foo4"},
|
||||
@@ -858,8 +849,7 @@ func TestLinkAddDelGretap(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelGretun(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Gretun{
|
||||
LinkAttrs: LinkAttrs{Name: "foo4"},
|
||||
@@ -873,8 +863,7 @@ func TestLinkAddDelGretun(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelGretunPointToMultiPoint(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Gretun{
|
||||
LinkAttrs: LinkAttrs{Name: "foo"},
|
||||
@@ -892,8 +881,7 @@ func TestLinkAddDelGretunPointToMultiPoint(t *testing.T) {
|
||||
func TestLinkAddDelGretunFlowBased(t *testing.T) {
|
||||
minKernelRequired(t, 4, 3)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Gretun{
|
||||
LinkAttrs: LinkAttrs{Name: "foo"},
|
||||
@@ -903,8 +891,7 @@ func TestLinkAddDelGretunFlowBased(t *testing.T) {
|
||||
func TestLinkAddDelGretapFlowBased(t *testing.T) {
|
||||
minKernelRequired(t, 4, 3)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Gretap{
|
||||
LinkAttrs: LinkAttrs{Name: "foo"},
|
||||
@@ -912,8 +899,7 @@ func TestLinkAddDelGretapFlowBased(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelVlan(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -935,8 +921,7 @@ func TestLinkAddDelVlan(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVlanWithQosMaps(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -984,8 +969,7 @@ func TestLinkAddVlanWithQosMaps(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVlanWithFlags(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -1034,8 +1018,7 @@ func TestLinkAddVlanWithFlags(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkModifyVlanFlags(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -1093,8 +1076,7 @@ func TestLinkModifyVlanFlags(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelMacvlan(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -1122,8 +1104,7 @@ func TestLinkAddDelMacvlan(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelMacvtap(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -1159,8 +1140,7 @@ func TestLinkAddDelMacvtap(t *testing.T) {
|
||||
func TestLinkMacvBCQueueLen(t *testing.T) {
|
||||
minKernelRequired(t, 5, 11)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
@@ -1188,8 +1168,7 @@ func TestLinkMacvBCQueueLen(t *testing.T) {
|
||||
|
||||
func TestNetkitPeerNs(t *testing.T) {
|
||||
minKernelRequired(t, 6, 7)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
basens, err := netns.Get()
|
||||
if err != nil {
|
||||
@@ -1261,8 +1240,7 @@ func TestNetkitPeerNs(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelNetkit(t *testing.T) {
|
||||
minKernelRequired(t, 6, 7)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
netkit := &Netkit{
|
||||
LinkAttrs: LinkAttrs{
|
||||
@@ -1284,8 +1262,7 @@ func TestLinkAddDelNetkit(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelVeth(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
peerMAC, _ := net.ParseMAC("00:12:34:56:78:02")
|
||||
|
||||
@@ -1305,8 +1282,7 @@ func TestLinkAddDelVeth(t *testing.T) {
|
||||
func TestLinkAddDelBond(t *testing.T) {
|
||||
minKernelRequired(t, 3, 13)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
modes := []string{"802.3ad", "balance-tlb"}
|
||||
for _, mode := range modes {
|
||||
@@ -1328,8 +1304,7 @@ func TestLinkAddDelBond(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVethWithDefaultTxQLen(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
la := NewLinkAttrs()
|
||||
la.Name = "foo"
|
||||
|
||||
@@ -1363,8 +1338,7 @@ func TestLinkAddVethWithDefaultTxQLen(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVethWithZeroTxQLen(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
la := NewLinkAttrs()
|
||||
la.Name = "foo"
|
||||
la.TxQLen = 0
|
||||
@@ -1399,8 +1373,7 @@ func TestLinkAddVethWithZeroTxQLen(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVethWithPeerAttrs(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
la := NewLinkAttrs()
|
||||
la.Name = "foo"
|
||||
la.MTU = 1500
|
||||
@@ -1460,8 +1433,7 @@ func TestLinkAddVethWithPeerAttrs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddVethWithoutPeerAttrs(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
la := NewLinkAttrs()
|
||||
la.Name = "foo"
|
||||
la.MTU = 1500
|
||||
@@ -1522,8 +1494,7 @@ func TestLinkAddDelDummyWithGSO(t *testing.T) {
|
||||
gsoMaxSize = 1 << 14
|
||||
)
|
||||
minKernelRequired(t, 4, 16)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := &Dummy{LinkAttrs: LinkAttrs{Name: "foo", GSOMaxSize: gsoMaxSize, GSOMaxSegs: gsoMaxSegs}}
|
||||
if err := LinkAdd(dummy); err != nil {
|
||||
@@ -1551,8 +1522,7 @@ func TestLinkAddDelDummyWithGRO(t *testing.T) {
|
||||
groMaxSize = 1 << 14
|
||||
)
|
||||
minKernelRequired(t, 5, 19)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := &Dummy{LinkAttrs: LinkAttrs{Name: "foo", GROMaxSize: groMaxSize}}
|
||||
if err := LinkAdd(dummy); err != nil {
|
||||
@@ -1573,8 +1543,7 @@ func TestLinkAddDelDummyWithGRO(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDummyWithTxQLen(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
la := NewLinkAttrs()
|
||||
la.Name = "foo"
|
||||
la.TxQLen = 1500
|
||||
@@ -1597,8 +1566,7 @@ func TestLinkAddDummyWithTxQLen(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelBridgeMaster(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(master); err != nil {
|
||||
@@ -1667,8 +1635,7 @@ func testLinkSetUnsetResetMaster(t *testing.T, master, newmaster Link) {
|
||||
}
|
||||
|
||||
func TestLinkSetUnsetResetMaster(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(master); err != nil {
|
||||
@@ -1692,8 +1659,7 @@ func TestLinkSetUnsetResetMaster(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetUnsetResetMasterBond(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
master := NewLinkBond(LinkAttrs{Name: "foo"})
|
||||
master.Mode = BOND_MODE_BALANCE_RR
|
||||
@@ -1719,8 +1685,7 @@ func TestLinkSetUnsetResetMasterBond(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetNs(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
basens, err := netns.Get()
|
||||
if err != nil {
|
||||
@@ -1783,15 +1748,13 @@ func TestLinkSetNs(t *testing.T) {
|
||||
func TestLinkAddDelWireguard(t *testing.T) {
|
||||
minKernelRequired(t, 5, 6)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Wireguard{LinkAttrs: LinkAttrs{Name: "wg0"}})
|
||||
}
|
||||
|
||||
func TestVethPeerNs(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
basens, err := netns.Get()
|
||||
if err != nil {
|
||||
@@ -1837,8 +1800,7 @@ func TestVethPeerNs(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVethPeerNs2(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
basens, err := netns.Get()
|
||||
if err != nil {
|
||||
@@ -1895,8 +1857,7 @@ func TestVethPeerNs2(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelVxlan(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{
|
||||
LinkAttrs{Name: "foo"},
|
||||
@@ -1924,8 +1885,7 @@ func TestLinkAddDelVxlan(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelVxlanUdpCSum6(t *testing.T) {
|
||||
minKernelRequired(t, 3, 16)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{
|
||||
LinkAttrs{Name: "foo"},
|
||||
@@ -1956,8 +1916,7 @@ func TestLinkAddDelVxlanUdpCSum6(t *testing.T) {
|
||||
func TestLinkAddDelVxlanGbp(t *testing.T) {
|
||||
minKernelRequired(t, 4, 0)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
parent := &Dummy{
|
||||
LinkAttrs{Name: "foo"},
|
||||
@@ -1989,8 +1948,7 @@ func TestLinkAddDelVxlanGbp(t *testing.T) {
|
||||
func TestLinkAddDelVxlanFlowBased(t *testing.T) {
|
||||
minKernelRequired(t, 4, 3)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
vxlan := Vxlan{
|
||||
LinkAttrs: LinkAttrs{
|
||||
@@ -2005,9 +1963,8 @@ func TestLinkAddDelVxlanFlowBased(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelBareUDP(t *testing.T) {
|
||||
minKernelRequired(t, 5, 1)
|
||||
setUpNetlinkTestWithKModule(t, "bareudp")
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "bareudp"))
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &BareUDP{
|
||||
LinkAttrs: LinkAttrs{Name: "foo99"},
|
||||
@@ -2032,9 +1989,9 @@ func TestBareUDPCompareToIP(t *testing.T) {
|
||||
}
|
||||
// requires iproute2 >= 5.10
|
||||
minKernelRequired(t, 5, 9)
|
||||
setUpNetlinkTestWithKModule(t, "bareudp")
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "bareudp"))
|
||||
ns, tearDown := setUpNamedNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(tearDown)
|
||||
|
||||
expected := &BareUDP{
|
||||
Port: uint16(6635),
|
||||
@@ -2073,8 +2030,7 @@ func TestBareUDPCompareToIP(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelIPVlanL2(t *testing.T) {
|
||||
minKernelRequired(t, 4, 2)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -2093,8 +2049,7 @@ func TestLinkAddDelIPVlanL2(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelIPVlanL3(t *testing.T) {
|
||||
minKernelRequired(t, 4, 2)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -2113,8 +2068,7 @@ func TestLinkAddDelIPVlanL3(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelIPVlanVepa(t *testing.T) {
|
||||
minKernelRequired(t, 4, 15)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
parent := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(parent); err != nil {
|
||||
t.Fatal(err)
|
||||
@@ -2133,8 +2087,7 @@ func TestLinkAddDelIPVlanVepa(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelIPVlanNoParent(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ipv := IPVlan{
|
||||
LinkAttrs: LinkAttrs{
|
||||
@@ -2152,8 +2105,7 @@ func TestLinkAddDelIPVlanNoParent(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkByIndex(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := &Dummy{LinkAttrs{Name: "dummy"}}
|
||||
if err := LinkAdd(dummy); err != nil {
|
||||
@@ -2179,8 +2131,7 @@ func TestLinkByIndex(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSet(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Dummy{LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2284,8 +2235,7 @@ func TestLinkSet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAltName(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Dummy{LinkAttrs{Name: "bar"}}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2350,8 +2300,7 @@ func TestLinkAltName(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetARP(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "banana"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2407,8 +2356,7 @@ func expectLinkUpdate(ch <-chan LinkUpdate, ifaceName string, up bool) bool {
|
||||
}
|
||||
|
||||
func TestLinkSubscribe(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan LinkUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -2444,8 +2392,7 @@ func TestLinkSubscribe(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSubscribeWithOptions(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan LinkUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -2578,7 +2525,7 @@ func TestLinkSubscribeListExisting(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkStats(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// Create a veth pair and verify the cross-stats once both
|
||||
// ends are brought up and some ICMPv6 packets are exchanged
|
||||
@@ -2657,8 +2604,7 @@ func TestLinkXdp(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelIptun(t *testing.T) {
|
||||
minKernelRequired(t, 4, 9)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Iptun{
|
||||
LinkAttrs: LinkAttrs{Name: "iptunfoo"},
|
||||
@@ -2669,8 +2615,7 @@ func TestLinkAddDelIptun(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelIptunFlowBased(t *testing.T) {
|
||||
minKernelRequired(t, 4, 9)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Iptun{
|
||||
LinkAttrs: LinkAttrs{Name: "iptunflowfoo"},
|
||||
@@ -2679,8 +2624,7 @@ func TestLinkAddDelIptunFlowBased(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelIp6tnl(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Ip6tnl{
|
||||
LinkAttrs: LinkAttrs{Name: "ip6tnltest"},
|
||||
@@ -2690,8 +2634,7 @@ func TestLinkAddDelIp6tnl(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelIp6tnlFlowbased(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Ip6tnl{
|
||||
LinkAttrs: LinkAttrs{Name: "ip6tnltest"},
|
||||
@@ -2700,8 +2643,7 @@ func TestLinkAddDelIp6tnlFlowbased(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelSittun(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Sittun{
|
||||
LinkAttrs: LinkAttrs{Name: "sittunfoo"},
|
||||
@@ -2711,8 +2653,7 @@ func TestLinkAddDelSittun(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelVti(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
testLinkAddDel(t, &Vti{
|
||||
LinkAttrs: LinkAttrs{Name: "vtifoo"},
|
||||
@@ -2731,8 +2672,7 @@ func TestLinkAddDelVti(t *testing.T) {
|
||||
|
||||
func TestLinkSetGSOMaxSize(t *testing.T) {
|
||||
minKernelRequired(t, 5, 19)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2761,8 +2701,7 @@ func TestLinkSetGSOMaxSize(t *testing.T) {
|
||||
|
||||
func TestLinkSetGSOMaxSegs(t *testing.T) {
|
||||
minKernelRequired(t, 5, 19)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2791,8 +2730,7 @@ func TestLinkSetGSOMaxSegs(t *testing.T) {
|
||||
|
||||
func TestLinkSetGROMaxSize(t *testing.T) {
|
||||
minKernelRequired(t, 5, 19)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2821,8 +2759,7 @@ func TestLinkSetGROMaxSize(t *testing.T) {
|
||||
|
||||
func TestLinkGetTSOMax(t *testing.T) {
|
||||
minKernelRequired(t, 5, 19)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2841,8 +2778,7 @@ func TestLinkGetTSOMax(t *testing.T) {
|
||||
|
||||
func TestLinkSetGSOIPv4MaxSize(t *testing.T) {
|
||||
minKernelRequired(t, 6, 3)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2871,8 +2807,7 @@ func TestLinkSetGSOIPv4MaxSize(t *testing.T) {
|
||||
|
||||
func TestLinkSetGROIPv4MaxSize(t *testing.T) {
|
||||
minKernelRequired(t, 6, 3)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo", TxQLen: testTxQLen, MTU: 1500}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -2902,8 +2837,7 @@ func TestLinkSetGROIPv4MaxSize(t *testing.T) {
|
||||
func TestBridgeCreationWithMulticastSnooping(t *testing.T) {
|
||||
minKernelRequired(t, 4, 4)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeWithDefaultMcastSnoopName := "foo"
|
||||
bridgeWithDefaultMcastSnoop := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeWithDefaultMcastSnoopName}}
|
||||
@@ -2941,8 +2875,7 @@ func TestBridgeCreationWithMulticastSnooping(t *testing.T) {
|
||||
func TestBridgeSetMcastSnoop(t *testing.T) {
|
||||
minKernelRequired(t, 4, 4)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeName := "foo"
|
||||
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
|
||||
@@ -2980,8 +2913,7 @@ func expectMcastSnooping(t *testing.T, linkName string, expected bool) {
|
||||
func TestBridgeSetVlanFiltering(t *testing.T) {
|
||||
minKernelRequired(t, 4, 4)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeName := "foo"
|
||||
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
|
||||
@@ -3008,8 +2940,7 @@ func TestBridgeSetVlanFiltering(t *testing.T) {
|
||||
func TestBridgeDefaultPVID(t *testing.T) {
|
||||
minKernelRequired(t, 4, 4)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeName := "foo"
|
||||
bridge := &Bridge{LinkAttrs: LinkAttrs{Name: bridgeName}}
|
||||
@@ -3058,8 +2989,7 @@ func expectVlanDefaultPVID(t *testing.T, linkName string, expected uint16) {
|
||||
func TestBridgeCreationWithAgeingTime(t *testing.T) {
|
||||
minKernelRequired(t, 3, 18)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeWithSpecifiedAgeingTimeName := "foo"
|
||||
ageingTime := uint32(20000)
|
||||
@@ -3104,8 +3034,7 @@ func TestBridgeCreationWithAgeingTime(t *testing.T) {
|
||||
func TestBridgeCreationWithHelloTime(t *testing.T) {
|
||||
minKernelRequired(t, 3, 18)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeWithSpecifiedHelloTimeName := "foo"
|
||||
helloTime := uint32(300)
|
||||
@@ -3150,8 +3079,7 @@ func TestBridgeCreationWithHelloTime(t *testing.T) {
|
||||
func TestBridgeCreationWithVlanFiltering(t *testing.T) {
|
||||
minKernelRequired(t, 3, 18)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
bridgeWithVlanFilteringEnabledName := "foo"
|
||||
vlanFiltering := true
|
||||
@@ -3194,8 +3122,7 @@ func TestBridgeCreationWithVlanFiltering(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSubscribeWithProtinfo(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(master); err != nil {
|
||||
@@ -3272,15 +3199,14 @@ func testGTPLink(t *testing.T) *GTP {
|
||||
}
|
||||
|
||||
func TestLinkAddDelGTP(t *testing.T) {
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "gtp")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "gtp"))
|
||||
gtp := testGTPLink(t)
|
||||
testLinkAddDel(t, gtp)
|
||||
}
|
||||
|
||||
func TestLinkAddDelXfrmi(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
lo, _ := LinkByName("lo")
|
||||
|
||||
@@ -3291,7 +3217,7 @@ func TestLinkAddDelXfrmi(t *testing.T) {
|
||||
|
||||
func TestLinkAddDelXfrmiNoId(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
lo, _ := LinkByName("lo")
|
||||
|
||||
@@ -3328,8 +3254,7 @@ func TestLinkByAliasWhenLinkIsNotFound(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelTuntap(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// Mount sysfs so that sysfs gets the namespace tag of the current network namespace
|
||||
// This is necessary so that /sys shows the network interfaces of the current namespace.
|
||||
@@ -3349,8 +3274,7 @@ func TestLinkAddDelTuntap(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelTuntapMq(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
|
||||
t.Fatal("Cannot mount sysfs")
|
||||
@@ -3382,8 +3306,7 @@ func TestLinkAddDelTuntapMq(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTuntapPartialQueues(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
|
||||
t.Fatal("Cannot mount sysfs")
|
||||
@@ -3440,8 +3363,7 @@ func TestTuntapPartialQueues(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkAddDelTuntapOwnerGroup(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
if err := syscall.Mount("sysfs", "/sys", "sysfs", syscall.MS_RDONLY, ""); err != nil {
|
||||
t.Fatal("Cannot mount sysfs")
|
||||
@@ -3462,8 +3384,7 @@ func TestLinkAddDelTuntapOwnerGroup(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestVethPeerIndex(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
vethPeer1 = "vethOne"
|
||||
@@ -3515,8 +3436,7 @@ func TestVethPeerIndex(t *testing.T) {
|
||||
func TestLinkSlaveBond(t *testing.T) {
|
||||
minKernelRequired(t, 3, 13)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
bondName = "foo"
|
||||
@@ -3558,8 +3478,7 @@ func TestLinkSlaveBond(t *testing.T) {
|
||||
func TestLinkSetBondSlaveQueueId(t *testing.T) {
|
||||
minKernelRequired(t, 3, 13)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
bondName = "foo"
|
||||
@@ -3590,8 +3509,7 @@ func TestLinkSetBondSlaveQueueId(t *testing.T) {
|
||||
func TestLinkSetBondSlave(t *testing.T) {
|
||||
minKernelRequired(t, 3, 13)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
bondName = "foo"
|
||||
@@ -3693,8 +3611,7 @@ func testFailover(t *testing.T, slaveName, bondName string) {
|
||||
func TestLinkFailover(t *testing.T) {
|
||||
minKernelRequired(t, 3, 13)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
bondName = "foo"
|
||||
@@ -3766,8 +3683,7 @@ func TestLinkFailover(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetAllmulticast(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo"}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -3816,8 +3732,7 @@ func TestLinkSetAllmulticast(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetMulticast(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
iface := &Veth{LinkAttrs: LinkAttrs{Name: "foo"}, PeerName: "bar"}
|
||||
if err := LinkAdd(iface); err != nil {
|
||||
@@ -3866,8 +3781,7 @@ func TestLinkSetMulticast(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestLinkSetMacvlanMode(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const (
|
||||
parentName = "foo"
|
||||
|
||||
+7
-14
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
@@ -67,10 +68,7 @@ func dumpContainsProxy(dump []Neigh, p proxyEntry) bool {
|
||||
}
|
||||
|
||||
func TestNeighAddDelLLIPAddr(t *testing.T) {
|
||||
setUpNetlinkTestWithKModule(t, "ip_gre")
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "ip_gre"))
|
||||
|
||||
dummy := Gretun{
|
||||
LinkAttrs: LinkAttrs{Name: "neigh0"},
|
||||
@@ -116,8 +114,7 @@ func TestNeighAddDelLLIPAddr(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNeighAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
|
||||
if err := LinkAdd(&dummy); err != nil {
|
||||
@@ -192,8 +189,7 @@ func TestNeighAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNeighAddDelProxy(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
|
||||
if err := LinkAdd(&dummy); err != nil {
|
||||
@@ -293,8 +289,7 @@ func expectNeighUpdate(ch <-chan NeighUpdate, expected []NeighUpdate) bool {
|
||||
}
|
||||
|
||||
func TestNeighSubscribe(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
dummy := &Dummy{LinkAttrs{Name: "neigh0"}}
|
||||
if err := LinkAdd(dummy); err != nil {
|
||||
@@ -344,8 +339,7 @@ func TestNeighSubscribe(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNeighSubscribeWithOptions(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan NeighUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -556,8 +550,7 @@ func TestNeighSubscribeListExisting(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestNeighListExecuteStateFilter(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// Create dummy iface
|
||||
dummy := Dummy{LinkAttrs{Name: "neigh0"}}
|
||||
|
||||
+42
-7
@@ -66,18 +66,37 @@ func skipUnlessKModuleLoaded(t *testing.T, moduleNames ...string) {
|
||||
|
||||
func setUpNetlinkTest(t testing.TB) tearDownNetlinkTest {
|
||||
skipUnlessRoot(t)
|
||||
|
||||
// new temporary namespace so we don't pollute the host
|
||||
// lock thread since the namespace is thread local
|
||||
// Lock the OS thread, then record original namespace
|
||||
runtime.LockOSThread()
|
||||
var err error
|
||||
origNS, err := netns.Get()
|
||||
if err != nil {
|
||||
runtime.UnlockOSThread()
|
||||
t.Fatal("Failed to get current namespace:", err)
|
||||
}
|
||||
// Create and enter a fresh namespace
|
||||
ns, err := netns.New()
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create newns", ns)
|
||||
// attempt to restore before failing
|
||||
_ = netns.Set(origNS)
|
||||
runtime.UnlockOSThread()
|
||||
t.Fatal("Failed to create new namespace:", err)
|
||||
}
|
||||
// Reinitialize the package-level handle in this namespace
|
||||
if pkgHandle != nil {
|
||||
// ensure all sockets from the previous Handle are closed
|
||||
_ = pkgHandle.Close()
|
||||
}
|
||||
pkgHandle = &Handle{}
|
||||
|
||||
return func() {
|
||||
// Close the new namespace handle
|
||||
ns.Close()
|
||||
// Restore the original namespace
|
||||
if err := netns.Set(origNS); err != nil {
|
||||
t.Fatalf("Failed to restore original namespace: %v", err)
|
||||
}
|
||||
_ = origNS.Close()
|
||||
// Unlock the OS thread
|
||||
runtime.UnlockOSThread()
|
||||
}
|
||||
}
|
||||
@@ -123,11 +142,22 @@ func setUpNetlinkTestWithLoopback(t *testing.T) tearDownNetlinkTest {
|
||||
skipUnlessRoot(t)
|
||||
|
||||
runtime.LockOSThread()
|
||||
ns, err := netns.New()
|
||||
|
||||
// Save the current namespace
|
||||
origNS, err := netns.Get()
|
||||
if err != nil {
|
||||
t.Fatal("Failed to create new netns", ns)
|
||||
runtime.UnlockOSThread()
|
||||
t.Fatal("Failed to get current namespace:", err)
|
||||
}
|
||||
|
||||
// Create and enter a fresh namespace
|
||||
ns, err := netns.New()
|
||||
if err != nil {
|
||||
runtime.UnlockOSThread()
|
||||
t.Fatal("Failed to create new netns:", err)
|
||||
}
|
||||
|
||||
// Bring up the loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
if err != nil {
|
||||
t.Fatalf("Failed to find \"lo\" in new netns: %v", err)
|
||||
@@ -136,8 +166,13 @@ func setUpNetlinkTestWithLoopback(t *testing.T) tearDownNetlinkTest {
|
||||
t.Fatalf("Failed to bring up \"lo\" in new netns: %v", err)
|
||||
}
|
||||
|
||||
// Teardown: restore original namespace and thread state
|
||||
return func() {
|
||||
ns.Close()
|
||||
if err := netns.Set(origNS); err != nil {
|
||||
t.Fatalf("Failed to restore original namespace: %v", err)
|
||||
}
|
||||
_ = origNS.Close()
|
||||
runtime.UnlockOSThread()
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
@@ -25,7 +26,7 @@ func TestNetNsIdByFd(t *testing.T) {
|
||||
// In an attempt to avoid namespace id collisions, set this to something
|
||||
// insanely high. When the kernel assigns IDs, it does so starting from 0
|
||||
// So, just use our pid shifted up 16 bits
|
||||
wantID := os.Getpid() << 16
|
||||
wantID := (os.Getpid() << 16) & 0x7FFFFFFF
|
||||
|
||||
h, err := NewHandle()
|
||||
CheckErrorFail(t, err)
|
||||
@@ -64,7 +65,7 @@ func TestNetNsIdByPid(t *testing.T) {
|
||||
}()
|
||||
|
||||
// As above, we'll pick a crazy large netnsid to avoid collisions
|
||||
wantID := syscall.Gettid() << 16
|
||||
wantID := (syscall.Gettid() << 16) & 0x7FFFFFFF
|
||||
|
||||
h, err := NewHandle()
|
||||
CheckErrorFail(t, err)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package netlink
|
||||
|
||||
+5
-4
@@ -829,8 +829,8 @@ func SubscribeAt(newNs, curNs netns.NsHandle, protocol int, groups ...uint) (*Ne
|
||||
return Subscribe(protocol, groups...)
|
||||
}
|
||||
|
||||
func (s *NetlinkSocket) Close() {
|
||||
s.file.Close()
|
||||
func (s *NetlinkSocket) Close() error {
|
||||
return s.file.Close()
|
||||
}
|
||||
|
||||
func (s *NetlinkSocket) GetFd() int {
|
||||
@@ -1083,8 +1083,9 @@ type SocketHandle struct {
|
||||
}
|
||||
|
||||
// Close closes the netlink socket
|
||||
func (sh *SocketHandle) Close() {
|
||||
func (sh *SocketHandle) Close() error {
|
||||
if sh.Socket != nil {
|
||||
sh.Socket.Close()
|
||||
return sh.Socket.Close()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
|
||||
+1
-2
@@ -8,8 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func TestProtinfo(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
master := &Bridge{LinkAttrs: LinkAttrs{Name: "foo"}}
|
||||
if err := LinkAdd(master); err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
+10
-20
@@ -8,8 +8,7 @@ import (
|
||||
)
|
||||
|
||||
func TestTbfAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -66,8 +65,7 @@ func TestTbfAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestHtbAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -129,8 +127,7 @@ func TestHtbAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSfqAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTestWithKModule(t, "sch_sfq")
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTestWithKModule(t, "sch_sfq"))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -195,8 +192,7 @@ func TestSfqAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestPrioAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -239,8 +235,7 @@ func TestPrioAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTbfAddHtbReplaceDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -330,8 +325,7 @@ func TestTbfAddHtbReplaceDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestTbfAddTbfChangeDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -421,8 +415,7 @@ func TestTbfAddTbfChangeDel(t *testing.T) {
|
||||
func TestFqAddChangeDel(t *testing.T) {
|
||||
minKernelRequired(t, 3, 11)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -478,8 +471,7 @@ func TestFqAddChangeDel(t *testing.T) {
|
||||
func TestFqHorizon(t *testing.T) {
|
||||
minKernelRequired(t, 5, 7)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -535,8 +527,7 @@ func TestFqHorizon(t *testing.T) {
|
||||
func TestFqCodelAddChangeDel(t *testing.T) {
|
||||
minKernelRequired(t, 3, 4)
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -587,8 +578,7 @@ func TestFqCodelAddChangeDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestIngressAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := LinkAdd(&Ifb{LinkAttrs{Name: "foo"}}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package netlink
|
||||
|
||||
+28
-56
@@ -17,8 +17,7 @@ import (
|
||||
)
|
||||
|
||||
func TestRouteAddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -155,8 +154,7 @@ func TestRouteAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRoute6AddDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// create dummy interface
|
||||
// IPv6 route added to loopback interface will be unreachable
|
||||
@@ -332,8 +330,7 @@ func TestRoute6AddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteChange(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -398,8 +395,7 @@ func TestRouteChange(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteReplace(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -459,8 +455,7 @@ func TestRouteReplace(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteAppend(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -523,8 +518,7 @@ func TestRouteAppend(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteAddIncomplete(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -562,8 +556,7 @@ func expectRouteUpdate(ch <-chan RouteUpdate, t, f uint16, dst net.IP) bool {
|
||||
}
|
||||
|
||||
func TestRouteSubscribe(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan RouteUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -607,8 +600,7 @@ func TestRouteSubscribe(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteSubscribeWithOptions(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan RouteUpdate)
|
||||
done := make(chan struct{})
|
||||
@@ -796,8 +788,7 @@ func TestRouteSubscribeListExisting(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteFilterAllTables(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -877,8 +868,7 @@ func TestRouteFilterAllTables(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteFilterByFamily(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
const table int = 999
|
||||
|
||||
@@ -950,8 +940,7 @@ func TestRouteFilterByFamily(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteFilterIterCanStop(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -1016,8 +1005,7 @@ func TestRouteFilterIterCanStop(t *testing.T) {
|
||||
}
|
||||
|
||||
func BenchmarkRouteListFilteredNew(b *testing.B) {
|
||||
tearDown := setUpNetlinkTest(b)
|
||||
defer tearDown()
|
||||
b.Cleanup(setUpNetlinkTest(b))
|
||||
|
||||
link, err := setUpRoutesBench(b)
|
||||
|
||||
@@ -1039,8 +1027,7 @@ func BenchmarkRouteListFilteredNew(b *testing.B) {
|
||||
}
|
||||
|
||||
func BenchmarkRouteListIter(b *testing.B) {
|
||||
tearDown := setUpNetlinkTest(b)
|
||||
defer tearDown()
|
||||
b.Cleanup(setUpNetlinkTest(b))
|
||||
|
||||
link, err := setUpRoutesBench(b)
|
||||
|
||||
@@ -1104,8 +1091,7 @@ func tableIDIn(ids []int, id int) bool {
|
||||
}
|
||||
|
||||
func TestRouteExtraFields(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -1180,8 +1166,7 @@ func TestRouteExtraFields(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteMultiPath(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -1357,8 +1342,7 @@ func TestRouteIifOption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteOifOption(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// setup two interfaces: eth0, eth1
|
||||
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
|
||||
@@ -1467,8 +1451,7 @@ func TestRouteOifOption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestFilterDefaultRoute(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -1549,8 +1532,7 @@ func TestFilterDefaultRoute(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestMPLSRouteAddDel(t *testing.T) {
|
||||
tearDown := setUpMPLSNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpMPLSNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -1601,8 +1583,7 @@ func TestIP6tnlRouteAddDel(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -2021,8 +2002,7 @@ func TestSEG6RouteAddDel(t *testing.T) {
|
||||
}
|
||||
// add/del routes with LWTUNNEL_SEG6 to/from loopback interface.
|
||||
// Test both seg6 modes: encap (IPv4) & inline (IPv6).
|
||||
tearDown := setUpSEG6NetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpSEG6NetlinkTest(t))
|
||||
|
||||
// get loopback interface and bring it up
|
||||
link, err := LinkByName("lo")
|
||||
@@ -2107,8 +2087,7 @@ func TestSEG6RouteAddDel(t *testing.T) {
|
||||
// add/del routes with LWTUNNEL_ENCAP_SEG6_LOCAL to/from dummy interface.
|
||||
func TestSEG6LocalRoute6AddDel(t *testing.T) {
|
||||
minKernelRequired(t, 4, 14)
|
||||
tearDown := setUpSEG6NetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpSEG6NetlinkTest(t))
|
||||
|
||||
// create dummy interface
|
||||
// IPv6 route added to loopback interface will be unreachable
|
||||
@@ -2238,8 +2217,7 @@ func TestMTURouteAddDel(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -2292,8 +2270,7 @@ func TestMTULockRouteAddDel(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -2350,8 +2327,7 @@ func TestRtoMinLockRouteAddDel(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// get loopback interface
|
||||
link, err := LinkByName("lo")
|
||||
@@ -2404,8 +2380,7 @@ func TestRtoMinLockRouteAddDel(t *testing.T) {
|
||||
|
||||
func TestRouteViaAddDel(t *testing.T) {
|
||||
minKernelRequired(t, 5, 4)
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
_, err := RouteList(nil, FAMILY_V4)
|
||||
if err != nil {
|
||||
@@ -2469,8 +2444,7 @@ func TestRouteViaAddDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteUIDOption(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// setup eth0 so that network is reachable
|
||||
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
|
||||
@@ -2565,8 +2539,7 @@ func TestRouteUIDOption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteFWMarkOption(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// setup eth0 so that network is reachable
|
||||
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
|
||||
@@ -2710,8 +2683,7 @@ func TestRouteFWMarkOption(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestRouteGetFIBMatchOption(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
err := LinkAdd(&Dummy{LinkAttrs{Name: "eth0"}})
|
||||
if err != nil {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//go:build !linux
|
||||
// +build !linux
|
||||
|
||||
package netlink
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import (
|
||||
|
||||
func TestRuleAddDel(t *testing.T) {
|
||||
skipUnlessRoot(t)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
srcNet := &net.IPNet{IP: net.IPv4(172, 16, 0, 1), Mask: net.CIDRMask(16, 32)}
|
||||
dstNet := &net.IPNet{IP: net.IPv4(172, 16, 1, 1), Mask: net.CIDRMask(24, 32)}
|
||||
@@ -584,7 +584,7 @@ func runRuleListFiltered(t *testing.T, family int, srcNet, dstNet *net.IPNet) {
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
rule := tt.preRun()
|
||||
wantRules, wantErr := tt.setupWant(rule)
|
||||
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ import (
|
||||
)
|
||||
|
||||
func TestSocketGet(t *testing.T) {
|
||||
defer setUpNetlinkTestWithLoopback(t)()
|
||||
t.Cleanup(setUpNetlinkTestWithLoopback(t))
|
||||
|
||||
type Addr struct {
|
||||
IP net.IP
|
||||
@@ -102,7 +102,7 @@ func TestSocketGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSocketDestroy(t *testing.T) {
|
||||
defer setUpNetlinkTestWithLoopback(t)()
|
||||
t.Cleanup(setUpNetlinkTestWithLoopback(t))
|
||||
|
||||
addr, err := net.ResolveTCPAddr("tcp", "localhost:0")
|
||||
if err != nil {
|
||||
|
||||
@@ -11,7 +11,7 @@ func TestXfrmMonitorExpire(t *testing.T) {
|
||||
if os.Getenv("CI") == "true" {
|
||||
t.Skipf("Flaky in CI: Intermittently causes 10 minute timeout")
|
||||
}
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
ch := make(chan XfrmMsg)
|
||||
done := make(chan struct{})
|
||||
|
||||
@@ -9,8 +9,7 @@ import (
|
||||
const zeroCIDR = "0.0.0.0/0"
|
||||
|
||||
func TestXfrmPolicyAddUpdateDel(t *testing.T) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
policy := getPolicy()
|
||||
if err := XfrmPolicyAdd(policy); err != nil {
|
||||
@@ -102,7 +101,7 @@ func TestXfrmPolicyAddUpdateDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestXfrmPolicyFlush(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
p1 := getPolicy()
|
||||
if err := XfrmPolicyAdd(p1); err != nil {
|
||||
@@ -140,7 +139,7 @@ func TestXfrmPolicyFlush(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestXfrmPolicyBlockWithIfindex(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
pBlock := getPolicy()
|
||||
pBlock.Action = XFRM_POLICY_BLOCK
|
||||
@@ -165,7 +164,7 @@ func TestXfrmPolicyBlockWithIfindex(t *testing.T) {
|
||||
|
||||
func TestXfrmPolicyWithIfid(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
pol := getPolicy()
|
||||
pol.Ifid = 54321
|
||||
@@ -190,7 +189,7 @@ func TestXfrmPolicyWithIfid(t *testing.T) {
|
||||
|
||||
func TestXfrmPolicyWithOptional(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
pol := getPolicy()
|
||||
pol.Dir = XFRM_DIR_IN
|
||||
|
||||
+13
-14
@@ -21,8 +21,7 @@ func TestXfrmStateAddGetDel(t *testing.T) {
|
||||
}
|
||||
|
||||
func testXfrmStateAddGetDel(t *testing.T, state *XfrmState) {
|
||||
tearDown := setUpNetlinkTest(t)
|
||||
defer tearDown()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
if err := XfrmStateAdd(state); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -66,7 +65,7 @@ func testXfrmStateAddGetDel(t *testing.T, state *XfrmState) {
|
||||
}
|
||||
|
||||
func TestXfrmStateAllocSpi(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.Spi = 0
|
||||
@@ -87,7 +86,7 @@ func TestXfrmStateAllocSpi(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestXfrmStateFlush(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state1 := getBaseState()
|
||||
state2 := getBaseState()
|
||||
@@ -138,7 +137,7 @@ func TestXfrmStateFlush(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestXfrmStateUpdateLimits(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// Program state with limits
|
||||
state := getBaseState()
|
||||
@@ -186,7 +185,7 @@ func TestXfrmStateUpdateLimits(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestXfrmStateStats(t *testing.T) {
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
// Program state and record time
|
||||
state := getBaseState()
|
||||
@@ -207,7 +206,7 @@ func TestXfrmStateStats(t *testing.T) {
|
||||
|
||||
func TestXfrmStateWithIfid(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.Ifid = 54321
|
||||
@@ -228,7 +227,7 @@ func TestXfrmStateWithIfid(t *testing.T) {
|
||||
|
||||
func TestXfrmStateWithSADir(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.SADir = XFRM_SA_DIR_IN
|
||||
@@ -260,18 +259,18 @@ func TestXfrmStateWithPcpunumWithoutSADir(t *testing.T) {
|
||||
t.Skipf("Host Kernel (%d.%d) does not meet test's minimum required version: (%d.%d)",
|
||||
k, m, minKernel, minMajor)
|
||||
}
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
pcpuNum := uint32(1)
|
||||
state.Pcpunum = &pcpuNum
|
||||
err = XfrmStateAdd(state)
|
||||
|
||||
|
||||
if err != nil {
|
||||
if k > maxKernel || k == maxKernel && m >= maxMajor {
|
||||
// On and After maxKernel.maxMajor, SA_PCPU is only supported with SA_DIR
|
||||
t.Logf("Host Kernel(%d.%d) does not allows SA_PCPU without SA_DIR", k, m)
|
||||
if ! strings.Contains(err.Error(), unsupportedMsg) {
|
||||
if !strings.Contains(err.Error(), unsupportedMsg) {
|
||||
t.Fatal("Unexpected error from XfrmStateAdd", "error: ", err)
|
||||
}
|
||||
return
|
||||
@@ -292,7 +291,7 @@ func TestXfrmStateWithPcpunumWithoutSADir(t *testing.T) {
|
||||
|
||||
func TestXfrmStateWithPcpunumWithSADir(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.SADir = XFRM_SA_DIR_IN
|
||||
@@ -315,7 +314,7 @@ func TestXfrmStateWithPcpunumWithSADir(t *testing.T) {
|
||||
|
||||
func TestXfrmStateWithOutputMark(t *testing.T) {
|
||||
minKernelRequired(t, 4, 14)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.OutputMark = &XfrmMark{
|
||||
@@ -338,7 +337,7 @@ func TestXfrmStateWithOutputMark(t *testing.T) {
|
||||
|
||||
func TestXfrmStateWithOutputMarkAndMask(t *testing.T) {
|
||||
minKernelRequired(t, 4, 19)
|
||||
defer setUpNetlinkTest(t)()
|
||||
t.Cleanup(setUpNetlinkTest(t))
|
||||
|
||||
state := getBaseState()
|
||||
state.OutputMark = &XfrmMark{
|
||||
|
||||
Reference in New Issue
Block a user