From 05fe504c5effa3a720020eacf80f682bb5fc0986 Mon Sep 17 00:00:00 2001 From: Tomas Hruby Date: Wed, 5 Jun 2024 14:36:32 -0700 Subject: [PATCH] Cleanup bpfin/out.cali when BPF is turned off --- felix/dataplane/linux/bpf_ep_mgr.go | 16 ++++++++++++++++ felix/dataplane/linux/int_dataplane.go | 1 + felix/fv/bpf_test.go | 7 ++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/felix/dataplane/linux/bpf_ep_mgr.go b/felix/dataplane/linux/bpf_ep_mgr.go index 0d92bbcd3a8..b3c01ff7aff 100644 --- a/felix/dataplane/linux/bpf_ep_mgr.go +++ b/felix/dataplane/linux/bpf_ep_mgr.go @@ -4024,3 +4024,19 @@ func (pa *jumpMapAlloc) checkFreeLockHeld(idx int) { }).Panic("jumpMapAlloc: Free set and free stack got out of sync") } } + +func removeBPFSpecialDevices() { + bpfin, err := netlink.LinkByName(bpfInDev) + if err != nil { + if errors.Is(err, netlink.LinkNotFoundError{}) { + return + } + log.WithError(err).Warnf("Failed to make sure that %s/%s device is (not) present.", bpfInDev, bpfOutDev) + return + } + + err = netlink.LinkDel(bpfin) + if err != nil { + log.WithError(err).Warnf("Failed to remove %s/%s device.", bpfInDev, bpfOutDev) + } +} diff --git a/felix/dataplane/linux/int_dataplane.go b/felix/dataplane/linux/int_dataplane.go index 673386103ca..964a3937f42 100644 --- a/felix/dataplane/linux/int_dataplane.go +++ b/felix/dataplane/linux/int_dataplane.go @@ -634,6 +634,7 @@ func NewIntDataplaneDriver(config Config) *InternalDataplane { log.WithError(err).Info("Failed to remove BPF connect-time load balancer, ignoring.") } tc.CleanUpProgramsAndPins() + removeBPFSpecialDevices() } else { // In BPF mode we still use iptables for raw egress policy. dp.RegisterManager(newRawEgressPolicyManager(rawTableV4, ruleRenderer, 4, ipSetsV4.SetFilter)) diff --git a/felix/fv/bpf_test.go b/felix/fv/bpf_test.go index c18bfc425f0..6a40e0b7bc2 100644 --- a/felix/fv/bpf_test.go +++ b/felix/fv/bpf_test.go @@ -1090,7 +1090,7 @@ func describeBPFTests(opts ...bpfTestOpt) bool { It("should cleanup after we disable eBPF", func() { By("Waiting for dp to get setup up") - ensureAllNodesBPFProgramsAttached(tc.Felixes) + ensureBPFProgramsAttached(tc.Felixes[0], "bpfout.cali") By("Changing env and restarting felix") @@ -1112,6 +1112,11 @@ func describeBPFTests(opts ...bpfTestOpt) bool { out, _ := tc.Felixes[0].ExecOutput("bpftool", "-jp", "map", "show") return out }, "15s", "1s").ShouldNot(Or(ContainSubstring("cali_"), ContainSubstring("xdp_cali_"))) + + out, _ := tc.Felixes[0].ExecCombinedOutput("ip", "link", "show", "dev", "bpfin.cali") + Expect(out).To(Equal("Device \"bpfin.cali\" does not exist.\n")) + out, _ = tc.Felixes[0].ExecCombinedOutput("ip", "link", "show", "dev", "bpfout.cali") + Expect(out).To(Equal("Device \"bpfout.cali\" does not exist.\n")) }) } })