From: Clementine Hayat <clem(a)lse.epita.fr>
Introducing the pool as a noop. Integration inside the build
system. Implementation will be in the following commits.
Signed-off-by: Clementine Hayat <clem(a)lse.epita.fr>
---
configure.ac | 6 ++-
m4/virt-storage-iscsi-direct.m4 | 41 +++++++++++++++
src/conf/domain_conf.c | 4 ++
src/conf/storage_conf.c | 33 ++++++++++--
src/conf/storage_conf.h | 1 +
src/conf/virstorageobj.c | 2 +
src/storage/Makefile.inc.am | 22 ++++++++
src/storage/storage_backend.c | 6 +++
src/storage/storage_backend_iscsi_direct.c | 58 ++++++++++++++++++++++
src/storage/storage_backend_iscsi_direct.h | 6 +++
src/storage/storage_driver.c | 1 +
tools/virsh-pool.c | 3 ++
12 files changed, 178 insertions(+), 5 deletions(-)
create mode 100644 m4/virt-storage-iscsi-direct.m4
create mode 100644 src/storage/storage_backend_iscsi_direct.c
create mode 100644 src/storage/storage_backend_iscsi_direct.h
diff --git a/configure.ac b/configure.ac
index c668630a79..87ac4dc2c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -564,6 +564,7 @@ LIBVIRT_STORAGE_ARG_DIR
LIBVIRT_STORAGE_ARG_FS
LIBVIRT_STORAGE_ARG_LVM
LIBVIRT_STORAGE_ARG_ISCSI
+LIBVIRT_STORAGE_ARG_ISCSI_DIRECT
LIBVIRT_STORAGE_ARG_SCSI
LIBVIRT_STORAGE_ARG_MPATH
LIBVIRT_STORAGE_ARG_DISK
@@ -578,6 +579,7 @@ if test "$with_libvirtd" = "no"; then
with_storage_fs=no
with_storage_lvm=no
with_storage_iscsi=no
+ with_storage_iscsi_direct=no
with_storage_scsi=no
with_storage_mpath=no
with_storage_disk=no
@@ -598,6 +600,7 @@ LIBVIRT_STORAGE_CHECK_DIR
LIBVIRT_STORAGE_CHECK_FS
LIBVIRT_STORAGE_CHECK_LVM
LIBVIRT_STORAGE_CHECK_ISCSI
+LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT
LIBVIRT_STORAGE_CHECK_SCSI
LIBVIRT_STORAGE_CHECK_MPATH
LIBVIRT_STORAGE_CHECK_DISK
@@ -608,7 +611,7 @@ LIBVIRT_STORAGE_CHECK_ZFS
LIBVIRT_STORAGE_CHECK_VSTORAGE
with_storage=no
-for backend in dir fs lvm iscsi scsi mpath rbd disk; do
+for backend in dir fs lvm iscsi iscsi_direct scsi mpath rbd disk; do
if eval test \$with_storage_$backend = yes; then
with_storage=yes
break
@@ -936,6 +939,7 @@ LIBVIRT_STORAGE_RESULT_DIR
LIBVIRT_STORAGE_RESULT_FS
LIBVIRT_STORAGE_RESULT_LVM
LIBVIRT_STORAGE_RESULT_ISCSI
+LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT
LIBVIRT_STORAGE_RESULT_SCSI
LIBVIRT_STORAGE_RESULT_MPATH
LIBVIRT_STORAGE_RESULT_DISK
diff --git a/m4/virt-storage-iscsi-direct.m4 b/m4/virt-storage-iscsi-direct.m4
new file mode 100644
index 0000000000..cc2d490352
--- /dev/null
+++ b/m4/virt-storage-iscsi-direct.m4
@@ -0,0 +1,41 @@
+dnl Iscsi-direct storage
+dnl
+dnl Copyright (C) 2018 Clementine Hayat.
+dnl
+dnl This library is free software; you can redistribute it and/or
+dnl modify it under the terms of the GNU Lesser General Public
+dnl License as published by the Free Software Foundation; either
+dnl version 2.1 of the License, or (at your option) any later version.
+dnl
+dnl This library is distributed in the hope that it will be useful,
+dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl Lesser General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU Lesser General Public
+dnl License along with this library. If not, see
+dnl <
http://www.gnu.org/licenses/>.
+dnl
+
+AC_DEFUN([LIBVIRT_STORAGE_ARG_ISCSI_DIRECT], [
+ LIBVIRT_ARG_WITH_FEATURE([STORAGE_ISCSI_DIRECT],
+ [iscsi-direct backend for the storage driver],
+ [check])
+])
+
+AC_DEFUN([LIBVIRT_STORAGE_CHECK_ISCSI_DIRECT], [
+ AC_REQUIRE([LIBVIRT_CHECK_LIBISCSI])
+ if test "$with_storage_iscsi_direct" = "check"; then
+ with_storage_iscsi_direct=$with_libiscsi
+ fi
+ if test "$with_storage_iscsi_direct" = "yes"; then
+ AC_DEFINE_UNQUOTED([WITH_STORAGE_ISCSI_DIRECT], [1],
+ [whether iSCSI backend for storage driver is enabled])
+ fi
+ AM_CONDITIONAL([WITH_STORAGE_ISCSI_DIRECT],
+ [test "$with_storage_iscsi_direct" = "yes"])
+])
+
+AC_DEFUN([LIBVIRT_STORAGE_RESULT_ISCSI_DIRECT], [
+ LIBVIRT_RESULT([iscsi-direct], [$with_storage_iscsi_direct])
+])
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7396616eda..5af27a6ad2 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -30163,6 +30163,10 @@ virDomainDiskTranslateSourcePool(virDomainDiskDefPtr def)
break;
+ case VIR_STORAGE_POOL_ISCSI_DIRECT:
+ def->src->srcpool->mode = VIR_STORAGE_SOURCE_POOL_MODE_DIRECT;
+ break;
This is not exactly what I meant, this will not work.
Firstly, we should error out if startupPolicy is set the same way as we
do for VIR_STORAGE_POOL_ISCSI.
We also need to call all this code to translate the storage pool into
domain disk definition:
case VIR_STORAGE_SOURCE_POOL_MODE_DIRECT:
def->src->srcpool->actualtype = VIR_STORAGE_TYPE_NETWORK;
def->src->protocol = VIR_STORAGE_NET_PROTOCOL_ISCSI;
if (virDomainDiskTranslateSourcePoolAuth(def,
&pooldef->source) < 0)
goto cleanup;
/* Source pool may not fill in the secrettype field,
* so we need to do so here
*/
if (def->src->auth && !def->src->auth->secrettype) {
const char *secrettype =
virSecretUsageTypeToString(VIR_SECRET_USAGE_TYPE_ISCSI);
if (VIR_STRDUP(def->src->auth->secrettype, secrettype) < 0)
goto cleanup;
}
if (virDomainDiskAddISCSIPoolSourceHost(def, pooldef) < 0)
goto cleanup;
So I would suggest moving that code into separate function and calling
that function for VIR_STORAGE_POOL_ISCSI_DIRECT and also in the original
place of that code.
You can test this part by creating domain with this disk definition:
...
<disk type='volume' device='disk'>
<driver name='qemu' type='raw'/>
<source pool='storage-pool-name'
volume='storage-volume-name'/>
<target dev='vda' bus='virtio'/>
</disk>
...
Pavel