>You created two examples one without <auth> and the other with it.  Why
not have one example with one disk using an iscsi/iser server with
<auth> and another without...

I copied from iSCSI test cases, and keep them as same structure.

>If all that matters is passing "iser:" instead if "iscsi:", then limit...
I will try to remove iser from <source> to see if it can work.

>Search through https://libvirt.org/formatdomain.html for "rdma" and be
sure the iscsi description is modified to note usage of "iser"...

For this behaviour, I did discuss in the mail list several days ago, they think add "iser" transport for existing iscsi driver should be better, since qemu using same driver for iser and iscsi.

Best Regards,

Charles.

On Fri, Jan 19, 2018 at 6:19 AM, John Ferlan <jferlan@redhat.com> wrote:


On 01/18/2018 01:46 AM, Charles Kelimod wrote:
> Hello John,
>

This is a technical list - top-posting is not acceptable.

> I have questions:
>
>>>This and the Parse makes no sense when compared to the 3 possible
> options.  That is, it's possible to have "tcp", "rdma", and "iser", but
> you only care about "iser".
>
> This is because for other types are optional, there was no this line
> here, therefor I added this and only care iser.
>

They may be optional, but they exist and thus cannot be just ignored
especially since you're trying to add something else.

>>Consider using a local @transport... I didn't check if src->hosts could
> be NULL here...
>
> This is used for iSCSI only, in this case, from my other
> place modification I should make sure src->hosts won't be NULL, and can
> it be local?
>

Loss of context here makes a response difficult, but I think my point
was to make a local @transport variable just made things easier to read
rather than what turns into a very long line.

>
> For those samples like "auth", I don't think those are all necessary,
> but if I don't add those, the tests won't pass. Because iser is some
> strange, just part of iSCSI, it is all same as iscsi except transport..
>

You created two examples one without <auth> and the other with it.  Why
not have one example with one disk using an iscsi/iser server with
<auth> and another without...

Also you didn't attempt hostdev examples, but if you did you probably
would find VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI will have a
number of places where you'll need adjustments.

>>Why do both <source> and <host> get the transport='iser'?
> From qemu command line and code architecture I believe both place are
> need, do you think we should use "iser" in only source or host section?
> I can do dig search.
>

If all that matters is passing "iser:" instead if "iscsi:", then limit
alterations to virStorageNetHostTransport processing. IOW: It seems all
that you need to adjust is the <host> element. AFAICT, formatting
protocol is handled properly in virDomainDiskSourceFormatNetwork and
parsed properly in virDomainDiskSourceNetworkParse. You could modify the
latter to alter the comment to note "iser" as well as tcp (default),
unix, rdma, or iser. The tricky part will be ensuring that it's only
used with an iSCSI protocol, but checking that is not impossible during
domain device post processing.

Searching on virStorageNetHostTransport and VIR_STORAGE_NET_HOST_TRANS_
will "show" where changes need to be made. Making changes across
multiple patches where the one patch handles just the XML changes and
another handles the qemu changes is perhaps better. Preceding those may
be a patch with adjustments to existing if/else logic to convert to
switch/case logic to ensure future adjustments cover all the options.

Search through https://libvirt.org/formatdomain.html for "rdma" and be
sure the iscsi description is modified to note usage of "iser"...

Looking forward to what I think is actually v5

