X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=xenserver%2Fopt_xensource_libexec_interface-reconfigure;h=3b5c8617aec89a072a75fde24db121f1ffb7c3c0;hb=HEAD;hp=a350952c33c927ebcf85126163e3db5a5daba799;hpb=1fa5a1050f4e148575d418bf16343a39357ada39;p=sliver-openvswitch.git diff --git a/xenserver/opt_xensource_libexec_interface-reconfigure b/xenserver/opt_xensource_libexec_interface-reconfigure index a350952c3..3b5c8617a 100755 --- a/xenserver/opt_xensource_libexec_interface-reconfigure +++ b/xenserver/opt_xensource_libexec_interface-reconfigure @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python # # Copyright (c) 2008,2009 Citrix Systems, Inc. # @@ -33,6 +33,8 @@ --pif A PIF reference within the session. --pif-uuid The UUID of a PIF. --force An interface name. + --root-prefix=DIR Use DIR as alternate root directory (for testing). + --no-syslog Write log messages to stderr instead of system log. """ # Notes: @@ -48,6 +50,7 @@ import syslog import traceback import re import random +import syslog management_pif = None @@ -88,7 +91,7 @@ def check_allowed(pif): pifrec = db().get_pif_record(pif) try: - f = open("/proc/ardence") + f = open(root_prefix() + "/proc/ardence") macline = filter(lambda x: x.startswith("HWaddr:"), f.readlines()) f.close() if len(macline) == 1: @@ -121,20 +124,20 @@ def netdev_remap_name(pif, already_renamed=[]): def get_netdev_mac(device): try: - return read1("/sys/class/net/%s/address" % device) + return read1("%s/sys/class/net/%s/address" % (root_prefix(), device)) except: # Probably no such device. return None def get_netdev_tx_queue_len(device): try: - return int(read1("/sys/class/net/%s/tx_queue_len" % device)) + return int(read1("%s/sys/class/net/%s/tx_queue_len" % (root_prefix(), device))) except: # Probably no such device. return None def get_netdev_by_mac(mac): - for device in os.listdir("/sys/class/net"): + for device in os.listdir(root_prefix() + "/sys/class/net"): dev_mac = get_netdev_mac(device) if (dev_mac and mac.lower() == dev_mac.lower() and get_netdev_tx_queue_len(device)): @@ -142,10 +145,11 @@ def netdev_remap_name(pif, already_renamed=[]): return None def rename_netdev(old_name, new_name): - log("Changing the name of %s to %s" % (old_name, new_name)) - run_command(['/sbin/ifconfig', old_name, 'down']) - if not run_command(['/sbin/ip', 'link', 'set', old_name, 'name', new_name]): - raise Error("Could not rename %s to %s" % (old_name, new_name)) + raise Error("Trying to rename %s to %s - This functionality has been removed" % (old_name, new_name)) + # log("Changing the name of %s to %s" % (old_name, new_name)) + # run_command(['/sbin/ifconfig', old_name, 'down']) + # if not run_command(['/sbin/ip', 'link', 'set', old_name, 'name', new_name]): + # raise Error("Could not rename %s to %s" % (old_name, new_name)) pifrec = db().get_pif_record(pif) device = pifrec['device'] @@ -185,7 +189,7 @@ def ifdown(netdev): if not netdev_exists(netdev): log("ifdown: device %s does not exist, ignoring" % netdev) return - if not os.path.exists("/etc/sysconfig/network-scripts/ifcfg-%s" % netdev): + if not os.path.exists("%s/etc/sysconfig/network-scripts/ifcfg-%s" % (root_prefix(), netdev)): log("ifdown: device %s exists but ifcfg-%s does not" % (netdev,netdev)) run_command(["/sbin/ifconfig", netdev, 'down']) return @@ -193,15 +197,21 @@ def ifdown(netdev): def ifup(netdev): """Bring up a network interface""" - if not os.path.exists("/etc/sysconfig/network-scripts/ifcfg-%s" % netdev): + if not os.path.exists(root_prefix() + "/etc/sysconfig/network-scripts/ifcfg-%s" % netdev): raise Error("ifup: device %s exists but ifcfg-%s does not" % (netdev,netdev)) + d = os.getenv("DHCLIENTARGS","") + if os.path.exists("/etc/firstboot.d/data/firstboot_in_progress"): + os.putenv("DHCLIENTARGS", d + " -T 240 " ) run_command(["/sbin/ifup", netdev]) + os.putenv("DHCLIENTARGS", d ) # # # def pif_rename_physical_devices(pif): + if pif_is_tunnel(pif): + return if pif_is_vlan(pif): pif = pif_get_vlan_slave(pif) @@ -232,13 +242,13 @@ def ipdev_configure_static_routes(interface, oc, f): 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 + # The key is present - extract comma separates 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 = ConfigurationFile("%s/etc/sysconfig/network-scripts/route-%s" % (root_prefix(), 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]))) @@ -258,13 +268,14 @@ def ipdev_open_ifcfg(pif): log("Writing network configuration for %s" % ipdev) - f = ConfigurationFile("/etc/sysconfig/network-scripts/ifcfg-%s" % ipdev) + f = ConfigurationFile("%s/etc/sysconfig/network-scripts/ifcfg-%s" % (root_prefix(), ipdev)) f.write("# DO NOT EDIT: This file (%s) was autogenerated by %s\n" % \ (os.path.basename(f.path()), os.path.basename(sys.argv[0]))) f.write("XEMANAGED=yes\n") f.write("DEVICE=%s\n" % ipdev) f.write("ONBOOT=no\n") + f.write("NOZEROCONF=yes\n") return f @@ -284,7 +295,8 @@ def ipdev_configure_network(pif, dp): """ pifrec = db().get_pif_record(pif) - nwrec = db().get_network_record(pifrec['network']) + nw = pifrec['network'] + nwrec = db().get_network_record(nw) ipdev = pif_ipdev_name(pif) @@ -319,12 +331,13 @@ def ipdev_configure_network(pif, dp): if len(offload): f.write("ETHTOOL_OFFLOAD_OPTS=\"%s\"\n" % str.join(" ", offload)) - mtu = mtu_setting(nwrec['other_config']) - if mtu: - f.write("MTU=%s\n" % mtu) - ipdev_configure_static_routes(ipdev, nwrec['other_config'], f) + mtu = mtu_setting(nw, "Network", nwrec['other_config']) + if mtu: + f.write("MTU=%s\n" % mtu) + + 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])) @@ -350,6 +363,10 @@ def ipdev_configure_network(pif, dp): pifs_on_host = [p for p in db().get_all_pifs() if not p in pif_get_bond_masters(pif)] + # now prune out bond slaves as they are not connected to the IP + # stack and so cannot be used as gateway or DNS devices. + pifs_on_host = [ p for p in pifs_on_host if len(pif_get_bond_masters(p)) == 0] + # loop through all the pifs on this host looking for one with # other-config:peerdns = true, and one with # other-config:default-route=true @@ -382,7 +399,7 @@ def ipdev_configure_network(pif, dp): is_gatewaydev = defaultroute_pif == pif if is_dnsdev or is_gatewaydev: - fnetwork = ConfigurationFile("/etc/sysconfig/network") + fnetwork = ConfigurationFile(root_prefix() + "/etc/sysconfig/network") for line in fnetwork.readlines(): if is_dnsdev and line.lstrip().startswith('DNSDEV='): fnetwork.write('DNSDEV=%s\n' % ipdev) @@ -411,7 +428,7 @@ def action_up(pif, force): pifrec = db().get_pif_record(pif) ipdev = pif_ipdev_name(pif) - dp = DatapathFactory(pif) + dp = DatapathFactory()(pif) log("action_up: %s" % ipdev) @@ -441,7 +458,7 @@ def action_up(pif, force): dp.post() # Update /etc/issue (which contains the IP address of the management interface) - os.system("/sbin/update-issue") + os.system(root_prefix() + "/sbin/update-issue") f.commit() except Error, e: @@ -451,7 +468,7 @@ def action_up(pif, force): def action_down(pif): ipdev = pif_ipdev_name(pif) - dp = DatapathFactory(pif) + dp = DatapathFactory()(pif) log("action_down: %s" % ipdev) @@ -459,6 +476,9 @@ def action_down(pif): dp.bring_down() +def action_rewrite(): + DatapathFactory().rewrite() + # This is useful for reconfiguring the mgmt interface after having lost connectivity to the pool master def action_force_rewrite(bridge, config): def getUUID(): @@ -502,7 +522,7 @@ def action_force_rewrite(bridge, config): log("Configuring %s using %s configuration" % (bridge, mode)) - f = ConfigurationFile(dbcache_file) + f = ConfigurationFile(root_prefix() + dbcache_file) pif_uuid = getUUID() network_uuid = getUUID() @@ -518,6 +538,8 @@ def action_force_rewrite(bridge, config): f.write('\t\t\n') f.write('\t\tOpaqueRef:NULL\n') f.write('\t\t-1\n') + f.write('\t\t\n') + f.write('\t\t\n') f.write('\t\t%s\n' % interface) f.write('\t\t%s\n' % mac) f.write('\t\t\n') @@ -580,6 +602,8 @@ def main(argv=None): "force-interface=", "management", "mac=", "device=", "mode=", "ip=", "netmask=", "gateway=", + "root-prefix=", + "no-syslog", "help" ] arglist, args = getopt.gnu_getopt(argv[1:], shortops, longops) except getopt.GetoptError, msg: @@ -600,12 +624,17 @@ def main(argv=None): force_management = True elif o in ["--mac", "--device", "--mode", "--ip", "--netmask", "--gateway"]: force_rewrite_config[o[2:]] = a + elif o == "--root-prefix": + set_root_prefix(a) + elif o == "--no-syslog": + set_log_destination("stderr") elif o == "-h" or o == "--help": print __doc__ % {'command-name': os.path.basename(argv[0])} return 0 - syslog.openlog(os.path.basename(argv[0])) - log("Called as " + str.join(" ", argv)) + if get_log_destination() == "syslog": + syslog.openlog(os.path.basename(argv[0])) + log("Called as " + str.join(" ", argv)) if len(args) < 1: raise Usage("Required option not present") @@ -655,7 +684,7 @@ def main(argv=None): pif = db().get_pif_by_uuid(pif_uuid) if action == "rewrite": - pass + action_rewrite() else: if not pif: raise Usage("No PIF given")