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

Re: [Xen-devel] add the two command to add or delete the usb deviceinstead of do it in QEMU console



Hi James,

I have a comment.

If a target domain is Domain-0 or PV-domain, the commands should raise 
XendError with a suitable error message.

Best regards,
 Kan

Thu, 15 Oct 2009 02:12:49 -0600, "James Song" wrote:

>Add the two commands( "xm usb-add" and "xm usb-del") to add or delete the 
>usb device instead of do it in QEMU console.
> 
>Signed-off-by: James Song Wei <jsong@xxxxxxxxxx>
>diff -r 41dbce3c96ea tools/ioemu-remote/xenstore.c
>--- a/tools/ioemu-remote/xenstore.c     Tue Oct 13 14:23:10 2009 +0800
>+++ b/tools/ioemu-remote/xenstore.c     Wed Oct 14 15:10:24 2009 +0800
>@@ -908,6 +908,7 @@
>     char *path = NULL, *command = NULL, *par = NULL;
>     unsigned int len;
>     extern char* snapshot_name;
>+    extern void do_usb_add(const char *devname);
> 
>     if (pasprintf(&path,
>                   "/local/domain/0/device-model/%u/command", domid) == -1) {
>@@ -932,6 +933,34 @@
>         }
> 
>         snapshot_name = xs_read(xsh, XBT_NULL, path, &len);
>+    } else if (!strncmp(command, "usb-add", len)) {
>+        fprintf(logfile, "dm-command: usb-add a usb device\n");
>+        if (pasprintf(&path,
>+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
>+            fprintf(logfile, "out of memory reading dm command parameter\n
>");
>+            goto out;
>+        }
>+        par = xs_read(xsh, XBT_NULL, path, &len);
>+        fprintf(logfile, "dm-command: usb-add a usb device: %s \n", par);
>+        if (!par)
>+            goto out;
>+        do_usb_add(par);
>+        xenstore_record_dm_state("usb-added");
>+        fprintf(logfile, "dm-command: finish usb-add a usb device:%s\n",
>par);
>+    } else if (!strncmp(command, "usb-del", len)) {
>+        fprintf(logfile, "dm-command: usb-del a usb device\n");
>+        if (pasprintf(&path,
>+                "/local/domain/0/device-model/%u/parameter", domid) == -1) {
>+            fprintf(logfile, "out of memory reading dm command parameter\n
>");
>+            goto out;
>+        }
>+        par = xs_read(xsh, XBT_NULL, path, &len);
>+        fprintf(logfile, "dm-command: usb-del a usb device: %s \n", par);
>+        if (!par)
>+            goto out;
>+        do_usb_del(par);
>+        xenstore_record_dm_state("usb-deleted");
>+        fprintf(logfile, "dm-command: finish usb-del a usb device:%s\n",
>par);
>     } else if (!strncmp(command, "snapshot-delete", len)) {
>         if (pasprintf(&path,
>                 "/local/domain/0/device-model/%u/parameter", domid) == -1) {
>diff -r 41dbce3c96ea tools/python/xen/xend/XendDomain.py
>--- a/tools/python/xen/xend/XendDomain.py       Tue Oct 13 14:23:10 2009 +
>0800
>+++ b/tools/python/xen/xend/XendDomain.py       Wed Oct 14 15:10:24 2009 +
>0800
>@@ -1561,6 +1561,28 @@
>             raise XendError("Unable to read snapshot file file %s: %s" %
>                             (snap_file, ex[1]))
> 
>+    def domain_usb_add(self, domid, dev_id):
>+        dominfo = self.domain_lookup_nr(domid)
>+        if not dominfo:
>+            raise XendInvalidDomain(str(domid))
>+
>+        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))
>+
>+        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_snapshot_delete(self, domid, name):
>         """Delete domain snapshot
> 
>diff -r 41dbce3c96ea tools/python/xen/xend/server/SrvDomain.py
>--- a/tools/python/xen/xend/server/SrvDomain.py Tue Oct 13 14:23:10 2009 +
>0800
>+++ b/tools/python/xen/xend/server/SrvDomain.py Wed Oct 14 15:10:24 2009 +
>0800
>@@ -120,6 +120,20 @@
>     def do_snapshot_delete(self, _, req):
>         return self.xd.domain_snapshot_delete(self.dom.getName(), req.args
>['name'][0])
> 
>+    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 op_dump(self, op, req):
>         self.acceptCommand(req)
>         return req.threadRequest(self.do_dump, op, req)
>diff -r 41dbce3c96ea tools/python/xen/xm/main.py
>--- a/tools/python/xen/xm/main.py       Tue Oct 13 14:23:10 2009 +0800
>+++ b/tools/python/xen/xm/main.py       Wed Oct 14 15:10:24 2009 +0800
>@@ -168,6 +168,9 @@
>     '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
> 
>@@ -325,6 +328,8 @@
>     "top",
>     "unpause",
>     "uptime",
>+    "usb-add",
>+    "usb-del",
>     "vcpu-set",
>     ]
> 
>@@ -361,6 +366,8 @@
>     "top",
>     "unpause",
>     "uptime",
>+    "usb-add",
>+    "usb-del",
>     "vcpu-list",
>     "vcpu-pin",
>     "vcpu-set",
>@@ -1500,6 +1507,14 @@
>         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)
> 
>@@ -2990,6 +3005,9 @@
>     "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.
> 
> 
> 
>
>-------------------------------text/plain-------------------------------
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@xxxxxxxxxxxxxxxxxxx
>http://lists.xensource.com/xen-devel
>
>
>---html-part included links-------
>mailto:jsong@xxxxxxxxxx


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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