WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH 15 of 33] interface-reconfigure: Various refactoring

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH 15 of 33] interface-reconfigure: Various refactoring
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
Date: Fri, 18 Dec 2009 14:17:10 +0000
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Delivery-date: Fri, 18 Dec 2009 06:20:25 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1261145815@xxxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
Move functions around and rename to reduce diff with vswitch
version. (The vswitch version has previously had the function names
rationalised and functions reordered into functional groups).

- Move check_allowed() to new "Boot from Network filesystem or device."
  section. Add usage comment.
- Move interface_name() to new section "Bare Network Devices" and rename
  pif_netdev_name().
- Move interface_exists() to "Bare Network Devices" and rename netdev_exists().
- Move configure_static_routes() to "IP device configuration" and
  rename ipdev_configure_static_routes().
- Move configure_network() to "IP device configuration" and rename
  ipdev_configure_network().

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

diff -r af610bc596af -r b12c62cd92e1 scripts/interface-reconfigure
--- a/scripts/interface-reconfigure     Fri Dec 18 14:16:32 2009 +0000
+++ b/scripts/interface-reconfigure     Fri Dec 18 14:16:32 2009 +0000
@@ -69,7 +69,7 @@
     rec['uuid'] = pifrec['uuid']
     rec['ip_configuration_mode'] = pifrec['ip_configuration_mode']
     rec['action'] = action
