[libvirt] [PATCH 1/2] virsh: usb support for virsh attach-disk --address

Han Han hhan at redhat.com
Mon Jul 9 15:54:02 UTC 2018


Sorry for this stupid mistake. Thank you for reviewing.

On Mon, Jul 9, 2018 at 11:20 PM, Michal Privoznik <mprivozn at redhat.com>
wrote:

> On 07/04/2018 05:04 AM, Han Han wrote:
> > Adding usb bus address support to the optional address parameter of virsh
> > attach-disk. The address is used as bus:port. e.g.
> > usb:1:1
> >
> > Signed-off-by: Han Han <hhan at redhat.com>
> > ---
> >  tools/virsh-domain.c | 38 +++++++++++++++++++++++++++++++++++++-
> >  tools/virsh.pod      |  2 +-
> >  2 files changed, 38 insertions(+), 2 deletions(-)
> >
> > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> > index e9b88f0013..5a445eff44 100644
> > --- a/tools/virsh-domain.c
> > +++ b/tools/virsh-domain.c
> > @@ -319,6 +319,7 @@ enum {
> >      DISK_ADDR_TYPE_SCSI,
> >      DISK_ADDR_TYPE_IDE,
> >      DISK_ADDR_TYPE_CCW,
> > +    DISK_ADDR_TYPE_USB,
> >  };
> >
> >  struct PCIAddress {
> > @@ -346,6 +347,11 @@ struct CCWAddress {
> >      unsigned int devno;
> >  };
> >
> > +struct USBAddress {
> > +    unsigned int bus;
> > +    unsigned int port;
> > +};
> > +
> >  struct DiskAddress {
> >      int type;
> >      union {
> > @@ -353,6 +359,7 @@ struct DiskAddress {
> >          struct SCSIAddress scsi;
> >          struct IDEAddress ide;
> >          struct CCWAddress ccw;
> > +        struct USBAddress usb;
> >      } addr;
> >  };
> >
> > @@ -460,10 +467,32 @@ static int str2CCWAddress(const char *str, struct
> CCWAddress *ccwAddr)
> >      return 0;
> >  }
> >
> > +static int str2USBAddress(const char *str, struct USBAddress *usbAddr)
> > +{
> > +    char *bus, *port;
> > +
> > +    if (!usbAddr)
> > +        return -1;
> > +    if (!str)
> > +        return -1;
> > +
> > +    bus = (char *)str;
> > +
> > +    if (virStrToLong_uip(bus, &port, 10, &usbAddr->bus) != 0)
> > +        return -1;
> > +
> > +    port++;
> > +    if (virStrToLong_uip(port, NULL, 10, &usbAddr->port) != 0)
> > +        return -1;
> > +
> > +    return 0;
> > +}
> > +
> >  /* pci address pci:0000.00.0x0a.0 (domain:bus:slot:function)
> >   * ide disk address: ide:00.00.0 (controller:bus:unit)
> >   * scsi disk address: scsi:00.00.0 (controller:bus:unit)
> >   * ccw disk address: ccw:0xfe.0.0000 (cssid:ssid:devno)
> > + * usb disk address: usb:00.00 (bus:port)
> >   */
> >
> >  static int str2DiskAddress(const char *str, struct DiskAddress
> *diskAddr)
> > @@ -492,6 +521,9 @@ static int str2DiskAddress(const char *str, struct
> DiskAddress *diskAddr)
> >      } else if (STREQLEN(type, "ccw", addr - type)) {
> >          diskAddr->type = DISK_ADDR_TYPE_CCW;
> >          return str2CCWAddress(addr + 1, &diskAddr->addr.ccw);
> > +    } else if (STREQLEN(type, "usb", addr - type)) {
> > +        diskAddr->type = DISK_ADDR_TYPE_USB;
> > +        return str2USBAddress(addr + 1, &diskAddr->addr.usb);
> >      }
> >
> >      return -1;
> > @@ -648,8 +680,12 @@ cmdAttachDisk(vshControl *ctl, const vshCmd *cmd)
> >                                    " bus='%u' unit='%llu' />\n",
> >                                    diskAddr.addr.scsi.controller,
> diskAddr.addr.scsi.bus,
> >                                    diskAddr.addr.scsi.unit);
> > +            } else if (diskAddr.type == DISK_ADDR_TYPE_USB) {
> > +                virBufferAsprintf(&buf,
> > +                                  "<address type='usb' bus='%u'
> port='%u' />\n",
> > +                                  diskAddr.addr.usb.bus,
> diskAddr.addr.usb.port);
> >              } else {
> > -                vshError(ctl, "%s", _("expecting a scsi:00.00.00
> address."));
> > +                vshError(ctl, "%s", _("expecting a scsi:00.00.00 or
> usb:00.00 address."));
> >                  goto cleanup;
> >              }
> >          } else if (STRPREFIX((const char *)target, "hd")) {
> > diff --git a/tools/virsh.pod b/tools/virsh.pod
> > index dc100db9f3..2ca1b8f7a2 100644
> > --- a/tools/virsh.pod
> > +++ b/tools/virsh.pod
> > @@ -3060,7 +3060,7 @@ this disk may be attached (QEMU only).
> >  I<serial> is the serial of disk device. I<wwn> is the wwn of disk
> device.
> >  I<rawio> indicates the disk needs rawio capability.
> >  I<address> is the address of disk device in the form of
> pci:domain.bus.slot.function,
> > -scsi:controller.bus.unit, ide:controller.bus.unit or
> ccw:cssid.ssid.devno.
> > +scsi:controller.bus.unit, ide:controller.bus.unit, usb:bus:port or
> ccw:cssid.ssid.devno.
>
> Actually, it's usb:bus.port ;-) And also I'm breaking this long line
> (which gets even longer after next patch).
>
> Fixed and ACKed.
>
> Michal
>



-- 
Best regards,
-----------------------------------
Han Han
Quality Engineer
Redhat.

Email: hhan at redhat.com
Phone: +861065339333
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180709/c7f08e6d/attachment-0001.htm>


More information about the libvir-list mailing list