From cedbf1073d9dbf42c62add7788ae4bcb7e176966 Mon Sep 17 00:00:00 2001 From: Quique Llorente Date: Mon, 1 Feb 2021 15:08:28 +0100 Subject: [PATCH] Skip linux-bridge filtering if no "bridge" section We have found that at some envs the "bridge" section from linux-bridge is not present in case the bridge is down, this change ignore the filtering in this is the case to preveng a segmentation fault. Signed-off-by: Quique Llorente --- pkg/state/filter.go | 19 ++++++++++-- pkg/state/filter_test.go | 62 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/pkg/state/filter.go b/pkg/state/filter.go index cb7d4c55f0..a98ad6a851 100644 --- a/pkg/state/filter.go +++ b/pkg/state/filter.go @@ -58,9 +58,24 @@ func filterOutDynamicAttributes(iface map[string]interface{}) { return } - bridge := iface["bridge"].(map[string]interface{}) + bridgeIface, ok := iface["bridge"] + if !ok { + return + } + bridge, ok := bridgeIface.(map[string]interface{}) + if !ok { + return + } + + optionsIface, ok := bridge["options"] + if !ok { + return + } + options, ok := optionsIface.(map[string]interface{}) + if !ok { + return + } - options := bridge["options"].(map[string]interface{}) delete(options, "gc-timer") delete(options, "hello-timer") } diff --git a/pkg/state/filter_test.go b/pkg/state/filter_test.go index 3f49f13a09..1549daab00 100644 --- a/pkg/state/filter_test.go +++ b/pkg/state/filter_test.go @@ -307,4 +307,66 @@ routes: Expect(returnedState).To(MatchYAML(filteredState)) }) }) + Context("when there is a linux bridge without 'bridge' options because is down", func() { + BeforeEach(func() { + state = nmstate.NewState(` +interfaces: +- name: eth1 + state: up + type: ethernet +- name: br1 + type: linux-bridge + state: down + ipv4: + enabled: false + ipv6: + enabled: false + lldp: + enabled: false + mac-address: A2:EE:84:7B:42:4C + mtu: 1500 +routes: + config: [] + running: + - destination: 0.0.0.0/0 + metric: 102 + next-hop-address: 192.168.66.2 + next-hop-interface: eth1 + table-id: 254 +`) + + filteredState = nmstate.NewState(` +interfaces: +- name: eth1 + state: up + type: ethernet +- name: br1 + type: linux-bridge + state: down + ipv4: + enabled: false + ipv6: + enabled: false + lldp: + enabled: false + mac-address: A2:EE:84:7B:42:4C + mtu: 1500 +routes: + config: [] + running: + - destination: 0.0.0.0/0 + metric: 102 + next-hop-address: 192.168.66.2 + next-hop-interface: eth1 + table-id: 254 +`) + interfacesFilterGlob = glob.MustCompile("") + }) + It("should keep the bridge as it is", func() { + returnedState, err := filterOut(state, interfacesFilterGlob) + Expect(err).ToNot(HaveOccurred()) + Expect(returnedState).To(MatchYAML(filteredState)) + }) + }) + })