diff --git a/ifupdown2/addons/bridge.py b/ifupdown2/addons/bridge.py index c25f12f..fd2e28c 100644 --- a/ifupdown2/addons/bridge.py +++ b/ifupdown2/addons/bridge.py @@ -1112,7 +1112,7 @@ class bridge(moduleBase): if attrval: running_mcqv4src = {} if not ifupdownflags.flags.PERFMODE: - running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src(ifaceobj.name) + running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src_sysfs(ifaceobj.name) mcqs = {} srclist = attrval.split() for s in srclist: @@ -1125,7 +1125,7 @@ class bridge(moduleBase): for v in mcqs.keys(): self.brctlcmd.bridge_set_mcqv4src(ifaceobj.name, v, mcqs[v]) elif not ifupdownflags.flags.PERFMODE: - running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src(ifaceobj.name) + running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src_sysfs(ifaceobj.name) if running_mcqv4src: for v in running_mcqv4src.keys(): self.brctlcmd.bridge_del_mcqv4src(ifaceobj.name, v) @@ -2299,7 +2299,7 @@ class bridge(moduleBase): return running_attrs def _query_running_mcqv4src(self, ifaceobjrunning): - running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src(ifaceobjrunning.name) + running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src_sysfs(ifaceobjrunning.name) mcqs = ['%s=%s' %(v, i) for v, i in running_mcqv4src.items()] mcqs.sort() mcq = ' '.join(mcqs) diff --git a/ifupdown2/addons/bridgevlan.py b/ifupdown2/addons/bridgevlan.py index aadecc8..3cc4fb8 100644 --- a/ifupdown2/addons/bridgevlan.py +++ b/ifupdown2/addons/bridgevlan.py @@ -79,7 +79,7 @@ class bridgevlan(moduleBase): running_mcqv4src = {} if not ifupdownflags.flags.PERFMODE: - running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src(bridgename) + running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src_sysfs(bridgename) if running_mcqv4src: r_mcqv4src = running_mcqv4src.get(vlan) else: @@ -115,7 +115,7 @@ class bridgevlan(moduleBase): def _query_running_bridge_igmp_querier_src(self, ifaceobj): (bridgename, vlanid) = ifaceobj.name.split('.') - running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src(bridgename) + running_mcqv4src = self.brctlcmd.bridge_get_mcqv4src_sysfs(bridgename) if running_mcqv4src: return running_mcqv4src.get(vlanid) return None diff --git a/ifupdown2/ifupdownaddons/LinkUtils.py b/ifupdown2/ifupdownaddons/LinkUtils.py index a0c7c63..ab1dd6e 100644 --- a/ifupdown2/ifupdownaddons/LinkUtils.py +++ b/ifupdown2/ifupdownaddons/LinkUtils.py @@ -2595,6 +2595,31 @@ class LinkUtils(utilsBase): return mcqv4src.get(vlan) return mcqv4src + def bridge_get_mcqv4src_sysfs(self, bridge, vlan=None): + if not LinkUtils.bridge_utils_is_installed: + return {} + if not self.supported_command['showmcqv4src']: + return {} + if ifupdownflags.flags.PERFMODE: + return {} + mcqv4src = {} + try: + filename = '/sys/class/net/%s/bridge/multicast_v4_queriers' % bridge + if os.path.exists(filename): + for line in self.read_file(filename) or []: + vlan_id, ip = line.split('=') + mcqv4src[vlan_id] = ip.strip() + except Exception as e: + s = str(e).lower() + msg = ('%s showmcqv4src: skipping unsupported command' + % utils.brctl_cmd) + self.logger.info(msg) + self.supported_command['showmcqv4src'] = False + return {} + if vlan: + return mcqv4src.get(vlan) + return mcqv4src + @staticmethod def bridge_set_mclmi(bridge, mclmi): if not LinkUtils.bridge_utils_is_installed: