[libvirt] [PATCH v4 2/3] hostdev: Add iSCSI hostdev XML

Eric Blake eblake at redhat.com
Thu Aug 7 18:28:44 UTC 2014


On 08/05/2014 05:24 PM, John Ferlan wrote:
> Introduce a new structure to handle an iSCSI host device based on the
> existing virDomainHostdevSubsysSCSI by adding a "protocol='iscsi'" to
> the <source/> element.  The hostdev structure mimics the existing
> <disk/> element for an iSCSI device (network) device. New XML is:
> 
>   <hostdev mode='subsystem' type='scsi' managed='yes'>
>     <source protocol='iscsi' name='iqn.1992-01.com.example'>
>       <host name='example.org' port='3260'/>
>       <auth username='myname'>
>         <secret type='iscsi' usage='mycluster_myname'/>
>       </auth>
>     </source>
>     <address type='drive' controller='0' bus='0' target='2' unit='5'/>
>   </hostdev>
> 
> The controller element will mimic the existing scsi_host code insomuch
> as when 'lsi' and 'virtio-scsi' are used.

Might be worth mentioning that protocol='adapter' was added as an
optional marker of the existing use.

> 
> Signed-off-by: John Ferlan <jferlan at redhat.com>
> ---
> Changes since v3:
>   * Rework RNG to match comments from review 8/8
>   * Move the <auth> inside the <source>
>   * Modify the tests and html doc to match where the <auth> is found
> 


> +++ b/src/conf/domain_conf.c
> @@ -597,6 +597,11 @@ VIR_ENUM_IMPL(virDomainHostdevSubsysPCIBackend,
>                "vfio",
>                "xen")
>  
> +VIR_ENUM_IMPL(virDomainHostdevSubsysSCSIProtocol,
> +              VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_LAST,
> +              "adapter",
> +              "iscsi")

So 0 == adapter...

> +static int
>  virDomainHostdevSubsysSCSIDefParseXML(xmlNodePtr sourcenode,
>                                        virDomainHostdevSubsysSCSIPtr scsisrc)
>  {
> -    return virDomainHostdevSubsysSCSIHostDefParseXML(sourcenode, scsisrc);
> +    char *protocol = NULL;
> +    int ret = -1;
> +
> +    if ((protocol = virXMLPropString(sourcenode, "protocol"))) {
> +        scsisrc->protocol =
> +            virDomainHostdevSubsysSCSIProtocolTypeFromString(protocol);
> +        if (scsisrc->protocol < 0) {
> +            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> +                           _("Unknown SCSI subsystem protocol '%s'"),
> +                           protocol);
> +            goto cleanup;
> +        }
> +    }
> +
> +    if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI)
> +        ret = virDomainHostdevSubsysSCSIiSCSIDefParseXML(sourcenode, scsisrc);
> +    else
> +        ret = virDomainHostdevSubsysSCSIHostDefParseXML(sourcenode, scsisrc);

so whether the user omitted protocol or specified it as adapter, they
get the old style parse...

> -    if (def->missing &&
> -        !(flags & VIR_DOMAIN_XML_INACTIVE))
> -        virBufferAddLit(buf, " missing='yes'");
> +    if (def->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
> +        scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) {
> +        const char *protocol =
> +            virDomainHostdevSubsysSCSIProtocolTypeToString(scsisrc->protocol);

...but here, you don't output the protocol.  I can live with that (the
alternative would be to always output the protocol, whether or not it
was provided on input, and then touch up existing tests to reflect the
new output; but the end result is the same).

ACK

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 539 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140807/7dc608fe/attachment-0001.sig>


More information about the libvir-list mailing list