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