-    rec['pif_netdev_name'] = interface_name(pif)
+    rec['pif_netdev_name'] = pif_netdev_name(pif)
     rec['message'] = "Bring %(action)s PIF %(uuid)s" % rec
     log("%(message)s: %(pif_netdev_name)s configured as 
%(ip_configuration_mode)s" % rec)
 
@@ -226,24 +226,6 @@
 
         self.__state = self.__STATE['COMMITTED']
 
-def check_allowed(pif):
-    pifrec = db.get_pif_record(pif)
-    try:
-        f = open("/proc/ardence")
-        macline = filter(lambda x: x.startswith("HWaddr:"), f.readlines())
-        f.close()
-        if len(macline) == 1:
-            p = re.compile(".*\s%(MAC)s\s.*" % pifrec, re.IGNORECASE)
-            if p.match(macline[0]):
-                log("Skipping PVS device %(device)s (%(MAC)s)" % pifrec)
-                return False
-    except IOError:
-        pass
-    return True
-
-def interface_exists(i):
-    return os.path.exists("/sys/class/net/" + i)
-
 def interface_up(i):
     operstate = os.path.join("/sys/class/net",i,"operstate")
     if not os.path.exists(operstate):
@@ -258,7 +240,7 @@
     return state in ["up", "unknown"]
 
 def ifdown(interface):
-    if not interface_exists(interface):
+    if not netdev_exists(interface):
         log("ifdown: interface %s does not exist, ignoring" % interface)
         return
     run_command(["/sbin/ifdown", interface])
@@ -268,13 +250,13 @@
 
 
 def delbr(bridge):
-    if not interface_exists(bridge):
+    if not netdev_exists(bridge):
         log("delbr: bridge %s does not exist, ignoring" % bridge)
         return
     run_command(["/usr/sbin/brctl", "delbr", bridge])
 
 def vconfig_rem(vlan):
-    if not interface_exists(vlan):
+    if not netdev_exists(vlan):
         log("vconfig del: vlan %s does not exist, ignoring" % vlan)
         return
     run_command(["/sbin/vconfig", "rem", vlan])
@@ -337,41 +319,6 @@
     except ValueError, x:
         log("Invalid value for mtu = %s" % mtu)
 
-def configure_static_routes(interface, oc, f):
-    """Open a route-<interface> file for static routes.
-
-    Opens the static routes configuration file for interface and writes one
-    line for each route specified in the network's other config 
"static-routes" value.
-    E.g. if
-           interface ( RO): xenbr1
-           other-config (MRW): static-routes: 
172.16.0.0/15/192.168.0.3,172.18.0.0/16/192.168.0.4;...
-
-    Then route-xenbr1 should be
-          172.16.0.0/15 via 192.168.0.3 dev xenbr1
-          172.18.0.0/16 via 192.168.0.4 dev xenbr1
-    """
-    if oc.has_key('static-routes'):
-        # The key is present - extract comma seperates entries
-        lines = oc['static-routes'].split(',')
-    else:
-        # The key is not present, i.e. there are no static routes
-        lines = []
-
-    child = ConfigurationFile("/etc/sysconfig/network-scripts/route-%s" % 
interface)
-    child.write("# DO NOT EDIT: This file (%s) was autogenerated by %s\n" % \
-            (os.path.basename(child.path()), os.path.basename(sys.argv[0])))
-
-    try:
-        for l in lines:
-            network, masklen, gateway = l.split('/')
-            child.write("%s/%s via %s dev %s\n" % (network, masklen, gateway, 
interface))
-
-        f.attach_child(child)
-        child.close()
-
-    except ValueError, e:
-        log("Error in other-config['static-routes'] format for network %s: %s" 
% (interface, e))
-
 def __open_ifcfg(interface):
     """Open a network interface configuration file.
 
@@ -390,7 +337,7 @@
 
 def open_network_ifcfg(pif):
     bridge = bridge_name(pif)
-    interface = interface_name(pif)
+    interface = pif_netdev_name(pif)
     if bridge:
         return __open_ifcfg(bridge)
     else:
@@ -400,9 +347,9 @@
 def open_pif_ifcfg(pif):
     pifrec = db.get_pif_record(pif)
 
-    log("Configuring %s (%s)" % (interface_name(pif), pifrec['MAC']))
+    log("Configuring %s (%s)" % (pif_netdev_name(pif), pifrec['MAC']))
 
-    f = __open_ifcfg(interface_name(pif))
+    f = __open_ifcfg(pif_netdev_name(pif))
 
     if pifrec.has_key('other_config'):
         configure_ethtool(pifrec['other_config'], f)
@@ -779,6 +726,47 @@
         else:
             return None
 
+#
+# Boot from Network filesystem or device.
+#
+
+def check_allowed(pif):
+    """Determine whether interface-reconfigure should be manipulating this PIF.
+
+    Used to prevent system PIFs (such as network root disk) from being 
interfered with.
+    """
+
+    pifrec = db.get_pif_record(pif)
+    try:
+        f = open("/proc/ardence")
+        macline = filter(lambda x: x.startswith("HWaddr:"), f.readlines())
+        f.close()
+        if len(macline) == 1:
+            p = re.compile(".*\s%(MAC)s\s.*" % pifrec, re.IGNORECASE)
+            if p.match(macline[0]):
+                log("Skipping PVS device %(device)s (%(MAC)s)" % pifrec)
+                return False
+    except IOError:
+        pass
+    return True
+
+#
+# Bare Network Devices -- network devices without IP configuration
+#
+
+def netdev_exists(netdev):
+    return os.path.exists("/sys/class/net/" + netdev)
+
+def pif_netdev_name(pif):
+    """Get the netdev name for a PIF."""
+
+    pifrec = db.get_pif_record(pif)
+
+    if pif_is_vlan(pif):
+        return "%(device)s.%(VLAN)s" % pifrec
+    else:
+        return pifrec['device']
+
 def bridge_name(pif):
     """Return the bridge name associated with pif, or None if network is 
bridgeless"""
     pifrec = db.get_pif_record(pif)
@@ -790,16 +778,6 @@
     else:
         # TODO: sanity check that nwrec['bridgeless'] == 'true'
         return None
-
-def interface_name(pif):
-    """Construct an interface name from the given PIF record."""
-
-    pifrec = db.get_pif_record(pif)
-
-    if pif_is_vlan(pif):
-        return "%(device)s.%(VLAN)s" % pifrec
-    else:
-        return pifrec['device']
 
 def load_bonding_driver():
     log("Loading bonding driver")
@@ -849,7 +827,7 @@
     if len(pifrec['bond_master_of']) == 0:
         return
 
-    __create_bond_device(interface_name(pif))
+    __create_bond_device(pif_netdev_name(pif))
 
 def __destroy_bond_device(name):
     if bond_device_exists(name):
@@ -879,141 +857,9 @@
     if not os.access(sysfs_bonding_masters, os.F_OK):
         return
 
-    name = interface_name(pif)
+    name = pif_netdev_name(pif)
 
     __destroy_bond_device(name)
-
-def configure_network(pif, f):
-    """Write the configuration file for a network.
-
-    Writes configuration derived from the network object into the relevant
-    ifcfg file.  The configuration file is passed in, but if the network is
-    bridgeless it will be ifcfg-<interface>, otherwise it will be 
ifcfg-<bridge>.
-
-    This routine may also write ifcfg files of the networks corresponding to 
other PIFs
-    in order to maintain consistency.
-
-    params:
-        pif:  Opaque_ref of pif
-        f :   ConfigurationFile(/path/to/ifcfg) to which we append network 
configuration
-    """
-
-    pifrec = db.get_pif_record(pif)
-    nw = pifrec['network']
-    nwrec = db.get_network_record(nw)
-    oc = None
-    bridge = bridge_name(pif)
-    interface = interface_name(pif)
-    if bridge:
-        device = bridge
-    else:
-        device = interface
-
-    if nwrec.has_key('other_config'):
-        configure_ethtool(nwrec['other_config'], f)
-        configure_mtu(nwrec['other_config'], f)
-        configure_static_routes(device, nwrec['other_config'], f)
-
-
-    if pifrec.has_key('other_config'):
-        oc = pifrec['other_config']
-
-    if device == bridge:
-        f.write("TYPE=Bridge\n")
-        f.write("DELAY=0\n")
-        f.write("STP=off\n")
-        f.write("PIFDEV=%s\n" % interface_name(pif))
-
-    if pifrec['ip_configuration_mode'] == "DHCP":
-        f.write("BOOTPROTO=dhcp\n")
-        f.write("PERSISTENT_DHCLIENT=yes\n")
-    elif pifrec['ip_configuration_mode'] == "Static":
-        f.write("BOOTPROTO=none\n")
-        f.write("NETMASK=%(netmask)s\n" % pifrec)
-        f.write("IPADDR=%(IP)s\n" % pifrec)
-        f.write("GATEWAY=%(gateway)s\n" % pifrec)
-    elif pifrec['ip_configuration_mode'] == "None":
-        f.write("BOOTPROTO=none\n")
-    else:
-        raise Error("Unknown ip-configuration-mode %s" % 
pifrec['ip_configuration_mode'])
-
-    if pifrec.has_key('DNS') and pifrec['DNS'] != "":
-        ServerList = pifrec['DNS'].split(",")
-        for i in range(len(ServerList)): f.write("DNS%d=%s\n" % (i+1, 
ServerList[i]))
-    if oc and oc.has_key('domain'):
-        f.write("DOMAIN='%s'\n" % oc['domain'].replace(',', ' '))
-
-    # There can be only one DNSDEV and one GATEWAYDEV in 
/etc/sysconfig/network.
-    #
-    # The peerdns pif will be the one with
-    # pif::other-config:peerdns=true, or the mgmt pif if none have
-    # this set.
-    #
-    # The gateway pif will be the one with
-    # pif::other-config:defaultroute=true, or the mgmt pif if none
-    # have this set.
-
-    # Work out which pif on this host should be the DNSDEV and which
-    # should be the GATEWAYDEV
-    #
-    # Note: we prune out the bond master pif (if it exists). This is
-    # because when we are called to bring up an interface with a bond
-    # master, it is implicit that we should bring down that master.
-
-    pifs_on_host = [p for p in db.get_all_pifs() if not p in 
get_bond_masters_of_pif(pif)]
-
-    # loop through all the pifs on this host looking for one with
-    #   other-config:peerdns = true, and one with
-    #   other-config:default-route=true
-    peerdns_pif = None
-    defaultroute_pif = None
-    for __pif in pifs_on_host:
-        __pifrec = db.get_pif_record(__pif)
-        __oc = __pifrec['other_config']
-        if __oc.has_key('peerdns') and __oc['peerdns'] == 'true':
-            if peerdns_pif == None:
-                peerdns_pif = __pif
-            else:
-                log('Warning: multiple pifs with "peerdns=true" - choosing %s 
and ignoring %s' % \
-                        (db.get_pif_record(peerdns_pif)['device'], 
__pifrec['device']))
-        if __oc.has_key('defaultroute') and __oc['defaultroute'] == 'true':
-            if defaultroute_pif == None:
-                defaultroute_pif = __pif
-            else:
-                log('Warning: multiple pifs with "defaultroute=true" - 
choosing %s and ignoring %s' % \
-                        (db.get_pif_record(defaultroute_pif)['device'], 
__pifrec['device']))
-
-    # If no pif is explicitly specified then use the mgmt pif for 
peerdns/defaultroute
-    if peerdns_pif == None:
-        peerdns_pif = management_pif
-    if defaultroute_pif == None:
-        defaultroute_pif = management_pif
-
-    is_dnsdev = peerdns_pif == pif
-    is_gatewaydev = defaultroute_pif == pif
-
-    if is_dnsdev or is_gatewaydev:
-        fnetwork = ConfigurationFile("/etc/sysconfig/network")
-        for line in fnetwork.readlines():
-            if is_dnsdev and line.lstrip().startswith('DNSDEV='):
-                fnetwork.write('DNSDEV=%s\n' % bridge)
-                is_dnsdev = False
-            elif is_gatewaydev and line.lstrip().startswith('GATEWAYDEV='):
-                fnetwork.write('GATEWAYDEV=%s\n' % bridge)
-                is_gatewaydev = False
-            else:
-                fnetwork.write(line)
-
-        if is_dnsdev:
-            fnetwork.write('DNSDEV=%s\n' % bridge_name(pif))
-        if is_gatewaydev:
-            fnetwork.write('GATEWAYDEV=%s\n' % bridge_name(pif))
-
-        fnetwork.close()
-        f.attach_child(fnetwork)
-
-    return
-
 
 def configure_physical_interface(pif):
     """Write the configuration for a physical interface.
@@ -1225,7 +1071,7 @@
     required when the bond is brought up."""
 
     if pif_is_vlan(pif):
-        interface = interface_name(pif)
+        interface = pif_netdev_name(pif)
         log("bring_down_interface: %s is a VLAN" % interface)
         ifdown(interface)
 
@@ -1249,13 +1095,13 @@
             log("bring_down_interface: vlan slave has other masters")
             return
 
-        log("bring_down_interface: no more masters, bring down vlan slave %s" 
% interface_name(slave))
+        log("bring_down_interface: no more masters, bring down vlan slave %s" 
% pif_netdev_name(slave))
         pif = slave
     else:
         vlan_masters = get_vlan_masters_of_pif(pif)
-        log("vlan masters of %s - %s" % (db.get_pif_record(pif)['device'], 
[interface_name(m) for m in vlan_masters]))
+        log("vlan masters of %s - %s" % (db.get_pif_record(pif)['device'], 
[pif_netdev_name(m) for m in vlan_masters]))
         if len([m for m in vlan_masters if 
db.get_pif_record(m)['currently_attached']]) > 0:
-            log("Leaving %s up due to currently attached VLAN masters" % 
interface_name(pif))
+            log("Leaving %s up due to currently attached VLAN masters" % 
pif_netdev_name(pif))
             return
 
     # pif is now either a bond or a physical device which needs to be brought 
down
@@ -1263,9 +1109,9 @@
     # Need to bring down bond slaves first since the bond device
     # must be up to enslave/unenslave.
     bond_slaves = get_bond_slaves_of_pif(pif)
-    log("bond slaves of %s - %s" % (db.get_pif_record(pif)['device'], 
[interface_name(s) for s in bond_slaves]))
+    log("bond slaves of %s - %s" % (db.get_pif_record(pif)['device'], 
[pif_netdev_name(s) for s in bond_slaves]))
     for slave in bond_slaves:
-        slave_interface = interface_name(slave)
+        slave_interface = pif_netdev_name(slave)
         slave_bridge = bridge_name(slave)
         if db.get_pif_record(slave)['currently_attached']:
             log("leave bond slave %s up (currently attached)" % 
slave_interface)
@@ -1278,7 +1124,7 @@
         if slave_bridge:
             bring_down_bridge(slave_bridge, destroy=True)
 
-    interface = interface_name(pif)
+    interface = pif_netdev_name(pif)
     log("Bring interface %s down" % interface)
     ifdown(interface)
 
@@ -1290,7 +1136,7 @@
 
 def interface_is_up(pif):
     try:
-        interface = interface_name(pif)
+        interface = pif_netdev_name(pif)
         state = open("/sys/class/net/%s/operstate" % interface).read().strip()
         return state == "up"
     except:
@@ -1309,12 +1155,186 @@
         if not interface_is_up(slave):
             bring_up_interface(slave)
 
-    interface = interface_name(pif)
+    interface = pif_netdev_name(pif)
 
     create_bond_device(pif)
 
     log("Bring interface %s up" % interface)
     ifup(interface)
+
+#
+# IP device configuration
+#
+
+def ipdev_configure_static_routes(interface, oc, f):
+    """Open a route-<interface> file for static routes.
+
+    Opens the static routes configuration file for interface and writes one
+    line for each route specified in the network's other config 
"static-routes" value.
+    E.g. if
+           interface ( RO): xenbr1
+           other-config (MRW): static-routes: 
172.16.0.0/15/192.168.0.3,172.18.0.0/16/192.168.0.4;...
+
+    Then route-xenbr1 should be
+          172.16.0.0/15 via 192.168.0.3 dev xenbr1
+          172.18.0.0/16 via 192.168.0.4 dev xenbr1
+    """
+    if oc.has_key('static-routes'):
+        # The key is present - extract comma seperates entries
+        lines = oc['static-routes'].split(',')
+    else:
+        # The key is not present, i.e. there are no static routes
+        lines = []
+
+    child = ConfigurationFile("/etc/sysconfig/network-scripts/route-%s" % 
interface)
+    child.write("# DO NOT EDIT: This file (%s) was autogenerated by %s\n" % \
+            (os.path.basename(child.path()), os.path.basename(sys.argv[0])))
+
+    try:
+        for l in lines:
+            network, masklen, gateway = l.split('/')
+            child.write("%s/%s via %s dev %s\n" % (network, masklen, gateway, 
interface))
+
+        f.attach_child(child)
+        child.close()
+
+    except ValueError, e:
+        log("Error in other-config['static-routes'] format for network %s: %s" 
% (interface, e))
+
+def ipdev_configure_network(pif, f):
+    """Write the configuration file for a network.
+
+    Writes configuration derived from the network object into the relevant
+    ifcfg file.  The configuration file is passed in, but if the network is
+    bridgeless it will be ifcfg-<interface>, otherwise it will be 
ifcfg-<bridge>.
+
+    This routine may also write ifcfg files of the networks corresponding to 
other PIFs
+    in order to maintain consistency.
+
+    params:
+        pif:  Opaque_ref of pif
+        f :   ConfigurationFile(/path/to/ifcfg) to which we append network 
configuration
+    """
+
+    pifrec = db.get_pif_record(pif)
+    nw = pifrec['network']
+    nwrec = db.get_network_record(nw)
+    oc = None
+    bridge = bridge_name(pif)
+    interface = pif_netdev_name(pif)
+    if bridge:
+        device = bridge
+    else:
+        device = interface
+
+    if nwrec.has_key('other_config'):
+        configure_ethtool(nwrec['other_config'], f)
+        configure_mtu(nwrec['other_config'], f)
+        ipdev_configure_static_routes(device, nwrec['other_config'], f)
+
+
+    if pifrec.has_key('other_config'):
+        oc = pifrec['other_config']
+
+    if device == bridge:
+        f.write("TYPE=Bridge\n")
+        f.write("DELAY=0\n")
+        f.write("STP=off\n")
+        f.write("PIFDEV=%s\n" % pif_netdev_name(pif))
+
+    if pifrec['ip_configuration_mode'] == "DHCP":
+        f.write("BOOTPROTO=dhcp\n")
+        f.write("PERSISTENT_DHCLIENT=yes\n")
+    elif pifrec['ip_configuration_mode'] == "Static":
+        f.write("BOOTPROTO=none\n")
+        f.write("NETMASK=%(netmask)s\n" % pifrec)
+        f.write("IPADDR=%(IP)s\n" % pifrec)
+        f.write("GATEWAY=%(gateway)s\n" % pifrec)
+    elif pifrec['ip_configuration_mode'] == "None":
+        f.write("BOOTPROTO=none\n")
+    else:
+        raise Error("Unknown ip-configuration-mode %s" % 
pifrec['ip_configuration_mode'])
+
+    if pifrec.has_key('DNS') and pifrec['DNS'] != "":
+        ServerList = pifrec['DNS'].split(",")
+        for i in range(len(ServerList)): f.write("DNS%d=%s\n" % (i+1, 
ServerList[i]))
+    if oc and oc.has_key('domain'):
+        f.write("DOMAIN='%s'\n" % oc['domain'].replace(',', ' '))
+
+    # There can be only one DNSDEV and one GATEWAYDEV in 
/etc/sysconfig/network.
+    #
+    # The peerdns pif will be the one with
+    # pif::other-config:peerdns=true, or the mgmt pif if none have
+    # this set.
+    #
+    # The gateway pif will be the one with
+    # pif::other-config:defaultroute=true, or the mgmt pif if none
+    # have this set.
+
+    # Work out which pif on this host should be the DNSDEV and which
+    # should be the GATEWAYDEV
+    #
+    # Note: we prune out the bond master pif (if it exists). This is
+    # because when we are called to bring up an interface with a bond
+    # master, it is implicit that we should bring down that master.
+
+    pifs_on_host = [p for p in db.get_all_pifs() if not p in 
get_bond_masters_of_pif(pif)]
+
+    # loop through all the pifs on this host looking for one with
+    #   other-config:peerdns = true, and one with
+    #   other-config:default-route=true
+    peerdns_pif = None
+    defaultroute_pif = None
+    for __pif in pifs_on_host:
+        __pifrec = db.get_pif_record(__pif)
+        __oc = __pifrec['other_config']
+        if __oc.has_key('peerdns') and __oc['peerdns'] == 'true':
+            if peerdns_pif == None:
+                peerdns_pif = __pif
+            else:
+                log('Warning: multiple pifs with "peerdns=true" - choosing %s 
and ignoring %s' % \
+                        (db.get_pif_record(peerdns_pif)['device'], 
__pifrec['device']))
+        if __oc.has_key('defaultroute') and __oc['defaultroute'] == 'true':
+            if defaultroute_pif == None:
+                defaultroute_pif = __pif
+            else:
+                log('Warning: multiple pifs with "defaultroute=true" - 
choosing %s and ignoring %s' % \
+                        (db.get_pif_record(defaultroute_pif)['device'], 
__pifrec['device']))
+
+    # If no pif is explicitly specified then use the mgmt pif for 
peerdns/defaultroute
+    if peerdns_pif == None:
+        peerdns_pif = management_pif
+    if defaultroute_pif == None:
+        defaultroute_pif = management_pif
+
+    is_dnsdev = peerdns_pif == pif
+    is_gatewaydev = defaultroute_pif == pif
+
+    if is_dnsdev or is_gatewaydev:
+        fnetwork = ConfigurationFile("/etc/sysconfig/network")
+        for line in fnetwork.readlines():
+            if is_dnsdev and line.lstrip().startswith('DNSDEV='):
+                fnetwork.write('DNSDEV=%s\n' % bridge)
+                is_dnsdev = False
+            elif is_gatewaydev and line.lstrip().startswith('GATEWAYDEV='):
+                fnetwork.write('GATEWAYDEV=%s\n' % bridge)
+                is_gatewaydev = False
+            else:
+                fnetwork.write(line)
+
+        if is_dnsdev:
+            fnetwork.write('DNSDEV=%s\n' % bridge_name(pif))
+        if is_gatewaydev:
+            fnetwork.write('GATEWAYDEV=%s\n' % bridge_name(pif))
+
+        fnetwork.close()
+        f.attach_child(fnetwork)
+
+    return
+
+#
+# Toplevel actions
+#
 
 def action_up(pif):
 
@@ -1322,19 +1342,19 @@
 
     f = configure_pif(pif)
 
-    interface = interface_name(pif)
+    interface = pif_netdev_name(pif)
     bridge = bridge_name(pif)
     mode = pifrec['ip_configuration_mode']
 
     if bridge:
         log("Configuring %s using %s configuration" % (bridge, mode))
         br = open_network_ifcfg(pif)
-        configure_network(pif, br)
+        ipdev_configure_network(pif, br)
         br.close()
         f.attach_child(br)
     else:
         log("Configuring %s using %s configuration" % (interface, mode))
-        configure_network(pif, f)
+        ipdev_configure_network(pif, f)
 
     f.close()
 
@@ -1345,7 +1365,7 @@
     # Bring down any VLAN masters so that we can reconfigure the slave.
     vlan_masters = get_vlan_masters_of_pif(pif)
     for master in vlan_masters:
-        name = interface_name(master)
+        name = pif_netdev_name(master)
         log("action_up: bring down %s" % (name))
         ifdown(name)
 
@@ -1374,7 +1394,7 @@
 
         # Bring back any currently-attached VLAN masters (brought down above)
         for master in [v for v in vlan_masters if 
db.get_pif_record(v)['currently_attached']]:
-            name = interface_name(master)
+            name = pif_netdev_name(master)
             log("action_up: bring up %s" % (name))
             ifup(name)
 
@@ -1393,19 +1413,19 @@
 
     f = configure_pif(pif)
 
-    interface = interface_name(pif)
+    interface = pif_netdev_name(pif)
     bridge = bridge_name(pif)
     mode = pifrec['ip_configuration_mode']
 
     if bridge:
         log("Configuring %s using %s configuration" % (bridge, mode))
         br = open_network_ifcfg(pif)
-        configure_network(pif, br)
+        ipdev_configure_network(pif, br)
         br.close()
         f.attach_child(br)
     else:
         log("Configuring %s using %s configuration" % (interface, mode))
-        configure_network(pif, f)
+        ipdev_configure_network(pif, f)
 
     f.close()
 

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api

<Prev in Thread] Current Thread [Next in Thread>