diff --git a/dom0/qvm-core/qubes.py b/dom0/qvm-core/qubes.py index 5bf42bc8..0b30288d 100755 --- a/dom0/qvm-core/qubes.py +++ b/dom0/qvm-core/qubes.py @@ -255,9 +255,12 @@ class QubesVm(object): # PCI devices - used only by NetVM if pcidevs is None or pcidevs == "none": - self.pcidevs = "" + self.pcidevs = [] + elif pcidevs.find('[') < 0: + # Backward compatibility + self.pcidevs = eval('[' + pcidevs + ']') else: - self.pcidevs = pcidevs + self.pcidevs = eval(pcidevs) self.memory = memory @@ -645,7 +648,7 @@ class QubesVm(object): args['name'] = self.name args['kerneldir'] = self.kernels_dir args['vmdir'] = self.dir_path - args['pcidev'] = self.pcidevs + args['pcidev'] = str(self.pcidevs).strip('[]') args['mem'] = str(self.memory) args['maxmem'] = str(self.maxmem) args['vcpus'] = str(self.vcpus) diff --git a/dom0/qvm-tools/qvm-create b/dom0/qvm-tools/qvm-create index 77f246f1..4ca09b8c 100755 --- a/dom0/qvm-tools/qvm-create +++ b/dom0/qvm-tools/qvm-create @@ -140,13 +140,13 @@ def main(): net_devices = find_net_devices() print "Found the following net devices in your system:" - dev_str = '' + devs = [] for dev in net_devices: print "--> {0}".format(dev) - dev_str += '"{0}", '.format(dev) + devs.append(dev) print "Assigning them to the netvm '{0}'".format(vmname) - vm.pcidevs = dev_str + vm.pcidevs = str(devs) elif options.proxyvm: vm = qvm_collection.add_new_proxyvm(vmname, new_vm_template, label = label, updateable = options.standalone) diff --git a/dom0/qvm-tools/qvm-pci b/dom0/qvm-tools/qvm-pci new file mode 100755 index 00000000..c23c0878 --- /dev/null +++ b/dom0/qvm-tools/qvm-pci @@ -0,0 +1,90 @@ +#!/usr/bin/python2.6 +# +# The Qubes OS Project, http://www.qubes-os.org +# +# Copyright (C) 2010 Marek Marczykowski +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# + +from qubes.qubes import QubesVmCollection +from optparse import OptionParser +import subprocess +import os + +def main(): + usage = "usage: %prog -l [options] \n"\ + "usage: %prog -a [options] \n"\ + "usage: %prog -d [options] \n"\ + "List/set VM PCI devices." + + parser = OptionParser (usage) + parser.add_option ("-l", "--list", action="store_true", dest="do_list", default=False) + parser.add_option ("-a", "--add", action="store_true", dest="do_add", default=False) + parser.add_option ("-d", "--delete", action="store_true", dest="do_delete", default=False) + + (options, args) = parser.parse_args () + if (len (args) < 1): + parser.error ("You must provide at least the vmname!") + + vmname = args[0] + + if options.do_list + options.do_add + options.do_delete > 1: + print "Only one of -l -a -d is allowed!" + exit (1) + + if options.do_add or options.do_delete: + qvm_collection = QubesVmCollection() + qvm_collection.lock_db_for_writing() + qvm_collection.load() + else: + qvm_collection = QubesVmCollection() + qvm_collection.lock_db_for_reading() + qvm_collection.load() + qvm_collection.unlock_db() + + vm = qvm_collection.get_vm_by_name(vmname) + if vm is None or vm.qid not in qvm_collection: + print "A VM with the name '{0}' does not exist in the system.".format(vmname) + exit(1) + + if options.do_add: + if len (args) < 2: + print "You must specify the PCI device to add" + exit (1) + + pci = args[1] + if vm.pcidevs.count(pci) == 0: + vm.pcidevs.append(pci) + qvm_collection.save() + qvm_collection.unlock_db() + + elif options.do_delete: + if len (args) < 2: + print "You must specify the PCI device to delete" + exit (1) + + pci = args[1] + if vm.pcidevs.count(pci) > 0: + vm.pcidevs.remove(pci) + qvm_collection.save() + qvm_collection.unlock_db() + + else: + # do_list + print str(vm.pcidevs) + +main() diff --git a/dom0/qvm-tools/qvm-prefs b/dom0/qvm-tools/qvm-prefs index 21a01dff..51ebe251 100755 --- a/dom0/qvm-tools/qvm-prefs +++ b/dom0/qvm-tools/qvm-prefs @@ -88,9 +88,9 @@ def set_maxmem(vms, vm, args): def set_pcidevs(vms, vm, args): if len (args) != 1: - print "Missing memory argument!" + print "Missing pcidevs argument!" - vm.pcidevs = args[0] + vm.pcidevs = list(eval(args[0])) def set_netvm(vms, vm, args): if len (args) != 1: