1
0
mirror of https://github.com/CumulusNetworks/ifupdown2.git synced 2024-05-06 15:54:50 +00:00

addons: bridge: read bridge multicast_v4_queriers from sysfs

➜  ~ ifquery -a
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto br0
iface br0
      bridge-ports swp2
      bridge-mcqv4src 100=172.16.100.1 101=172.16.101.1

➜  ~ ifup br0 -v
...
info: executing /sbin/brctl showmcqv4src br0
info: executing /sbin/brctl setmcqv4src br0 100 172.16.100.1
info: executing /sbin/brctl setmcqv4src br0 101 172.16.101.1
...
➜  ~ ifquery br0 -c
auto br0
iface br0                                                           [pass]
      bridge-ports swp2                                           [pass]
      bridge-mcqv4src 100=172.16.100.1 101=172.16.101.1           [pass]

➜  ~

Signed-off-by: Julien Fortin <julien@cumulusnetworks.com>
This commit is contained in:
Julien Fortin
2018-10-02 18:43:50 +02:00
parent 3c572e6ac0
commit d00f527807
3 changed files with 30 additions and 5 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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: