[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |