Message ID | 1343436248-10646-2-git-send-email-ronniesahlberg@gmail.com |
---|---|
State | New |
Headers | show |
Il 28/07/2012 02:44, Ronnie Sahlberg ha scritto: > This patch updates the iscsi layer to automatically pick a > 'unique' initiator-name based on the name of the vm in case the user > has not set an explicit iqn-name to use. > > Save the -name of the vm so that we can use it in the default iscsi name. > > Add a new variable that holds the name for the vm as specified by -name > and assign this name to the iscsi_name pointer gtom block/iscsi.c > > This way we can thus create default names to use as the initiator name > based on the guest session. > > If -name is not specified, iscsi will use a default initiator-name of > iqn.2008-11.org.linux-kvm > > If -name is specified, then iscsi will use a default initiatorname of > iqn.2008-11.org.linux-kvm:<name> > > Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com> > --- > block/iscsi.c | 16 +++++++++++++--- > qemu-doc.texi | 5 +++++ > qemu-options.hx | 8 ++++++++ > vl.c | 7 +++++++ > 4 files changed, 33 insertions(+), 3 deletions(-) > > diff --git a/block/iscsi.c b/block/iscsi.c > index 993a86d..abf60ee 100644 > --- a/block/iscsi.c > +++ b/block/iscsi.c > @@ -28,6 +28,7 @@ > #include <arpa/inet.h> > #include "qemu-common.h" > #include "qemu-error.h" > +#include "sysemu.h" > #include "block_int.h" > #include "trace.h" > #include "hw/scsi-defs.h" > @@ -40,6 +41,8 @@ > #include <hw/scsi-defs.h> > #endif > > +const char *iscsi_name; As a rule of thumb, every #ifdef CONFIG_* increases the chances that your patch is rejected. :) Please add instead a qemu_get_vm_name() function and make it return NULL in qemu-tool.c. Paolo > typedef struct IscsiLun { > struct iscsi_context *iscsi; > int lun; > @@ -896,23 +899,30 @@ static char *parse_initiator_name(const char *target) > QemuOptsList *list; > QemuOpts *opts; > const char *name = NULL; > + char *default_name; > + > + if (asprintf(&default_name, "iqn.2008-11.org.linux-kvm%s%s", > + iscsi_name ? ":" : "", > + iscsi_name ? iscsi_name : "") == -1) { > + default_name = (char *)"iqn.2008-11.org.linux-kvm"; > + } > > list = qemu_find_opts("iscsi"); > if (!list) { > - return g_strdup("iqn.2008-11.org.linux-kvm"); > + return g_strdup(default_name); > } > > opts = qemu_opts_find(list, target); > if (opts == NULL) { > opts = QTAILQ_FIRST(&list->head); > if (!opts) { > - return g_strdup("iqn.2008-11.org.linux-kvm"); > + return g_strdup(default_name); > } > } > > name = qemu_opt_get(opts, "initiator-name"); > if (!name) { > - return g_strdup("iqn.2008-11.org.linux-kvm"); > + return g_strdup(default_name); > } > > return g_strdup(name); > diff --git a/qemu-doc.texi b/qemu-doc.texi > index 84dad19..2360f7b 100644 > --- a/qemu-doc.texi > +++ b/qemu-doc.texi > @@ -734,6 +734,11 @@ Various session related parameters can be set via special options, either > in a configuration file provided via '-readconfig' or directly on the > command line. > > +If the initiator-name is not specified qemu will use a default name > +of 'iqn.2008-11.org.linux-kvm[:<name>'] where <name> is the name of the > +virtual machine. > + > + > @example > Setting a specific initiator name to use when logging in to the target > -iscsi initiator-name=iqn.qemu.test:my-initiator > diff --git a/qemu-options.hx b/qemu-options.hx > index dc68e15..3335bcc 100644 > --- a/qemu-options.hx > +++ b/qemu-options.hx > @@ -1893,6 +1893,11 @@ images for the guest storage. Both disk and cdrom images are supported. > Syntax for specifying iSCSI LUNs is > ``iscsi://<target-ip>[:<port>]/<target-iqn>/<lun>'' > > +By default qemu will use the iSCSI initiator-name > +'iqn.2008-11.org.linux-kvm[:<name>]' but this can also be set from the command > +line or a configuration file. > + > + > Example (without authentication): > @example > qemu-system-i386 -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \ > @@ -1922,6 +1927,9 @@ DEF("iscsi", HAS_ARG, QEMU_OPTION_iscsi, > " iSCSI session parameters\n", QEMU_ARCH_ALL) > STEXI > > +iSCSI parameters such as username and password can also be specified via > +a configuration file. See qemu-doc for more information and examples. > + > @item NBD > QEMU supports NBD (Network Block Devices) both using TCP protocol as well > as Unix Domain Sockets. > diff --git a/vl.c b/vl.c > index 8904db1..3320b7a 100644 > --- a/vl.c > +++ b/vl.c > @@ -169,6 +169,10 @@ int main(int argc, char **argv) > > #define MAX_VIRTIO_CONSOLES 1 > > +#ifdef CONFIG_LIBISCSI > +extern const char *iscsi_name; > +#endif > + > static const char *data_dir; > const char *bios_name = NULL; > enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB; > @@ -3074,6 +3078,9 @@ int main(int argc, char **argv, char **envp) > os_set_proc_name(p); > } > } > +#ifdef CONFIG_LIBISCSI > + iscsi_name = qemu_name; > +#endif > break; > case QEMU_OPTION_prom_env: > if (nb_prom_envs >= MAX_PROM_ENVS) { >
diff --git a/block/iscsi.c b/block/iscsi.c index 993a86d..abf60ee 100644 --- a/block/iscsi.c +++ b/block/iscsi.c @@ -28,6 +28,7 @@ #include <arpa/inet.h> #include "qemu-common.h" #include "qemu-error.h" +#include "sysemu.h" #include "block_int.h" #include "trace.h" #include "hw/scsi-defs.h" @@ -40,6 +41,8 @@ #include <hw/scsi-defs.h> #endif +const char *iscsi_name; + typedef struct IscsiLun { struct iscsi_context *iscsi; int lun; @@ -896,23 +899,30 @@ static char *parse_initiator_name(const char *target) QemuOptsList *list; QemuOpts *opts; const char *name = NULL; + char *default_name; + + if (asprintf(&default_name, "iqn.2008-11.org.linux-kvm%s%s", + iscsi_name ? ":" : "", + iscsi_name ? iscsi_name : "") == -1) { + default_name = (char *)"iqn.2008-11.org.linux-kvm"; + } list = qemu_find_opts("iscsi"); if (!list) { - return g_strdup("iqn.2008-11.org.linux-kvm"); + return g_strdup(default_name); } opts = qemu_opts_find(list, target); if (opts == NULL) { opts = QTAILQ_FIRST(&list->head); if (!opts) { - return g_strdup("iqn.2008-11.org.linux-kvm"); + return g_strdup(default_name); } } name = qemu_opt_get(opts, "initiator-name"); if (!name) { - return g_strdup("iqn.2008-11.org.linux-kvm"); + return g_strdup(default_name); } return g_strdup(name); diff --git a/qemu-doc.texi b/qemu-doc.texi index 84dad19..2360f7b 100644 --- a/qemu-doc.texi +++ b/qemu-doc.texi @@ -734,6 +734,11 @@ Various session related parameters can be set via special options, either in a configuration file provided via '-readconfig' or directly on the command line. +If the initiator-name is not specified qemu will use a default name +of 'iqn.2008-11.org.linux-kvm[:<name>'] where <name> is the name of the +virtual machine. + + @example Setting a specific initiator name to use when logging in to the target -iscsi initiator-name=iqn.qemu.test:my-initiator diff --git a/qemu-options.hx b/qemu-options.hx index dc68e15..3335bcc 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1893,6 +1893,11 @@ images for the guest storage. Both disk and cdrom images are supported. Syntax for specifying iSCSI LUNs is ``iscsi://<target-ip>[:<port>]/<target-iqn>/<lun>'' +By default qemu will use the iSCSI initiator-name +'iqn.2008-11.org.linux-kvm[:<name>]' but this can also be set from the command +line or a configuration file. + + Example (without authentication): @example qemu-system-i386 -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \ @@ -1922,6 +1927,9 @@ DEF("iscsi", HAS_ARG, QEMU_OPTION_iscsi, " iSCSI session parameters\n", QEMU_ARCH_ALL) STEXI +iSCSI parameters such as username and password can also be specified via +a configuration file. See qemu-doc for more information and examples. + @item NBD QEMU supports NBD (Network Block Devices) both using TCP protocol as well as Unix Domain Sockets. diff --git a/vl.c b/vl.c index 8904db1..3320b7a 100644 --- a/vl.c +++ b/vl.c @@ -169,6 +169,10 @@ int main(int argc, char **argv) #define MAX_VIRTIO_CONSOLES 1 +#ifdef CONFIG_LIBISCSI +extern const char *iscsi_name; +#endif + static const char *data_dir; const char *bios_name = NULL; enum vga_retrace_method vga_retrace_method = VGA_RETRACE_DUMB; @@ -3074,6 +3078,9 @@ int main(int argc, char **argv, char **envp) os_set_proc_name(p); } } +#ifdef CONFIG_LIBISCSI + iscsi_name = qemu_name; +#endif break; case QEMU_OPTION_prom_env: if (nb_prom_envs >= MAX_PROM_ENVS) {
This patch updates the iscsi layer to automatically pick a 'unique' initiator-name based on the name of the vm in case the user has not set an explicit iqn-name to use. Save the -name of the vm so that we can use it in the default iscsi name. Add a new variable that holds the name for the vm as specified by -name and assign this name to the iscsi_name pointer gtom block/iscsi.c This way we can thus create default names to use as the initiator name based on the guest session. If -name is not specified, iscsi will use a default initiator-name of iqn.2008-11.org.linux-kvm If -name is specified, then iscsi will use a default initiatorname of iqn.2008-11.org.linux-kvm:<name> Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com> --- block/iscsi.c | 16 +++++++++++++--- qemu-doc.texi | 5 +++++ qemu-options.hx | 8 ++++++++ vl.c | 7 +++++++ 4 files changed, 33 insertions(+), 3 deletions(-)