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

Make bridge module the owner of bridge port links (This is to delay

bridge port up until bridge is up)

Ticket:
Reviewed By:
Testing Done:
This commit is contained in:
Roopa Prabhu
2014-12-11 19:06:21 -08:00
parent 3980661f16
commit a193f425f5

View File

@ -218,6 +218,7 @@ class bridge(moduleBase):
def get_dependent_ifacenames(self, ifaceobj, ifacenames_all=None):
if not self._is_bridge(ifaceobj):
return None
ifaceobj.link_type = ifaceLinkType.LINK_MASTER
return self.parse_port_list(ifaceobj.get_attr_value_first(
'bridge-ports'), ifacenames_all)
@ -276,18 +277,22 @@ class bridge(moduleBase):
def _add_ports(self, ifaceobj):
bridgeports = self._get_bridge_port_list(ifaceobj)
runningbridgeports = []
newbridgeports = []
self.ipcmd.batch_start()
self._process_bridge_waitport(ifaceobj, bridgeports)
# Delete active ports not in the new port list
if not self.PERFMODE:
runningbridgeports = self.brctlcmd.get_bridge_ports(ifaceobj.name)
if runningbridgeports:
[self.ipcmd.link_set(bport, 'nomaster')
for bport in runningbridgeports
if not bridgeports or bport not in bridgeports]
for bport in runningbridgeports:
if not bridgeports or bport not in bridgeports:
self.ipcmd.link_set(bport, 'nomaster')
self.ipcmd.link_set(bport, 'down')
else:
runningbridgeports = []
if not bridgeports:
self.ipcmd.batch_commit()
return
err = 0
for bridgeport in Set(bridgeports).difference(Set(runningbridgeports)):
@ -301,8 +306,12 @@ class bridge(moduleBase):
self.write_file('/proc/sys/net/ipv6/conf/%s' %bridgeport +
'/disable_ipv6', '1')
self.ipcmd.addr_flush(bridgeport)
newbridgeports.append(bridgeport)
except Exception, e:
self.log_error(str(e))
self.logger.error(str(e))
pass
[self.ipcmd.link_set(p, 'up') for p in newbridgeports]
self.ipcmd.batch_commit()
if err:
self.log_error('bridge configuration failed (missing ports)')
@ -784,7 +793,6 @@ class bridge(moduleBase):
link_exists = False
porterr = False
porterrstr = ''
self.ipcmd.batch_start()
if not self.PERFMODE:
if not self.ipcmd.link_exists(ifaceobj.name):
self.ipcmd.link_create(ifaceobj.name, 'bridge')
@ -797,8 +805,6 @@ class bridge(moduleBase):
porterr = True
porterrstr = str(e)
pass
finally:
self.ipcmd.batch_commit()
self._apply_bridge_settings(ifaceobj)
self._apply_bridge_port_settings_all(ifaceobj,
ifaceobj_getfunc=ifaceobj_getfunc)
@ -815,12 +821,13 @@ class bridge(moduleBase):
try:
if ifaceobj.get_attr_value_first('bridge-ports'):
ports = self.brctlcmd.get_bridge_ports(ifaceobj.name)
self.brctlcmd.delete_bridge(ifaceobj.name)
if ports:
for p in ports:
proc_file = ('/proc/sys/net/ipv6/conf/%s' %p +
'/disable_ipv6')
self.write_file(proc_file, '0')
self.brctlcmd.delete_bridge(ifaceobj.name)
rtnetlink_api.rtnl_api.link_set(p, "down")
except Exception, e:
self.log_error(str(e))