John
>
>
> Best Regards,
> Charles.
>
>
> On Wed, Jan 17, 2018 at 7:10 AM, John Ferlan <jferlan@redhat.com
> <mailto:jferlan@redhat.com>> wrote:
>
>
>
>     On 01/16/2018 03:52 AM, lichstor@gmail.com
>     <mailto:lichstor@gmail.com> wrote:
>     > From: zhangshengyu <zhangshengyu@fusionstack.cn
>     <mailto:zhangshengyu@fusionstack.cn>>
>     >
>
>     This needs to be split up better into multiple patches - there are many
>     examples of how to do that. Just see how patches were done the last time
>     someone added a new transport type. Typically the docs/schemas,
>     src/conf, src/util, xml2xml tests would go in one patch while the
>     src/qemu, xml2argv patches in a second patch.  Each patch would be
>     compile-able and testable.
>
>     As pointed out before, you're still not completely following the
>     contributor guidelines w/r/t commit message. Furthermore, when you
>     "update" your patch and post a followup version, you should make a "v2"
>     or "v3" or "v4" in your header and then either in the cover letter or
>     after the '---' describe what changed since the previous patch.
>
>     The first patch would also need to update docs/formatdomain.html.in
>     <http://formatdomain.html.in> and
>     the commit message should also describe the new XML being added - there
>     are many examples.
>
>     > ---
>     >  docs/schemas/domaincommon.rng                      | 28 +++++++++++++
>     >  src/conf/domain_conf.c                             |  8 ++++
>     >  src/qemu/qemu_block.c                              | 24 ++++++++++-
>     >  src/qemu/qemu_command.c                            |  3 ++
>     >  src/qemu/qemu_parse_command.c                      | 10 ++++-
>     >  src/storage/storage_backend_gluster.c              |  1 +
>     >  src/util/virstoragefile.c                          |  3 +-
>     >  src/util/virstoragefile.h                          |  1 +
>     >  .../disk-drive-network-iser-auth.args              | 25 ++++++++++++
>     >  .../disk-drive-network-iser-auth.xml               | 44
>     ++++++++++++++++++++
>     >  .../qemuargv2xmldata/disk-drive-network-iser.args  | 25 ++++++++++++
>     >  tests/qemuargv2xmldata/disk-drive-network-iser.xml | 41
>     +++++++++++++++++++
>     >  tests/qemuargv2xmltest.c                           |  2 +
>     >  ...-drive-network-iser-auth-secrettype-invalid.xml | 33
>     +++++++++++++++
>     >  ...sk-drive-network-iser-auth-wrong-secrettype.xml | 33
>     +++++++++++++++
>     >  .../disk-drive-network-iser-auth.args              | 31
>     ++++++++++++++
>     >  .../disk-drive-network-iser-auth.xml               | 43
>     ++++++++++++++++++++
>     >  .../disk-drive-network-iser-lun.args               | 27 +++++++++++++
>     >  .../disk-drive-network-iser-lun.xml                | 28 +++++++++++++
>     >  .../qemuxml2argvdata/disk-drive-network-iser.args  | 29 +++++++++++++
>     >  tests/qemuxml2argvdata/disk-drive-network-iser.xml | 37
>     +++++++++++++++++
>     >  tests/qemuxml2argvtest.c                           |  7 ++++
>     >  .../disk-drive-network-iser-auth.xml               | 47
>     ++++++++++++++++++++++
>     >  .../qemuxml2xmloutdata/disk-drive-network-iser.xml | 41
>     +++++++++++++++++++
>     >  tests/qemuxml2xmltest.c                            |  2 +
>     >  25 files changed, 569 insertions(+), 4 deletions(-)
>     >  create mode 100644
>     tests/qemuargv2xmldata/disk-drive-network-iser-auth.args
>     >  create mode 100644
>     tests/qemuargv2xmldata/disk-drive-network-iser-auth.xml
>     >  create mode 100644
>     tests/qemuargv2xmldata/disk-drive-network-iser.args
>     >  create mode 100644 tests/qemuargv2xmldata/disk-drive-network-iser.xml
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-auth-secrettype-invalid.xml
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-auth-wrong-secrettype.xml
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-auth.args
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-auth.xml
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-lun.args
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser-lun.xml
>     >  create mode 100644
>     tests/qemuxml2argvdata/disk-drive-network-iser.args
>     >  create mode 100644 tests/qemuxml2argvdata/disk-drive-network-iser.xml
>     >  create mode 100644
>     tests/qemuxml2xmloutdata/disk-drive-network-iser-auth.xml
>     >  create mode 100644
>     tests/qemuxml2xmloutdata/disk-drive-network-iser.xml
>     >
>     > diff --git a/docs/schemas/domaincommon.rng
>     b/docs/schemas/domaincommon.rng
>     > index f22c932f6..819a8791d 100644
>     > --- a/docs/schemas/domaincommon.rng
>     > +++ b/docs/schemas/domaincommon.rng
>     > @@ -1534,6 +1534,7 @@
>     >                <choice>
>     >                  <value>tcp</value>
>     >                  <value>rdma</value>
>     > +                <value>iser</value>
>
>     This is adding the attribute for the <disk> <source> <host>, so why is
>     it also necessary on the <source ...> line after protocol...
>
>     >                </choice>
>     >              </attribute>
>     >            </optional>
>     > @@ -1613,6 +1614,15 @@
>     >        <optional>
>     >          <ref name="encryption"/>
>     >        </optional>
>     > +      <optional>
>
>     So this is the <disk> <source> transport attribute?
>
>     > +        <attribute name="transport">
>     > +          <choice>
>     > +            <value>tcp</value>
>     > +            <value>rdma</value>
>     > +            <value>iser</value>
>     > +          </choice>
>     > +        </attribute>
>
>     Furthermore, if it must be kept here, then since the <attribute>
>     sequence is repeated 3 times, may as well make a definition for it and
>     then use it everywhere rather than cut-copy-paste in each place.
>
>
>     > +      </optional>
>     >      </element>
>     >    </define>
>     >
>     > @@ -4386,6 +4396,15 @@
>     >            <attribute name="name">
>     >              <text/>
>     >            </attribute>
>     > +          <optional>
>     > +            <attribute name="transport">
>
>     This is the <hostdev> <source>, but I don't believe that it's actually
>     tested as there's no XML that I see...  I also didn't check to see
>     whether you parsed and formatted both <disk> and <hostdev> in
>     domain_conf...
>
>
>     > +              <choice>
>     > +                <value>tcp</value>
>     > +                <value>rdma</value>
>     > +                <value>iser</value>
>     > +              </choice>
>     > +            </attribute>
>     > +          </optional>
>     >            <interleave>
>     >              <oneOrMore>
>     >                <element name='host'>
>     > @@ -4397,6 +4416,15 @@
>     >                      <ref name="PortNumber"/>
>     >                    </attribute>
>     >                  </optional>
>     > +                <optional>
>     > +                  <attribute name="transport">
>
>     And this is for the <hostdev> <source> <host>
>
>     > +                    <choice>
>     > +                      <value>tcp</value>
>     > +                      <value>rdma</value>
>     > +                      <value>iser</value>
>     > +                    </choice>
>     > +                  </attribute>
>     > +                </optional>
>     >                  <empty/>
>     >                </element>
>     >              </oneOrMore>
>     > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>     > index a1c25060f..8aa193ac2 100644
>     > --- a/src/conf/domain_conf.c
>     > +++ b/src/conf/domain_conf.c
>     > @@ -7075,6 +7075,7 @@ virDomainStorageNetworkParseHosts(xmlNodePtr node,
>     >                                    virStorageNetHostDefPtr *hosts,
>     >                                    size_t *nhosts)
>     >  {
>     > +    char *transport = NULL;
>     >      xmlNodePtr child;
>     >
>     >      for (child = node->children; child; child = child->next) {
>     > @@ -7086,6 +7087,9 @@ virDomainStorageNetworkParseHosts(xmlNodePtr node,
>     >          }
>     >      }
>     >
>     > +    if ((*hosts) && (transport = virXMLPropString(node, "transport")))
>     > +        (*hosts)->transport = virStorageNetHostTransportTypeFromString(transport);
>     > +
>
>     @transport is leaked
>
>     Why only parsed for "<host>" but the RNG has <source> and <host>?
>
>     >      return 0;
>     >  }
>     >
>     > @@ -8490,6 +8494,7 @@ virDomainDiskSourceNetworkParse(xmlNodePtr node,
>     >      if (virDomainStorageNetworkParseHosts(node, &src->hosts, &src->nhosts) < 0)
>     >          goto cleanup;
>     >
>     > +
>
>     extraneous blank line
>
>     >      virStorageSourceNetworkAssignDefaultPorts(src);
>     >
>     >      ret = 0;
>     > @@ -22371,6 +22376,9 @@ virDomainDiskSourceFormatNetwork(virBufferPtr attrBuf,
>     >
>     >      VIR_FREE(path);
>     >
>     > +    if (src->hosts && src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_ISER)
>     > +        virBufferEscapeString(attrBuf, " transport='%s'", "iser");
>     > +
>
>     The virStorageNetHostTransportTypeToString should be used and not "iser"
>     directly.
>
>     This and the Parse makes no sense when compared to the 3 possible
>     options.  That is, it's possible to have "tcp", "rdma", and "iser", but
>     you only care about "iser".
>
>     >      if (src->haveTLS != VIR_TRISTATE_BOOL_ABSENT &&
>     >          !(flags & VIR_DOMAIN_DEF_FORMAT_MIGRATABLE &&
>     >            src->tlsFromConfig))
>     > diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
>     > index 585f0255e..49837205f 100644
>     > --- a/src/qemu/qemu_block.c
>     > +++ b/src/qemu/qemu_block.c
>     > @@ -433,6 +433,12 @@
>     qemuBlockStorageSourceGetURI(virStorageSourcePtr src)
>     >          if (VIR_STRDUP(uri->scheme,
>     >                       
>      virStorageNetProtocolTypeToString(src->protocol)) < 0)
>     >              goto cleanup;
>     > +    } else if (src->hosts->transport ==
>     VIR_STORAGE_NET_HOST_TRANS_ISER) {
>     > +        uri->port = src->hosts->port;
>     > +
>     > +        if (VIR_STRDUP(uri->scheme,
>     > +                     
>      virStorageNetHostTransportTypeToString(src->hosts->transport)) < 0)
>     > +            goto cleanup;
>     >      } else {
>     >          if (virAsprintf(&uri->scheme, "%s+%s",
>     >                         
>     virStorageNetProtocolTypeToString(src->protocol),
>     > @@ -506,6 +512,19 @@
>     qemuBlockStorageSourceBuildJSONSocketAddress(virStorageNetHostDefPtr
>     host,
>     >              goto cleanup;
>     >          break;
>     >
>     > +    case VIR_STORAGE_NET_HOST_TRANS_ISER:
>     > +        transport = "iser";
>
>     again TypeToString should be used...
>
>     > +        if (virAsprintf(&port, "%u", host->port) < 0)
>     > +            goto cleanup;
>     > +
>     > +        if (virJSONValueObjectCreate(&server,
>     > +                                     "s:type", transport,
>     > +                                     "s:host", host->name,
>     > +                                     "s:port", port,
>     > +                                     NULL) < 0)
>     > +            goto cleanup;
>     > +        break;
>     > +
>     >      case VIR_STORAGE_NET_HOST_TRANS_UNIX:
>     >          if (virJSONValueObjectCreate(&server,
>     >                                       "s:type", "unix",
>     > @@ -590,7 +609,8 @@ qemuBlockStorageSourceBuildJSONInetSocketAddress(virStorageNetHostDefPtr host)
>     >      virJSONValuePtr ret = NULL;
>     >      char *port = NULL;
>     >
>     > -    if (host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP) {
>     > +    if (host->transport != VIR_STORAGE_NET_HOST_TRANS_TCP &&
>     > +        host->transport != VIR_STORAGE_NET_HOST_TRANS_ISER) {
>     >          virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
>     >                         _("only TCP protocol can be converted to InetSocketAddress"));
>
>     This doesn't make sense - the error message doesn't match the if
>     conditions.  Check your usage of && to considering what the other
>     options are and what's being checked here.
>
>     >          return NULL;
>     > @@ -831,7 +851,7 @@ qemuBlockStorageSourceGetISCSIProps(virStorageSourcePtr src)
>     >                                            "s:portal", portal,
>     >                                            "s:target", target,
>     >                                            "u:lun", lun,
>     > -                                          "s:transport", "tcp",
>     > +                                          "s:transport", virStorageNetHostTransportTypeToString(src->hosts->transport),
>
>     Consider using a local @transport... I didn't check if src->hosts could
>     be NULL here...
>
>     >                                            "S:user", username,
>     >                                            "S:password-secret",
>     objalias,
>     >                                            NULL));
>     > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
>     > index b8aede32d..dd6e3be9a 100644
>     > --- a/src/qemu/qemu_command.c
>     > +++ b/src/qemu/qemu_command.c
>     > @@ -883,6 +883,8 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src,
>     >              if (!((src->hosts->name && strchr(src->hosts->name,
>     ':')) ||
>     >                    (src->hosts->transport ==
>     VIR_STORAGE_NET_HOST_TRANS_TCP &&
>     >                     !src->hosts->name) ||
>     > +                  (src->hosts->transport ==
>     VIR_STORAGE_NET_HOST_TRANS_ISER &&
>     > +                   !src->hosts->name) ||
>     >                    (src->hosts->transport ==
>     VIR_STORAGE_NET_HOST_TRANS_UNIX &&
>     >                     src->hosts->socket &&
>     >                     src->hosts->socket[0] != '/'))) {
>     > @@ -891,6 +893,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src,
>     >
>     >                  switch (src->hosts->transport) {
>     >                  case VIR_STORAGE_NET_HOST_TRANS_TCP:
>     > +                case VIR_STORAGE_NET_HOST_TRANS_ISER:
>     >                      virBufferAsprintf(&buf, "%s:%u",
>     >                                        src->hosts->name,
>     src->hosts->port);
>     >                      break;
>     > diff --git a/src/qemu/qemu_parse_command.c
>     b/src/qemu/qemu_parse_command.c
>     > index 5fe3f97d0..d376af208 100644
>     > --- a/src/qemu/qemu_parse_command.c
>     > +++ b/src/qemu/qemu_parse_command.c
>     > @@ -70,7 +70,9 @@ qemuParseDriveURIString(virDomainDiskDefPtr def,
>     virURIPtr uri,
>     >      if (transp)
>     >          *transp++ = 0;
>     >
>     > -    if (STRNEQ(uri->scheme, scheme)) {
>     > +    if (STREQ(uri->scheme, "iser")) {
>     > +        transp = (char *)"iser";
>
>     <sigh>
>
>     At least you attempted the parse code - it's largely forgotten.
>
>     > +    } else if (STRNEQ(uri->scheme, scheme)) {
>     >          virReportError(VIR_ERR_INTERNAL_ERROR,
>     >                         _("Invalid transport/scheme '%s'"),
>     uri->scheme);
>     >          goto error;
>     > @@ -709,6 +711,12 @@
>     qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
>     >
>     >                      if (qemuParseISCSIString(def) < 0)
>     >                          goto error;
>     > +                } else if (STRPREFIX(def->src->path, "iser:")) {
>     > +                    def->src->type = VIR_STORAGE_TYPE_NETWORK;
>     > +                    def->src->protocol =
>     VIR_STORAGE_NET_PROTOCOL_ISCSI;
>     > +
>     > +                    if (qemuParseISCSIString(def) < 0)
>     > +                        goto error;
>     >                  } else if (STRPREFIX(def->src->path, "sheepdog:")) {
>     >                      char *p = def->src->path;
>     >                      char *port, *vdi;
>     > diff --git a/src/storage/storage_backend_gluster.c
>     b/src/storage/storage_backend_gluster.c
>     > index 5eea84f16..1452fa0cd 100644
>     > --- a/src/storage/storage_backend_gluster.c
>     > +++ b/src/storage/storage_backend_gluster.c
>     > @@ -608,6 +608,7 @@
>     virStorageFileBackendGlusterInitServer(virStorageFileBackendGlusterPrivPtr
>     priv,
>     >          hoststr = host->socket;
>     >          break;
>     >
>     > +    case VIR_STORAGE_NET_HOST_TRANS_ISER:
>     >      case VIR_STORAGE_NET_HOST_TRANS_LAST:
>     >          break;
>     >      }
>     > diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
>     > index 5780180a9..63253a9c4 100644
>     > --- a/src/util/virstoragefile.c
>     > +++ b/src/util/virstoragefile.c
>     > @@ -92,7 +92,8 @@ VIR_ENUM_IMPL(virStorageNetProtocol,
>     VIR_STORAGE_NET_PROTOCOL_LAST,
>     >  VIR_ENUM_IMPL(virStorageNetHostTransport,
>     VIR_STORAGE_NET_HOST_TRANS_LAST,
>     >                "tcp",
>     >                "unix",
>     > -              "rdma")
>     > +              "rdma",
>     > +              "iser")
>     >
>     >  VIR_ENUM_IMPL(virStorageSourcePoolMode,
>     >                VIR_STORAGE_SOURCE_POOL_MODE_LAST,
>     > diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h
>     > index ecd806c93..5a6ec7776 100644
>     > --- a/src/util/virstoragefile.h
>     > +++ b/src/util/virstoragefile.h
>     > @@ -147,6 +147,7 @@ typedef enum {
>     >      VIR_STORAGE_NET_HOST_TRANS_TCP,
>     >      VIR_STORAGE_NET_HOST_TRANS_UNIX,
>     >      VIR_STORAGE_NET_HOST_TRANS_RDMA,
>     > +    VIR_STORAGE_NET_HOST_TRANS_ISER,
>     >
>     >      VIR_STORAGE_NET_HOST_TRANS_LAST
>     >  } virStorageNetHostTransport;
>     > diff --git
>     a/tests/qemuargv2xmldata/disk-drive-network-iser-auth.args
>     b/tests/qemuargv2xmldata/disk-drive-network-iser-auth.args
>     > new file mode 100644
>     > index 000000000..aaf10d8c8
>     > --- /dev/null
>     > +++ b/tests/qemuargv2xmldata/disk-drive-network-iser-auth.args
>     > @@ -0,0 +1,25 @@
>     > +LC_ALL=C \
>     > +PATH=/bin \
>     > +HOME=/home/test \
>     > +USER=test \
>     > +LOGNAME=test \
>     > +QEMU_AUDIO_DRV=none \
>     > +/usr/bin/qemu-system-i686 \
>     > +-name QEMUGuest1 \
>     > +-S \
>     > +-M pc \
>     > +-m 214 \
>     > +-smp 1 \
>     > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>     > +-nographic \
>     > +-monitor unix:/tmp/test-monitor,server,nowait \
>     > +-no-acpi \
>     > +-boot c \
>     > +-usb \
>     > +-drive
>     file=iser://myname:AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A@example.org <mailto:myname%3AAQCVn5hO6HzFAhAAq0NCv8jtJcIcE%2BHOBlMQ1A@example.org>:\
>     > +6000/iqn.1992-01.com.example%3Astorage/1,format=raw,if=virtio \
>     > +-drive
>     file=iser://example.org:6000/iqn.1992-01.com.example%3Astorage/2,\
>     <http://example.org:6000/iqn.1992-01.com.example%3Astorage/2,\>
>     > +format=raw,if=virtio \
>     > +-net none \
>     > +-serial none \
>     > +-parallel none
>     > diff --git
>     a/tests/qemuargv2xmldata/disk-drive-network-iser-auth.xml
>     b/tests/qemuargv2xmldata/disk-drive-network-iser-auth.xml
>     > new file mode 100644
>     > index 000000000..7226443fb
>     > --- /dev/null
>     > +++ b/tests/qemuargv2xmldata/disk-drive-network-iser-auth.xml
>     > @@ -0,0 +1,44 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='iscsi' usage='qemuargv2xml_usage'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/1' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>
>     Why do both <source> and <host> get the transport='iser'?
>
>     Since patches weren't well formed, I didn't dig in too deep into
>     checking what you've done vs. how it should be done.
>
>     Does "auth" really have any bearing here? That is, is it really
>     necessary to supply both two tests where one only adds auth that has
>     nothing to do with iser transport?
>
>     John
>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
>     function='0x0'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/2' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>     function='0x0'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>     function='0x2'/>
>     > +    </controller>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuargv2xmldata/disk-drive-network-iser.args
>     b/tests/qemuargv2xmldata/disk-drive-network-iser.args
>     > new file mode 100644
>     > index 000000000..c476e759e
>     > --- /dev/null
>     > +++ b/tests/qemuargv2xmldata/disk-drive-network-iser.args
>     > @@ -0,0 +1,25 @@
>     > +LC_ALL=C \
>     > +PATH=/bin \
>     > +HOME=/home/test \
>     > +USER=test \
>     > +LOGNAME=test \
>     > +QEMU_AUDIO_DRV=none \
>     > +/usr/bin/qemu-system-i686 \
>     > +-name QEMUGuest1 \
>     > +-S \
>     > +-M pc \
>     > +-m 214 \
>     > +-smp 1 \
>     > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>     > +-nographic \
>     > +-monitor unix:/tmp/test-monitor,server,nowait \
>     > +-no-acpi \
>     > +-boot c \
>     > +-usb \
>     > +-drive
>     file=iser://example.org:6000/iqn.1992-01.com.example,format=raw,\
>     <http://example.org:6000/iqn.1992-01.com.example,format=raw,\>
>     > +if=virtio \
>     > +-drive
>     file=iser://example.org:6000/iqn.1992-01.com.example/1,format=raw,\
>     <http://example.org:6000/iqn.1992-01.com.example/1,format=raw,\>
>     > +if=virtio \
>     > +-net none \
>     > +-serial none \
>     > +-parallel none
>     > diff --git a/tests/qemuargv2xmldata/disk-drive-network-iser.xml
>     b/tests/qemuargv2xmldata/disk-drive-network-iser.xml
>     > new file mode 100644
>     > index 000000000..88f043f66
>     > --- /dev/null
>     > +++ b/tests/qemuargv2xmldata/disk-drive-network-iser.xml
>     > @@ -0,0 +1,41 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example/0'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
>     function='0x0'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example/1'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>     function='0x0'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>     function='0x2'/>
>     > +    </controller>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
>     > index cb010268c..59b26c647 100644
>     > --- a/tests/qemuargv2xmltest.c
>     > +++ b/tests/qemuargv2xmltest.c
>     > @@ -213,6 +213,8 @@ mymain(void)
>     >      DO_TEST("disk-drive-network-nbd-unix");
>     >      DO_TEST("disk-drive-network-iscsi");
>     >      DO_TEST("disk-drive-network-iscsi-auth");
>     > +    DO_TEST("disk-drive-network-iser");
>     > +    DO_TEST("disk-drive-network-iser-auth");
>     >      DO_TEST("disk-drive-network-gluster");
>     >      DO_TEST("disk-drive-network-rbd");
>     >      DO_TEST("disk-drive-network-rbd-auth");
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-auth-secrettype-invalid.xml
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth-secrettype-invalid.xml
>     > new file mode 100644
>     > index 000000000..dbcf484dc
>     > --- /dev/null
>     > +++
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth-secrettype-invalid.xml
>     > @@ -0,0 +1,33 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/1' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'/>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-auth-wrong-secrettype.xml
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth-wrong-secrettype.xml
>     > new file mode 100644
>     > index 000000000..5525e9d86
>     > --- /dev/null
>     > +++
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth-wrong-secrettype.xml
>     > @@ -0,0 +1,33 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='ceph' usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/1' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'/>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-auth.args
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth.args
>     > new file mode 100644
>     > index 000000000..5fa7a04bb
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser-auth.args
>     > @@ -0,0 +1,31 @@
>     > +LC_ALL=C \
>     > +PATH=/bin \
>     > +HOME=/home/test \
>     > +USER=test \
>     > +LOGNAME=test \
>     > +QEMU_AUDIO_DRV=none \
>     > +/usr/bin/qemu-system-i686 \
>     > +-name QEMUGuest1 \
>     > +-S \
>     > +-M pc \
>     > +-m 214 \
>     > +-smp 1,sockets=1,cores=1,threads=1 \
>     > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>     > +-nographic \
>     > +-nodefaults \
>     > +-chardev
>     socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
>     > +server,nowait \
>     > +-mon chardev=charmonitor,id=monitor,mode=readline \
>     > +-no-acpi \
>     > +-boot c \
>     > +-usb \
>     > +-drive
>     file=iser://myname:AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A@example.org <mailto:myname%3AAQCVn5hO6HzFAhAAq0NCv8jtJcIcE%2BHOBlMQ1A@example.org>:\
>     > +6000/iqn.1992-01.com.example%3Astorage/1,format=raw,if=none,\
>     > +id=drive-virtio-disk0 \
>     > +-device virtio-blk-pci,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\
>     > +id=virtio-disk0 \
>     > +-drive
>     file=iser://myname:AQCVn5hO6HzFAhAAq0NCv8jtJcIcE+HOBlMQ1A@example.org <mailto:myname%3AAQCVn5hO6HzFAhAAq0NCv8jtJcIcE%2BHOBlMQ1A@example.org>:\
>     > +6000/iqn.1992-01.com.example%3Astorage/2,format=raw,if=none,\
>     > +id=drive-virtio-disk1 \
>     > +-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk1,\
>     > +id=virtio-disk1
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-auth.xml
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-auth.xml
>     > new file mode 100644
>     > index 000000000..fbcb6b4f1
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser-auth.xml
>     > @@ -0,0 +1,43 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='iscsi' usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/1' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='iscsi' usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/2' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'/>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-lun.args
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-lun.args
>     > new file mode 100644
>     > index 000000000..d9428533b
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser-lun.args
>     > @@ -0,0 +1,27 @@
>     > +LC_ALL=C \
>     > +PATH=/bin \
>     > +HOME=/home/test \
>     > +USER=test \
>     > +LOGNAME=test \
>     > +QEMU_AUDIO_DRV=none \
>     > +/usr/bin/qemu-system-i686 \
>     > +-name QEMUGuest1 \
>     > +-S \
>     > +-M pc \
>     > +-m 214 \
>     > +-smp 1,sockets=1,cores=1,threads=1 \
>     > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>     > +-nographic \
>     > +-nodefconfig \
>     > +-nodefaults \
>     > +-chardev
>     socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
>     > +server,nowait \
>     > +-mon chardev=charmonitor,id=monitor,mode=readline \
>     > +-no-acpi \
>     > +-boot c \
>     > +-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x3 \
>     > +-usb \
>     > +-drive
>     file=iser://example.org:3260/iqn.1992-01.com.example/0,format=raw,\
>     <http://example.org:3260/iqn.1992-01.com.example/0,format=raw,\>
>     > +if=none,id=drive-scsi0-0-0-0 \
>     > +-device scsi-block,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\
>     > +drive=drive-scsi0-0-0-0,id=scsi0-0-0-0
>     > diff --git
>     a/tests/qemuxml2argvdata/disk-drive-network-iser-lun.xml
>     b/tests/qemuxml2argvdata/disk-drive-network-iser-lun.xml
>     > new file mode 100644
>     > index 000000000..25fa76140
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser-lun.xml
>     > @@ -0,0 +1,28 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='lun'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='3260'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='sda' bus='scsi'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'/>
>     > +    <controller type='scsi' index='0' model='virtio-scsi'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuxml2argvdata/disk-drive-network-iser.args
>     b/tests/qemuxml2argvdata/disk-drive-network-iser.args
>     > new file mode 100644
>     > index 000000000..49ea467ff
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser.args
>     > @@ -0,0 +1,29 @@
>     > +LC_ALL=C \
>     > +PATH=/bin \
>     > +HOME=/home/test \
>     > +USER=test \
>     > +LOGNAME=test \
>     > +QEMU_AUDIO_DRV=none \
>     > +/usr/bin/qemu-system-i686 \
>     > +-name QEMUGuest1 \
>     > +-S \
>     > +-M pc \
>     > +-m 214 \
>     > +-smp 1,sockets=1,cores=1,threads=1 \
>     > +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
>     > +-nographic \
>     > +-nodefaults \
>     > +-chardev
>     socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
>     > +server,nowait \
>     > +-mon chardev=charmonitor,id=monitor,mode=readline \
>     > +-no-acpi \
>     > +-boot c \
>     > +-usb \
>     > +-drive
>     file=iser://example.org:6000/iqn.1992-01.com.example/0,format=raw,\
>     <http://example.org:6000/iqn.1992-01.com.example/0,format=raw,\>
>     > +if=none,id=drive-virtio-disk0 \
>     > +-device virtio-blk-pci,bus=pci.0,addr=0x3,drive=drive-virtio-disk0,\
>     > +id=virtio-disk0 \
>     > +-drive
>     file=iser://example.org:6000/iqn.1992-01.com.example/1,format=raw,\
>     <http://example.org:6000/iqn.1992-01.com.example/1,format=raw,\>
>     > +if=none,id=drive-virtio-disk1 \
>     > +-device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk1,\
>     > +id=virtio-disk1
>     > diff --git a/tests/qemuxml2argvdata/disk-drive-network-iser.xml
>     b/tests/qemuxml2argvdata/disk-drive-network-iser.xml
>     > new file mode 100644
>     > index 000000000..b1634555c
>     > --- /dev/null
>     > +++ b/tests/qemuxml2argvdata/disk-drive-network-iser.xml
>     > @@ -0,0 +1,37 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example/1'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'/>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
>     > index be32d891e..dcb35f017 100644
>     > --- a/tests/qemuxml2argvtest.c
>     > +++ b/tests/qemuxml2argvtest.c
>     > @@ -939,6 +939,13 @@ mymain(void)
>     >      DO_TEST("disk-drive-network-iscsi-lun",
>     >              QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
>     >              QEMU_CAPS_SCSI_BLOCK);
>     > +    DO_TEST("disk-drive-network-iser", NONE);
>     > +    DO_TEST("disk-drive-network-iser-auth", NONE);
>     > +   
>     DO_TEST_PARSE_ERROR("disk-drive-network-iser-auth-secrettype-invalid",
>     NONE);
>     > +   
>     DO_TEST_PARSE_ERROR("disk-drive-network-iser-auth-wrong-secrettype",
>     NONE);
>     > +    DO_TEST("disk-drive-network-iser-lun",
>     > +            QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_VIRTIO_SCSI,
>     > +            QEMU_CAPS_SCSI_BLOCK);
>     >      DO_TEST("disk-drive-network-gluster",
>     >              QEMU_CAPS_GLUSTER_DEBUG_LEVEL);
>     >      DO_TEST("disk-drive-network-rbd", NONE);
>     > diff --git
>     a/tests/qemuxml2xmloutdata/disk-drive-network-iser-auth.xml
>     b/tests/qemuxml2xmloutdata/disk-drive-network-iser-auth.xml
>     > new file mode 100644
>     > index 000000000..1b27fdea2
>     > --- /dev/null
>     > +++ b/tests/qemuxml2xmloutdata/disk-drive-network-iser-auth.xml
>     > @@ -0,0 +1,47 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='iscsi' usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/1' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
>     function='0x0'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <auth username='myname'>
>     > +        <secret type='iscsi' usage='mycluster_myname'/>
>     > +      </auth>
>     > +      <source protocol='iscsi'
>     name='iqn.1992-01.com.example:storage/2' transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>     function='0x0'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>     function='0x2'/>
>     > +    </controller>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuxml2xmloutdata/disk-drive-network-iser.xml
>     b/tests/qemuxml2xmloutdata/disk-drive-network-iser.xml
>     > new file mode 100644
>     > index 000000000..88f043f66
>     > --- /dev/null
>     > +++ b/tests/qemuxml2xmloutdata/disk-drive-network-iser.xml
>     > @@ -0,0 +1,41 @@
>     > +<domain type='qemu'>
>     > +  <name>QEMUGuest1</name>
>     > +  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
>     > +  <memory unit='KiB'>219136</memory>
>     > +  <currentMemory unit='KiB'>219136</currentMemory>
>     > +  <vcpu placement='static'>1</vcpu>
>     > +  <os>
>     > +    <type arch='i686' machine='pc'>hvm</type>
>     > +    <boot dev='hd'/>
>     > +  </os>
>     > +  <clock offset='utc'/>
>     > +  <on_poweroff>destroy</on_poweroff>
>     > +  <on_reboot>restart</on_reboot>
>     > +  <on_crash>destroy</on_crash>
>     > +  <devices>
>     > +    <emulator>/usr/bin/qemu-system-i686</emulator>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example/0'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vda' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03'
>     function='0x0'/>
>     > +    </disk>
>     > +    <disk type='network' device='disk'>
>     > +      <driver name='qemu' type='raw'/>
>     > +      <source protocol='iscsi' name='iqn.1992-01.com.example/1'
>     transport='iser'>
>     > +        <host name='example.org <http://example.org>' port='6000'
>     transport='iser'/>
>     > +      </source>
>     > +      <target dev='vdb' bus='virtio'/>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04'
>     function='0x0'/>
>     > +    </disk>
>     > +    <controller type='usb' index='0'>
>     > +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01'
>     function='0x2'/>
>     > +    </controller>
>     > +    <controller type='pci' index='0' model='pci-root'/>
>     > +    <input type='mouse' bus='ps2'/>
>     > +    <input type='keyboard' bus='ps2'/>
>     > +    <memballoon model='none'/>
>     > +  </devices>
>     > +</domain>
>     > diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
>     > index 2be8eb2c1..aeeda2dd1 100644
>     > --- a/tests/qemuxml2xmltest.c
>     > +++ b/tests/qemuxml2xmltest.c
>     > @@ -515,6 +515,8 @@ mymain(void)
>     >      DO_TEST("disk-drive-network-nbd-unix", NONE);
>     >      DO_TEST("disk-drive-network-iscsi", NONE);
>     >      DO_TEST("disk-drive-network-iscsi-auth", NONE);
>     > +    DO_TEST("disk-drive-network-iser", NONE);
>     > +    DO_TEST("disk-drive-network-iser-auth", NONE);
>     >      DO_TEST("disk-drive-network-gluster", NONE);
>     >      DO_TEST("disk-drive-network-rbd", NONE);
>     >      DO_TEST("disk-drive-network-rbd-auth", NONE);
>     >
>
>