# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1256828520 0
# Node ID 4174e32f7c891f51e2f8791389dae63d273ec4ec
# Parent d75eedba68848ef82ae5758988e2059ac148f2a1
xm,xend: Add commands to hotplug usb devices to hvm guests
Signed-off-by: James Song Wei <jsong@xxxxxxxxxx>
xen-unstable changeset: 20332:b84064697e4d
xen-unstable date: Mon Oct 19 10:48:47 2009 +0100
---
tools/python/xen/xend/XendDomain.py | 39 ++++++++++++++++++++++++++++++
tools/python/xen/xend/server/SrvDomain.py | 13 ++++++++++
tools/python/xen/xm/main.py | 18 +++++++++++++
3 files changed, 70 insertions(+)
diff -r d75eedba6884 -r 4174e32f7c89 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Thu Oct 29 15:01:37 2009 +0000
+++ b/tools/python/xen/xend/XendDomain.py Thu Oct 29 15:02:00 2009 +0000
@@ -1421,6 +1421,45 @@ class XendDomain:
raise XendError("can't write guest state file %s: %s" %
(dst, ex[1]))
+ def domain_usb_add(self, domid, dev_id):
+ dominfo = self.domain_lookup_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ usb = dominfo.info['platform'].get('usb')
+ if not usb:
+ raise XendError("Can't add usb device to a guest with usb disabled
in configure file")
+
+ hvm = dominfo.info.is_hvm()
+ if not hvm:
+ raise XendError("Can't add usb device to a non-hvm guest")
+
+ if dominfo._stateGet() != DOM_STATE_HALTED:
+ dominfo.image.signalDeviceModel("usb-add",
+ "usb-added", dev_id)
+ else:
+ log.debug("error: Domain is not running!")
+
+
+ def domain_usb_del(self, domid, dev_id):
+ dominfo = self.domain_lookup_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ usb = dominfo.info['platform'].get('usb')
+ if not usb:
+ raise XendError("Can't add usb device to a guest with usb disabled
in configure file")
+
+ hvm = dominfo.info.is_hvm()
+ if not hvm:
+ raise XendError("Can't del usb to a non-hvm guest")
+
+ if dominfo._stateGet() != DOM_STATE_HALTED:
+ dominfo.image.signalDeviceModel("usb-del",
+ "usb-deleted", dev_id)
+ else:
+ log.debug("error: Domain is not running!")
+
def domain_pincpu(self, domid, vcpu, cpumap):
"""Set which cpus vcpu can use
diff -r d75eedba6884 -r 4174e32f7c89 tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Thu Oct 29 15:01:37 2009 +0000
+++ b/tools/python/xen/xend/server/SrvDomain.py Thu Oct 29 15:02:00 2009 +0000
@@ -224,6 +224,19 @@ class SrvDomain(SrvDir):
self.acceptCommand(req)
return self.xd.domain_reset(self.dom.getName())
+ def op_usb_add(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_usb_add, op, req)
+
+ def do_usb_add(self, _, req):
+ return self.xd.domain_usb_add(self.dom.getName(), req)
+
+ def op_usb_del(self, op, req):
+ self.acceptCommand(req)
+ return req.threadRequest(self.do_usb_add, op, req)
+
+ def do_usb_del(self, _, req):
+ return self.xd.domain_usb_add(self.dom.getName(), req)
def render_POST(self, req):
return self.perform(req)
diff -r d75eedba6884 -r 4174e32f7c89 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Thu Oct 29 15:01:37 2009 +0000
+++ b/tools/python/xen/xm/main.py Thu Oct 29 15:02:00 2009 +0000
@@ -160,6 +160,9 @@ SUBCOMMAND_HELP = {
'vcpu-set' : ('<Domain> <vCPUs>',
'Set the number of active VCPUs for allowed for the'
' domain.'),
+ #usb
+ 'usb-add' : ('<domain> <[host:bus.addr]
[host:vendor_id:product_id]>','Add the usb device to FV VM.'),
+ 'usb-del' : ('<domain> <[host:bus.addr]
[host:vendor_id:product_id]>','Delete the usb device to FV VM.'),
# device commands
@@ -309,6 +312,8 @@ common_commands = [
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-set",
]
@@ -341,6 +346,8 @@ domain_commands = [
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-list",
"vcpu-pin",
"vcpu-set",
@@ -1420,6 +1427,14 @@ def xm_mem_set(args):
else:
mem_target = int_unit(args[1], 'm')
server.xend.domain.setMemoryTarget(dom, mem_target)
+
+def xm_usb_add(args):
+ arg_check(args, "usb-add", 2)
+ server.xend.domain.usb_add(args[0],args[1])
+
+def xm_usb_del(args):
+ arg_check(args, "usb-del", 2)
+ server.xend.domain.usb_del(args[0],args[1])
def xm_vcpu_set(args):
arg_check(args, "vcpu-set", 2)
@@ -2903,6 +2918,9 @@ commands = {
"scsi-attach": xm_scsi_attach,
"scsi-detach": xm_scsi_detach,
"scsi-list": xm_scsi_list,
+ #usb
+ "usb-add": xm_usb_add,
+ "usb-del": xm_usb_del,
}
## The commands supported by a separate argument parser in xend.xm.
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|