Change in vdsm[master]: Only assign layer 3 parameters to topmost interface

wudxw at linux.vnet.ibm.com wudxw at linux.vnet.ibm.com
Thu Jan 24 09:33:11 UTC 2013


Mark Wu has uploaded a new change for review.

Change subject: Only assign layer 3 parameters to topmost interface
......................................................................

Only assign layer 3 parameters to topmost interface

This patch changes to configure bare interfaces without any layer 3
parameters, and assign the l3 info to the topmost interface at last.
Then we don't need to care about resetting the parameters.

Change-Id: I3d430879cdfcc74ff133ac03ead74305fa3baf06
Signed-off-by: Mark Wu <wudxw at linux.vnet.ibm.com>
---
M vdsm/configNetwork.py
1 file changed, 46 insertions(+), 44 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/55/11355/1

diff --git a/vdsm/configNetwork.py b/vdsm/configNetwork.py
index bfdd505..27d722a 100755
--- a/vdsm/configNetwork.py
+++ b/vdsm/configNetwork.py
@@ -446,16 +446,13 @@
 
         self.writeConfFile(netinfo.NET_CONF_PREF + name, cfg)
 
-    def addBridge(self, name, ipaddr=None, netmask=None, mtu=None,
-                  gateway=None, bootproto=None, delay='0', onboot='yes',
+    def addBridge(self, name, mtu=None, delay='0', onboot='yes',
                   **kwargs):
         """ Create ifcfg-* file with proper fields for bridge """
         conf = 'TYPE=Bridge\nDELAY=%s\n' % pipes.quote(delay)
-        self._createConfFile(conf, name, ipaddr, netmask, gateway,
-                             bootproto, mtu, onboot, **kwargs)
+        self._createConfFile(conf, name, mtu, onboot, **kwargs)
 
     def addVlan(self, vlanId, iface, network, mtu=None, bridged=True,
-                ipaddr=None, netmask=None, gateway=None, bootproto=None,
                 onboot='yes', **kwargs):
         """ Create ifcfg-* file with proper fields for VLAN """
         name = '%s.%s' % (pipes.quote(iface), vlanId)
@@ -463,11 +460,9 @@
         if bridged:
             conf += 'BRIDGE=%s\n' % pipes.quote(network)
 
-        self._createConfFile(conf, name, ipaddr, netmask, gateway,
-                             bootproto, mtu, onboot, **kwargs)
+        self._createConfFile(conf, name, mtu, onboot, **kwargs)
 
     def addBonding(self, bonding, bridge=None, bondingOptions=None, mtu=None,
-                   ipaddr=None, netmask=None, gateway=None, bootproto=None,
                    onboot='yes', **kwargs):
         """ Create ifcfg-* file with proper fields for bond """
         if not bondingOptions:
@@ -479,14 +474,15 @@
 
         if ifaceUsers(bonding):
             confParams = netinfo.getIfaceCfg(bonding)
-            if not ipaddr:
-                ipaddr = confParams.get('IPADDR', None)
-                netmask = confParams.get('NETMASK', None)
-                gateway = confParams.get('GATEWAY', None)
+            ipaddr = confParams.get('IPADDR', None)
+            netmask = confParams.get('NETMASK', None)
+            gateway = confParams.get('GATEWAY', None)
             if not mtu:
                 mtu = confParams.get('MTU', None)
                 if mtu:
                     mtu = int(mtu)
+        else:
+            ipaddr = netmask = gateway = bootproto = None
 
         self._createConfFile(conf, bonding, ipaddr, netmask, gateway,
                              bootproto, mtu, onboot, **kwargs)
@@ -497,7 +493,6 @@
             open(bondMastersPath, 'w').write('+%s\n' % bonding)
 
     def addNic(self, nic, bonding=None, bridge=None, mtu=None,
-               ipaddr=None, netmask=None, gateway=None, bootproto=None,
                onboot='yes', **kwargs):
         """ Create ifcfg-* file with proper fields for NIC """
         _netinfo = netinfo.NetInfo()
@@ -512,17 +507,28 @@
 
         if ifaceUsers(nic):
             confParams = netinfo.getIfaceCfg(nic)
-            if not ipaddr:
-                ipaddr = confParams.get('IPADDR', None)
-                netmask = confParams.get('NETMASK', None)
-                gateway = confParams.get('GATEWAY', None)
+            ipaddr = confParams.get('IPADDR', None)
+            netmask = confParams.get('NETMASK', None)
+            gateway = confParams.get('GATEWAY', None)
             if not mtu:
                 mtu = confParams.get('MTU', None)
                 if mtu:
                     mtu = int(mtu)
+        else:
+            ipaddr = netmask = gateway = bootproto = None
 
         self._createConfFile(conf, nic, ipaddr, netmask, gateway,
                              bootproto, mtu, onboot, **kwargs)
+
+    def updateTopIface(self, topIface, ipaddr=None, netmask=None, gateway=None,
+                       bootproto=None):
+        cf = netinfo.NET_CONF_PREF + topIface
+        l3Info = {'IPADDR': ipaddr, 'NETMASK': netmask, 'GATEWAY': gateway,
+                  'BOOTPROTO': bootproto or 'none'}
+        for entry, value in l3Info.iteritems():
+            if not value:
+                delete = True
+            self._updateConfigValue(cf, entry, value, delete)
 
     def removeNic(self, nic):
         cf = netinfo.NET_CONF_PREF + nic
@@ -924,6 +930,14 @@
 
     nic = nics[0] if nics else None
     iface = bonding or nic
+    if bridged:
+        topIface = network
+    elif vlan:
+        topIface = iface + '.' + vlan
+    else:
+        topIface = iface
+
+    bootproto = options.get('bootproto')
     blockingDhcp = utils.tobool(options.get('blockingdhcp'))
 
     # take down nics that need to be changed
@@ -934,16 +948,8 @@
                 ifdown(nic)
 
     if bridged:
-        configWriter.addBridge(network, ipaddr=ipaddr, netmask=netmask,
-                               mtu=mtu, gateway=gateway, **options)
+        configWriter.addBridge(network, mtu=mtu, **options)
         ifdown(network)
-        # We need to define (if requested) ip, mask & gateway on ifcfg-*
-        # only on most top device according to following order:
-        # bridge -> vlan -> bond -> nic
-        # For lower level devices we should ignore it.
-        # reset ip, netmask, gateway and bootproto for lower level devices
-        bridgeBootproto = options.get('bootproto')
-        ipaddr = netmask = gateway = options['bootproto'] = None
 
     # For VLAN we should attach bridge only to the VLAN device
     # rather than to underlying NICs or bond
@@ -957,44 +963,40 @@
         # don't ifup VLAN interface here, it should be done last,
         # after the bond and nic up
         configWriter.addVlan(vlan, iface, network=brName,
-                             mtu=mtu, bridged=bridged,
-                             ipaddr=ipaddr, netmask=netmask,
-                             gateway=gateway, **options)
+                             mtu=mtu, bridged=bridged, **options)
         iface += '.' + vlan
