<div dir="ltr">Sorry for this stupid mistake. Thank you for reviewing.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jul 9, 2018 at 11:20 PM, Michal Privoznik <span dir="ltr"><<a href="mailto:mprivozn@redhat.com" target="_blank">mprivozn@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 07/04/2018 05:04 AM, Han Han wrote:<br>
> Adding usb bus address support to the optional address parameter of virsh<br>
> attach-disk. The address is used as bus:port. e.g.<br>
> usb:1:1<br>
> <br>
> Signed-off-by: Han Han <<a href="mailto:hhan@redhat.com">hhan@redhat.com</a>><br>
> ---<br>
> tools/virsh-domain.c | 38 ++++++++++++++++++++++++++++++<wbr>+++++++-<br>
> tools/virsh.pod | 2 +-<br>
> 2 files changed, 38 insertions(+), 2 deletions(-)<br>
> <br>
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c<br>
> index e9b88f0013..5a445eff44 100644<br>
> --- a/tools/virsh-domain.c<br>
> +++ b/tools/virsh-domain.c<br>
> @@ -319,6 +319,7 @@ enum {<br>
> DISK_ADDR_TYPE_SCSI,<br>
> DISK_ADDR_TYPE_IDE,<br>
> DISK_ADDR_TYPE_CCW,<br>
> + DISK_ADDR_TYPE_USB,<br>
> };<br>
> <br>
> struct PCIAddress {<br>
> @@ -346,6 +347,11 @@ struct CCWAddress {<br>
> unsigned int devno;<br>
> };<br>
> <br>
> +struct USBAddress {<br>
> + unsigned int bus;<br>
> + unsigned int port;<br>
> +};<br>
> +<br>
> struct DiskAddress {<br>
> int type;<br>
> union {<br>
> @@ -353,6 +359,7 @@ struct DiskAddress {<br>
> struct SCSIAddress scsi;<br>
> struct IDEAddress ide;<br>
> struct CCWAddress ccw;<br>
> + struct USBAddress usb;<br>
> } addr;<br>
> };<br>
> <br>
> @@ -460,10 +467,32 @@ static int str2CCWAddress(const char *str, struct CCWAddress *ccwAddr)<br>
> return 0;<br>
> }<br>
> <br>
> +static int str2USBAddress(const char *str, struct USBAddress *usbAddr)<br>
> +{<br>
> + char *bus, *port;<br>
> +<br>
> + if (!usbAddr)<br>
> + return -1;<br>
> + if (!str)<br>
> + return -1;<br>
> +<br>
> + bus = (char *)str;<br>
> +<br>
> + if (virStrToLong_uip(bus, &port, 10, &usbAddr->bus) != 0)<br>
> + return -1;<br>
> +<br>
> + port++;<br>
> + if (virStrToLong_uip(port, NULL, 10, &usbAddr->port) != 0)<br>
> + return -1;<br>
> +<br>
> + return 0;<br>
> +}<br>
> +<br>
> /* pci address pci:0000.00.0x0a.0 (domain:bus:slot:function)<br>
> * ide disk address: ide:00.00.0 (controller:bus:unit)<br>
> * scsi disk address: scsi:00.00.0 (controller:bus:unit)<br>
> * ccw disk address: ccw:0xfe.0.0000 (cssid:ssid:devno)<br>
> + * usb disk address: usb:00.00 (bus:port)<br>
> */<br>
> <br>
> static int str2DiskAddress(const char *str, struct DiskAddress *diskAddr)<br>
> @@ -492,6 +521,9 @@ static int str2DiskAddress(const char *str, struct DiskAddress *diskAddr)<br>
> } else if (STREQLEN(type, "ccw", addr - type)) {<br>
> diskAddr->type = DISK_ADDR_TYPE_CCW;<br>
> return str2CCWAddress(addr + 1, &diskAddr->addr.ccw);<br>
> + } else if (STREQLEN(type, "usb", addr - type)) {<br>
> + diskAddr->type = DISK_ADDR_TYPE_USB;<br>
> + return str2USBAddress(addr + 1, &diskAddr->addr.usb);<br>
> }<br>
> <br>
> return -1;<br>
> @@ -648,8 +680,12 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)<br>
> " bus='%u' unit='%llu' />\n",<br>
> diskAddr.addr.scsi.controller, diskAddr.addr.scsi.bus,<br>
> diskAddr.addr.scsi.unit);<br>
> + } else if (diskAddr.type == DISK_ADDR_TYPE_USB) {<br>
> + virBufferAsprintf(&buf,<br>
> + "<address type='usb' bus='%u' port='%u' />\n",<br>
> + diskAddr.addr.usb.bus, diskAddr.addr.usb.port);<br>
> } else {<br>
> - vshError(ctl, "%s", _("expecting a scsi:00.00.00 address."));<br>
> + vshError(ctl, "%s", _("expecting a scsi:00.00.00 or usb:00.00 address."));<br>
> goto cleanup;<br>
> }<br>
> } else if (STRPREFIX((const char *)target, "hd")) {<br>
> diff --git a/tools/virsh.pod b/tools/virsh.pod<br>
> index dc100db9f3..2ca1b8f7a2 100644<br>
> --- a/tools/virsh.pod<br>
> +++ b/tools/virsh.pod<br>
> @@ -3060,7 +3060,7 @@ this disk may be attached (QEMU only).<br>
> I<serial> is the serial of disk device. I<wwn> is the wwn of disk device.<br>
> I<rawio> indicates the disk needs rawio capability.<br>
> I<address> is the address of disk device in the form of pci:domain.bus.slot.function,<br>
> -scsi:controller.bus.unit, ide:controller.bus.unit or ccw:cssid.ssid.devno.<br>
> +scsi:controller.bus.unit, ide:controller.bus.unit, usb:bus:port or ccw:cssid.ssid.devno.<br>
<br>
</div></div>Actually, it's usb:bus.port ;-) And also I'm breaking this long line<br>
(which gets even longer after next patch).<br>
<br>
Fixed and ACKed.<br>
<span class="HOEnZb"><font color="#888888"><br>
Michal<br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr">Best regards,</div><div dir="ltr">-----------------------------------<br></div><div dir="ltr">Han Han<br>Quality Engineer<br>Redhat.<br><br>Email: <a href="mailto:hhan@redhat.com" target="_blank">hhan@redhat.com</a><br>Phone: +861065339333<br></div></div></div></div></div></div>
</div>