# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1255945727 -3600
# Node ID b84064697e4d59f379a52f1abf13ce80f78a90d8
# Parent 9482554734fc9bb9a50ab0993c1e8755c3c5c0c0
xm,xend: Add commands to hotplug usb devices to hvm guests
Signed-off-by: James Song Wei <jsong@xxxxxxxxxx>
---
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 9482554734fc -r b84064697e4d tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Mon Oct 19 10:47:09 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py Mon Oct 19 10:48:47 2009 +0100
@@ -1522,6 +1522,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 9482554734fc -r b84064697e4d tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:47:09 2009 +0100
+++ b/tools/python/xen/xend/server/SrvDomain.py Mon Oct 19 10:48:47 2009 +0100
@@ -225,6 +225,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 9482554734fc -r b84064697e4d tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Mon Oct 19 10:47:09 2009 +0100
+++ b/tools/python/xen/xm/main.py Mon Oct 19 10:48:47 2009 +0100
@@ -161,6 +161,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
@@ -351,6 +354,8 @@ common_commands = [
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-set",
]
@@ -383,6 +388,8 @@ domain_commands = [
"top",
"unpause",
"uptime",
+ "usb-add",
+ "usb-del",
"vcpu-list",
"vcpu-pin",
"vcpu-set",
@@ -1474,6 +1481,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)
@@ -3312,6 +3327,9 @@ commands = {
"tmem-set": xm_tmem_set,
"tmem-freeable": xm_tmem_freeable_mb,
"tmem-shared-auth": xm_tmem_shared_auth,
+ #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
|