From fd7325f28811aa48251ef88a001a65897e0af76e Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 11:00:14 +0000 Subject: [PATCH 1/9] sbr: Add outbound interface rule in addition to source rule Adding the outbound interface rule allows applications to bind to an interface name rather than only the interface IP. This allows applications in a multus environment to be configured with the interface name, which can be configured, rather than the interface IP address, which is not known in advance. The outbound interface rule is on;y added if the interface is configured with 1 IP address, because when there are multiple, only one will be selected, depending on the rule order, which is non-deterministic. Signed-off-by: Neil Cook --- plugins/meta/sbr/main.go | 27 +++++++++++++++++++-------- plugins/meta/sbr/sbr_linux_test.go | 24 +++++++++++++++++++++++- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/plugins/meta/sbr/main.go b/plugins/meta/sbr/main.go index acfa24640..335cc9cef 100644 --- a/plugins/meta/sbr/main.go +++ b/plugins/meta/sbr/main.go @@ -239,9 +239,9 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { // Loop through setting up source based rules and default routes. for _, ipCfg := range ipCfgs { - log.Printf("Set rule for source %s", ipCfg.String()) - rule := netlink.NewRule() - rule.Table = table + log.Printf("Set src and interface rules for source %s", ipCfg.String()) + srcRule := netlink.NewRule() + srcRule.Table = table // Source must be restricted to a single IP, not a full subnet var src net.IPNet @@ -253,12 +253,23 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { } log.Printf("Source to use %s", src.String()) - rule.Src = &src + srcRule.Src = &src - if err = netlink.RuleAdd(rule); err != nil { - return fmt.Errorf("Failed to add rule: %v", err) + if err = netlink.RuleAdd(srcRule); err != nil { + return fmt.Errorf("Failed to add src rule: %v", err) } + // Only add an interface rule if there is 1 IP address configured on the interface + if len(ipCfgs) == 1 { + interfaceRule := netlink.NewRule() + interfaceRule.Table = table + log.Printf("Interface to use %s", iface) + interfaceRule.OifName = iface + + if err = netlink.RuleAdd(interfaceRule); err != nil { + return fmt.Errorf("Failed to add interface rule: %v", err) + } + } // Add a default route, since this may have been removed by previous // plugin. if ipCfg.Gateway != nil { @@ -425,12 +436,12 @@ func tidyRules(iface string, table *int) error { RULE_LOOP: for _, rule := range rules { log.Printf("Check rule: %v", rule) - if rule.Src == nil { + if rule.Src == nil && rule.OifName == "" { continue } for _, addr := range addrs { - if rule.Src.IP.Equal(addr.IP) { + if rule.OifName == iface || rule.Src.IP.Equal(addr.IP) { log.Printf("Delete rule %v", rule) err := netlink.RuleDel(&rule) if err != nil { diff --git a/plugins/meta/sbr/sbr_linux_test.go b/plugins/meta/sbr/sbr_linux_test.go index 731f71d81..27253fc86 100644 --- a/plugins/meta/sbr/sbr_linux_test.go +++ b/plugins/meta/sbr/sbr_linux_test.go @@ -305,7 +305,9 @@ var _ = Describe("sbr test", func() { Expect(newStatus.Rules).To(HaveLen(1)) Expect(newStatus.Rules[0].Table).To(Equal(100)) - Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.1.209/32")) + Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[1].Table).To(Equal(100)) + Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1] Expect(equalRoutes(expNet1.Routes, devNet1.Routes)).To(BeTrue()) @@ -403,7 +405,13 @@ var _ = Describe("sbr test", func() { Expect(newStatus.Rules).To(HaveLen(1)) Expect(newStatus.Rules[0].Table).To(Equal(100)) +<<<<<<< HEAD Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.1.209/32")) +======= + Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[1].Table).To(Equal(100)) + Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) +>>>>>>> 1a633d52 (sbr: fix code and tests) devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1] Expect(equalRoutes(expEth0.Routes, devEth0.Routes)).To(BeTrue()) @@ -472,7 +480,13 @@ var _ = Describe("sbr test", func() { // Check results. We expect all the routes on net1 to have moved to // table 100 except for local routes (table 255); a new default gateway +<<<<<<< HEAD // route to have been created; and 2 rules to exist. +======= + // route to have been created; and 2 rules to exist. There will be no + // interface rules, because they don't make sense when there are multiple + // IPs for a single interface +>>>>>>> 1a633d52 (sbr: fix code and tests) expNet1 := oldStatus.Devices[0] expEth0 := oldStatus.Devices[1] @@ -514,13 +528,21 @@ var _ = Describe("sbr test", func() { }) // 2 Rules will be created for each IP address. (100, 101) +<<<<<<< HEAD +======= + // 2 Rules will also be created for each interface +>>>>>>> 1a633d52 (sbr: fix code and tests) Expect(newStatus.Rules).To(HaveLen(2)) // First entry corresponds to last table Expect(newStatus.Rules[0].Table).To(Equal(101)) Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.101.209/32")) +<<<<<<< HEAD // Second entry corresponds to first table (100) +======= + // Third entry corresponds to first table (100) +>>>>>>> 1a633d52 (sbr: fix code and tests) Expect(newStatus.Rules[1].Table).To(Equal(100)) Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) From 8bff8315c2340774af67b69184a6f54b9bac5108 Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 11:02:23 +0000 Subject: [PATCH 2/9] sbr: Add tests for new outbound interface rule Signed-off-by: Neil Cook --- plugins/meta/sbr/sbr_linux_test.go | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/plugins/meta/sbr/sbr_linux_test.go b/plugins/meta/sbr/sbr_linux_test.go index 27253fc86..f83239940 100644 --- a/plugins/meta/sbr/sbr_linux_test.go +++ b/plugins/meta/sbr/sbr_linux_test.go @@ -287,7 +287,7 @@ var _ = Describe("sbr test", func() { // Check results. We expect all the routes on net1 to have moved to // table 100 except for local routes (table 255); a new default gateway - // route to have been created; and a single rule to exist. + // route to have been created; and two rules to exist. expNet1 := oldStatus.Devices[0] expEth0 := oldStatus.Devices[1] for i := range expNet1.Routes { @@ -303,11 +303,14 @@ var _ = Describe("sbr test", func() { LinkIndex: expNet1.Routes[0].LinkIndex, }) - Expect(newStatus.Rules).To(HaveLen(1)) + Expect(newStatus.Rules).To(HaveLen(2)) + Expect(newStatus.Rules[0].Table).To(Equal(100)) Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[1].Table).To(Equal(100)) Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) + devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1] Expect(equalRoutes(expNet1.Routes, devNet1.Routes)).To(BeTrue()) @@ -394,7 +397,7 @@ var _ = Describe("sbr test", func() { // Check results. We expect all the routes on net1 to have moved to // table 100 except for local routes (table 255); a new default gateway - // route to have been created; and a single rule to exist. + // route to have been created; and two rules to exist. expNet1 := oldStatus.Devices[0] expEth0 := oldStatus.Devices[1] for i := range expNet1.Routes { @@ -403,15 +406,14 @@ var _ = Describe("sbr test", func() { } } - Expect(newStatus.Rules).To(HaveLen(1)) + Expect(newStatus.Rules).To(HaveLen(2)) + Expect(newStatus.Rules[0].Table).To(Equal(100)) -<<<<<<< HEAD - Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.1.209/32")) -======= Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[1].Table).To(Equal(100)) Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) ->>>>>>> 1a633d52 (sbr: fix code and tests) + devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1] Expect(equalRoutes(expEth0.Routes, devEth0.Routes)).To(BeTrue()) @@ -480,13 +482,9 @@ var _ = Describe("sbr test", func() { // Check results. We expect all the routes on net1 to have moved to // table 100 except for local routes (table 255); a new default gateway -<<<<<<< HEAD - // route to have been created; and 2 rules to exist. -======= // route to have been created; and 2 rules to exist. There will be no // interface rules, because they don't make sense when there are multiple // IPs for a single interface ->>>>>>> 1a633d52 (sbr: fix code and tests) expNet1 := oldStatus.Devices[0] expEth0 := oldStatus.Devices[1] @@ -528,21 +526,13 @@ var _ = Describe("sbr test", func() { }) // 2 Rules will be created for each IP address. (100, 101) -<<<<<<< HEAD -======= // 2 Rules will also be created for each interface ->>>>>>> 1a633d52 (sbr: fix code and tests) Expect(newStatus.Rules).To(HaveLen(2)) // First entry corresponds to last table Expect(newStatus.Rules[0].Table).To(Equal(101)) Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.101.209/32")) -<<<<<<< HEAD - // Second entry corresponds to first table (100) -======= - // Third entry corresponds to first table (100) ->>>>>>> 1a633d52 (sbr: fix code and tests) Expect(newStatus.Rules[1].Table).To(Equal(100)) Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) From 9f8e77937535ef88e94f264719fbd4fa47e14999 Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 11:03:30 +0000 Subject: [PATCH 3/9] sbr: Update go.mod and go.sum Signed-off-by: Neil Cook --- go.mod | 5 +++++ go.sum | 31 +++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/go.mod b/go.mod index d81a6f492..60f854452 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,9 @@ require ( github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/typeurl/v2 v2.2.0 // indirect + github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-logr/logr v1.4.2 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -37,6 +39,8 @@ require ( github.com/josharian/native v1.1.0 // indirect github.com/mdlayher/packet v1.1.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -50,5 +54,6 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/grpc v1.67.0 // indirect google.golang.org/protobuf v1.36.1 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d5dc9ac3f..714f9f177 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,13 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -54,6 +59,7 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -66,6 +72,7 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis= github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 h1:hxST5pwMBEOWmxpkX20w9oZG+hXdhKmAIPQ3NGGAxas= @@ -84,8 +91,17 @@ github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= github.com/networkplumbing/go-nft v0.4.0 h1:kExVMwXW48DOAukkBwyI16h4uhE5lN9iMvQd52lpTyU= github.com/networkplumbing/go-nft v0.4.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opencontainers/selinux v1.11.1 h1:nHFvthhM0qY8/m+vfhJylliSshm8G1jJ2jDMcgULaH8= @@ -105,6 +121,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -134,11 +151,13 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= @@ -154,10 +173,16 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -179,6 +204,7 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= @@ -214,7 +240,12 @@ google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/g google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= From 45f29617021bd5dab821672f0f030ba1ac9b8b9b Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 11:04:00 +0000 Subject: [PATCH 4/9] sbr: Update vendored modules Signed-off-by: Neil Cook --- vendor/modules.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/vendor/modules.txt b/vendor/modules.txt index f6251a2b1..246ee5fef 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -77,10 +77,14 @@ github.com/coreos/go-iptables/iptables # github.com/coreos/go-systemd/v22 v22.5.0 ## explicit; go 1.12 github.com/coreos/go-systemd/v22/activation +# github.com/fsnotify/fsnotify v1.4.9 +## explicit; go 1.13 # github.com/go-logr/logr v1.4.2 ## explicit; go 1.18 github.com/go-logr/logr github.com/go-logr/logr/funcr +# github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 +## explicit; go 1.13 # github.com/go-task/slim-sprig/v3 v3.0.0 ## explicit; go 1.20 github.com/go-task/slim-sprig/v3 @@ -128,6 +132,10 @@ github.com/networkplumbing/go-nft/nft github.com/networkplumbing/go-nft/nft/config github.com/networkplumbing/go-nft/nft/exec github.com/networkplumbing/go-nft/nft/schema +# github.com/nxadm/tail v1.4.8 +## explicit; go 1.13 +# github.com/onsi/ginkgo v1.16.5 +## explicit; go 1.16 # github.com/onsi/ginkgo/v2 v2.22.2 ## explicit; go 1.22.0 github.com/onsi/ginkgo/v2 @@ -286,6 +294,8 @@ google.golang.org/protobuf/reflect/protoregistry google.golang.org/protobuf/runtime/protoiface google.golang.org/protobuf/runtime/protoimpl google.golang.org/protobuf/types/known/anypb +# gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 +## explicit # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 From 01a9e6655e51a14d48255fbf8cd22d47c75aba73 Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 14:31:39 +0000 Subject: [PATCH 5/9] sbr: Remove invalid comment in sbr_linux_test.go Signed-off-by: Neil Cook --- plugins/meta/sbr/sbr_linux_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/meta/sbr/sbr_linux_test.go b/plugins/meta/sbr/sbr_linux_test.go index f83239940..b0497876d 100644 --- a/plugins/meta/sbr/sbr_linux_test.go +++ b/plugins/meta/sbr/sbr_linux_test.go @@ -526,7 +526,6 @@ var _ = Describe("sbr test", func() { }) // 2 Rules will be created for each IP address. (100, 101) - // 2 Rules will also be created for each interface Expect(newStatus.Rules).To(HaveLen(2)) // First entry corresponds to last table From 421da89d8e47adf945b7c5d0052a57c5bac383ab Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Sun, 26 Jan 2025 14:45:42 +0000 Subject: [PATCH 6/9] sbr: Run go mod tidy and go mod vendor Signed-off-by: Neil Cook --- go.mod | 5 ----- go.sum | 31 ------------------------------- vendor/modules.txt | 10 ---------- 3 files changed, 46 deletions(-) diff --git a/go.mod b/go.mod index 60f854452..d81a6f492 100644 --- a/go.mod +++ b/go.mod @@ -28,9 +28,7 @@ require ( github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/typeurl/v2 v2.2.0 // indirect - github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/go-logr/logr v1.4.2 // indirect - github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect @@ -39,8 +37,6 @@ require ( github.com/josharian/native v1.1.0 // indirect github.com/mdlayher/packet v1.1.2 // indirect github.com/mdlayher/socket v0.5.1 // indirect - github.com/nxadm/tail v1.4.8 // indirect - github.com/onsi/ginkgo v1.16.5 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -54,6 +50,5 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/grpc v1.67.0 // indirect google.golang.org/protobuf v1.36.1 // indirect - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 714f9f177..d5dc9ac3f 100644 --- a/go.sum +++ b/go.sum @@ -32,13 +32,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -59,7 +54,6 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -72,7 +66,6 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714 h1:/jC7qQFrv8CrSJVmaolDVOxTfS9kc36uB6H40kdbQq8= github.com/hugelgupf/socketpair v0.0.0-20190730060125-05d35a94e714/go.mod h1:2Goc3h8EklBH5mspfHFxBnEoURQCGzQQH1ga9Myjvis= github.com/insomniacslk/dhcp v0.0.0-20240829085014-a3a4c1f04475 h1:hxST5pwMBEOWmxpkX20w9oZG+hXdhKmAIPQ3NGGAxas= @@ -91,17 +84,8 @@ github.com/mdlayher/socket v0.5.1 h1:VZaqt6RkGkt2OE9l3GcC6nZkqD3xKeQLyfleW/uBcos github.com/mdlayher/socket v0.5.1/go.mod h1:TjPLHI1UgwEv5J1B5q0zTZq12A/6H7nKmtTanQE37IQ= github.com/networkplumbing/go-nft v0.4.0 h1:kExVMwXW48DOAukkBwyI16h4uhE5lN9iMvQd52lpTyU= github.com/networkplumbing/go-nft v0.4.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opencontainers/selinux v1.11.1 h1:nHFvthhM0qY8/m+vfhJylliSshm8G1jJ2jDMcgULaH8= @@ -121,7 +105,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= @@ -151,13 +134,11 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= @@ -173,16 +154,10 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -204,7 +179,6 @@ golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= @@ -240,12 +214,7 @@ google.golang.org/protobuf v1.36.1 h1:yBPeRvTftaleIgM3PZ/WBIZ7XM/eEYAaEyCwvyjq/g google.golang.org/protobuf v1.36.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/modules.txt b/vendor/modules.txt index 246ee5fef..f6251a2b1 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -77,14 +77,10 @@ github.com/coreos/go-iptables/iptables # github.com/coreos/go-systemd/v22 v22.5.0 ## explicit; go 1.12 github.com/coreos/go-systemd/v22/activation -# github.com/fsnotify/fsnotify v1.4.9 -## explicit; go 1.13 # github.com/go-logr/logr v1.4.2 ## explicit; go 1.18 github.com/go-logr/logr github.com/go-logr/logr/funcr -# github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 -## explicit; go 1.13 # github.com/go-task/slim-sprig/v3 v3.0.0 ## explicit; go 1.20 github.com/go-task/slim-sprig/v3 @@ -132,10 +128,6 @@ github.com/networkplumbing/go-nft/nft github.com/networkplumbing/go-nft/nft/config github.com/networkplumbing/go-nft/nft/exec github.com/networkplumbing/go-nft/nft/schema -# github.com/nxadm/tail v1.4.8 -## explicit; go 1.13 -# github.com/onsi/ginkgo v1.16.5 -## explicit; go 1.16 # github.com/onsi/ginkgo/v2 v2.22.2 ## explicit; go 1.22.0 github.com/onsi/ginkgo/v2 @@ -294,8 +286,6 @@ google.golang.org/protobuf/reflect/protoregistry google.golang.org/protobuf/runtime/protoiface google.golang.org/protobuf/runtime/protoimpl google.golang.org/protobuf/types/known/anypb -# gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 -## explicit # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 From 299385f746d71fd90f37152005164a578cb4d82e Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Tue, 4 Mar 2025 14:49:25 +0000 Subject: [PATCH 7/9] sbr: Move source interface rule creation out of ipCfg loop The outbound interface rule does not reference anything from ipCfg so should not be in the loop. Signed-off-by: Neil Cook --- plugins/meta/sbr/main.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/plugins/meta/sbr/main.go b/plugins/meta/sbr/main.go index 335cc9cef..bfdde4b1e 100644 --- a/plugins/meta/sbr/main.go +++ b/plugins/meta/sbr/main.go @@ -259,17 +259,6 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { return fmt.Errorf("Failed to add src rule: %v", err) } - // Only add an interface rule if there is 1 IP address configured on the interface - if len(ipCfgs) == 1 { - interfaceRule := netlink.NewRule() - interfaceRule.Table = table - log.Printf("Interface to use %s", iface) - interfaceRule.OifName = iface - - if err = netlink.RuleAdd(interfaceRule); err != nil { - return fmt.Errorf("Failed to add interface rule: %v", err) - } - } // Add a default route, since this may have been removed by previous // plugin. if ipCfg.Gateway != nil { @@ -330,6 +319,18 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { table = getNextTableID(rules, routes, table) } + // Add an interface rule, only if there is a single IP address configured on the interface + if len(ipCfgs) == 1 { + interfaceRule := netlink.NewRule() + interfaceRule.Table = table + log.Printf("Interface to use %s", iface) + interfaceRule.OifName = iface + + if err = netlink.RuleAdd(interfaceRule); err != nil { + return fmt.Errorf("Failed to add interface rule: %v", err) + } + } + // Delete all the interface routes in the default routing table, which were // copied to source based routing tables. // Not deleting them while copying to accommodate for multiple ipCfgs from From eeac7bcca7c0ab0756b3ebafdce95c69a75b53bc Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Wed, 5 Mar 2025 09:15:05 +0000 Subject: [PATCH 8/9] sbr: Move outbound interface rule before the ipCfg loop so that the table no is correct The previous commit moved the rule creation to after the ipCfg loop, but since the loop increments the table number, the rule gets added to the wrong table. Signed-off-by: Neil Cook --- plugins/meta/sbr/main.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/meta/sbr/main.go b/plugins/meta/sbr/main.go index bfdde4b1e..25f02ef66 100644 --- a/plugins/meta/sbr/main.go +++ b/plugins/meta/sbr/main.go @@ -231,6 +231,18 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { linkIndex := link.Attrs().Index + // Add an interface rule, only if there is a single IP address configured on the interface + if len(ipCfgs) == 1 { + interfaceRule := netlink.NewRule() + interfaceRule.Table = table + log.Printf("Interface to use %s", iface) + interfaceRule.OifName = iface + + if err = netlink.RuleAdd(interfaceRule); err != nil { + return fmt.Errorf("Failed to add interface rule: %v", err) + } + } + // Get all routes for the interface in the default routing table routes, err = netlink.RouteList(link, netlink.FAMILY_ALL) if err != nil { @@ -319,18 +331,6 @@ func doRoutes(ipCfgs []*current.IPConfig, iface string) error { table = getNextTableID(rules, routes, table) } - // Add an interface rule, only if there is a single IP address configured on the interface - if len(ipCfgs) == 1 { - interfaceRule := netlink.NewRule() - interfaceRule.Table = table - log.Printf("Interface to use %s", iface) - interfaceRule.OifName = iface - - if err = netlink.RuleAdd(interfaceRule); err != nil { - return fmt.Errorf("Failed to add interface rule: %v", err) - } - } - // Delete all the interface routes in the default routing table, which were // copied to source based routing tables. // Not deleting them while copying to accommodate for multiple ipCfgs from From 441b778a0574e65897f9cc641f3eee3a0beff74e Mon Sep 17 00:00:00 2001 From: Neil Cook Date: Wed, 5 Mar 2025 09:44:39 +0000 Subject: [PATCH 9/9] sbr: Adjust tests to reflect the different ordering of rules Moving the outbound interface rule creation to before the ipCfg loop means that tests need to reflect the changed order of rules. Signed-off-by: Neil Cook --- plugins/meta/sbr/sbr_linux_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/meta/sbr/sbr_linux_test.go b/plugins/meta/sbr/sbr_linux_test.go index b0497876d..5546dafbe 100644 --- a/plugins/meta/sbr/sbr_linux_test.go +++ b/plugins/meta/sbr/sbr_linux_test.go @@ -306,10 +306,10 @@ var _ = Describe("sbr test", func() { Expect(newStatus.Rules).To(HaveLen(2)) Expect(newStatus.Rules[0].Table).To(Equal(100)) - Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.1.209/32")) Expect(newStatus.Rules[1].Table).To(Equal(100)) - Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) + Expect(newStatus.Rules[1].OifName).To(Equal("net1")) devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1] @@ -409,10 +409,10 @@ var _ = Describe("sbr test", func() { Expect(newStatus.Rules).To(HaveLen(2)) Expect(newStatus.Rules[0].Table).To(Equal(100)) - Expect(newStatus.Rules[0].OifName).To(Equal("net1")) + Expect(newStatus.Rules[0].Src.String()).To(Equal("192.168.1.209/32")) Expect(newStatus.Rules[1].Table).To(Equal(100)) - Expect(newStatus.Rules[1].Src.String()).To(Equal("192.168.1.209/32")) + Expect(newStatus.Rules[1].OifName).To(Equal("net1")) devNet1 := newStatus.Devices[0] devEth0 := newStatus.Devices[1]