interfaces.sort( compare_by('is_primary') )
interfaces.reverse()
+ # The names of the bridge devices
+ bridgeDevices = []
+
for interface in interfaces:
logger.verbose('net:InitInterfaces interface %d: %r'%(device_id,interface))
logger.verbose('net:InitInterfaces macs = %r' % macs)
details = prepDetails(interface, hostname)
+ if interface['is_primary']:
+ gateway = interface['gateway']
+
if 'interface_tag_ids' in interface:
version = 4.3
interface_tag_ids = "interface_tag_ids"
else:
logger.log("net:InitInterfaces WARNING: interface alias (%s) not matched to an interface"% details['ALIAS'])
device_id -= 1
- elif 'BRIDGE' in details:
- #The bridge inherits the mac of the first attached interface.
- if 'IFNAME' in details:
- ifname = details['IFNAME']
- device_id -= 1
- elif orig_ifname:
- ifname = orig_ifname
- device_id -= 1
- if 'PRIMARY' in details: del details['PRIMARY']
+ elif 'BRIDGE' in details and 'IFNAME' in details:
+ # The bridge inherits the mac of the first attached interface.
+ ifname = details['IFNAME']
+ device_id -= 1
logger.log('net:InitInterfaces: Bridge detected. Adding %s to devices_map' % ifname)
- devices_map[ifname] = details
+ devices_map[ifname] = removeBridgedIfaceDetails(details)
bridgeName = details['BRIDGE']
logger.log('net:InitInterfaces: Adding bridge %s' % bridgeName)
bridgeDetails = prepDetails(interface)
+ bridgeDevices.append(bridgeName)
bridgeDetails['TYPE'] = 'Bridge'
devices_map[bridgeName] = bridgeDetails
else:
# handle those correctly
if getvar("SLAVE") == 'yes': continue
+ # Delay bringing up any bridge devices
+ if dev in bridgeDevices: continue
+
if not files_only:
logger.verbose('net:InitInterfaces bringing up %s' % dev)
os.system("/sbin/ifup %s" % dev)
+ # Bring up the bridge devices
+ for bridge in bridgeDevices:
+ if not files_only and bridge in newdevs:
+ logger.verbose('net:InitInterfaces bringing up bridge %s' % bridge)
+ os.system("/sbin/ifup %s" % bridge)
+
##
# Prepare the interface details.
#
details['NETMASK'] = interface['netmask']
details['GATEWAY'] = interface['gateway']
if interface['is_primary']:
- gateway = interface['gateway']
if interface['dns1']:
details['DNS1'] = interface['dns1']
if interface['dns2']:
return details
+##
+# Remove duplicate entry from the bridged interface's configuration file.
+#
+def removeBridgedIfaceDetails(details):
+ for key in [ 'PRIMARY', 'PERSISTENT_DHCLIENT', 'DHCLIENTARGS', 'DHCP_HOSTNAME',
+ 'BOOTPROTO', 'IPADDR', 'NETMASK', 'GATEWAY', 'DNS1', 'DNS2' ]:
+ if key in details:
+ del details[key]
+ return details
+
if __name__ == "__main__":
import optparse
import sys