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