[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-3.4-testing] xm, xend: Add commands to hotplug usb devices to hvm guests



# 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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.