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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user