-        vlanBootproto = options.get('bootproto')
-        # reset ip, netmask, gateway and bootproto for lower level devices
-        ipaddr = netmask = gateway = options['bootproto'] = None
 
     # First we need to prepare all conf files
     if bonding:
         configWriter.addBonding(bonding, bridge=bridgeForNic,
                                 bondingOptions=bondingOptions,
-                                mtu=max(prevmtu, mtu),
-                                ipaddr=ipaddr, netmask=netmask,
-                                gateway=gateway, **options)
-        bondBootproto = options.get('bootproto')
-        # reset ip, netmask, gateway and bootproto for lower level devices
-        ipaddr = netmask = gateway = options['bootproto'] = None
+                                mtu=max(prevmtu, mtu), **options)
 
     for nic in nics:
         configWriter.addNic(nic, bonding=bonding,
                             bridge=bridgeForNic if not bonding else None,
-                            mtu=max(prevmtu, mtu), ipaddr=ipaddr,
-                            netmask=netmask, gateway=gateway, **options)
+                            mtu=max(prevmtu, mtu), **options)
+
+    if ipaddr or bootproto:
+        configWriter.updateTopIface(topIface, ipaddr=ipaddr, netmask=netmask,
+                                    gateway=gateway, bootproto=bootproto)
+
+    def _isAsync(iface):
+        return iface == topIface and bootproto == 'dhcp' and not blockingDhcp
 
     # Now we can run ifup for all interfaces
     if bonding:
-        ifup(bonding, bondBootproto == 'dhcp' and not blockingDhcp)
+        ifup(bonding, _isAsync(bonding))
     else:
         for nic in nics:
-            ifup(nic, options.get('bootproto') == 'dhcp' and not blockingDhcp)
+            ifup(nic, _isAsync(nic))
 
     # Now we can ifup VLAN interface, because bond and nic already up
     if vlan:
-        ifup(iface, vlanBootproto == 'dhcp' and not blockingDhcp)
+        ifup(iface, _isAsync(iface))
 
     if bridged:
-        ifup(network, bridgeBootproto == 'dhcp' and not blockingDhcp)
+        ifup(network, _isAsync(network))
 
     # add libvirt network
     configWriter.createLibvirtNetwork(network, bridged, iface)


--
To view, visit http://gerrit.ovirt.org/11355
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3d430879cdfcc74ff133ac03ead74305fa3baf06
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Mark Wu <wudxw at linux.vnet.ibm.com>


More information about the vdsm-patches mailing list