@@ -41,6 +41,44 @@
#include "qapi/qmp/qstring.h"
#include "qemu/cutils.h"
+#include "qapi/qmp/qbool.h"
+#include "qapi/qmp/qfloat.h"
+
+static void qdict_print(QDict *qdict)
+{
+ const QDictEntry *entry;
+ for (entry = qdict_first(qdict); entry; entry = qdict_next(qdict, entry)) {
+ printf("@@@ %s=", entry->key);
+ switch (qobject_type(entry->value)) {
+ default:
+ printf("crap\n");
+ break;
+ case QTYPE_QNULL:
+ printf("null\n");
+ break;
+ case QTYPE_QINT:
+ printf("%" PRId64 "\n", qint_get_int(qobject_to_qint(entry->value)));
+ break;
+ case QTYPE_QSTRING:
+ printf("%s\n", qstring_get_str(qobject_to_qstring(entry->value)));
+ break;
+ case QTYPE_QDICT:
+ printf("dict\n");
+ break;
+ case QTYPE_QLIST:
+ printf("list\n");
+ break;
+ case QTYPE_QFLOAT:
+ printf("%g\n", qfloat_get_double(qobject_to_qfloat(entry->value)));
+ break;
+ case QTYPE_QBOOL:
+ printf("%s\n", qbool_get_bool(qobject_to_qbool(entry->value)) ? "true" : "false");
+ break;
+ }
+ }
+
+}
+
#define EN_OPTSTR ":exportname="
typedef struct BDRVNBDState {
@@ -405,6 +443,8 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags,
const char *hostname = NULL;
int ret = -EINVAL;
+ qdict_print(options);
+
opts = qemu_opts_create(&nbd_runtime_opts, NULL, 0, &error_abort);
qemu_opts_absorb_qdict(opts, options, &local_err);
if (local_err) {
@@ -449,6 +489,23 @@ static int nbd_open(BlockDriverState *bs, QDict *options, int flags,
goto error;
}
+ printf("### type=%u\n", s->saddr->type);
+ switch (s->saddr->type) {
+ case SOCKET_ADDRESS_KIND_INET:
+ printf(" host=%s\n port=%s\n",
+ s->saddr->u.inet.host,
+ s->saddr->u.inet.port);
+ break;
+ case SOCKET_ADDRESS_KIND_UNIX:
+ printf(" path=%s\n",
+ s->saddr->u.q_unix.path);
+ break;
+ default:
+ ;
+ }
+ printf(" export=%s\n tls-creds=%s\n",
+ s->export, s->tlscredsid);
+
/* NBD handshake */
ret = nbd_client_init(bs, sioc, s->export,
tlscreds, hostname, errp);
@@ -26,6 +26,47 @@
#include "qemu/bitops.h"
#include "qemu/cutils.h"
+#include "qapi/qmp/qbool.h"
+#include "qapi/qmp/qint.h"
+#include "qapi/qmp/qfloat.h"
+#include "qapi/qmp/qstring.h"
+
+static void qdict_print(QDict *qdict)
+{
+ const QDictEntry *entry;
+ for (entry = qdict_first(qdict); entry; entry = qdict_next(qdict, entry)) {
+ printf("@@@ %s=", entry->key);
+ switch (qobject_type(entry->value)) {
+ default:
+ printf("crap\n");
+ break;
+ case QTYPE_QNULL:
+ printf("null\n");
+ break;
+ case QTYPE_QINT:
+ printf("%" PRId64 "\n", qint_get_int(qobject_to_qint(entry->value)));
+ break;
+ case QTYPE_QSTRING:
+ printf("%s\n", qstring_get_str(qobject_to_qstring(entry->value)));
+ break;
+ case QTYPE_QDICT:
+ printf("dict\n");
+ break;
+ case QTYPE_QLIST:
+ printf("list\n");
+ break;
+ case QTYPE_QFLOAT:
+ printf("%g\n", qfloat_get_double(qobject_to_qfloat(entry->value)));
+ break;
+ case QTYPE_QBOOL:
+ printf("%s\n", qbool_get_bool(qobject_to_qbool(entry->value)) ? "true" : "false");
+ break;
+ }
+ }
+
+}
+
+
#define SD_PROTO_VER 0x01
#define SD_DEFAULT_ADDR "localhost"
@@ -1582,6 +1623,8 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
QemuOpts *opts;
Error *local_err = NULL;
+ qdict_print(options);
+
s->bs = bs;
s->aio_context = bdrv_get_aio_context(bs);
@@ -1634,6 +1677,13 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
goto err_no_fd;
}
+ {
+ char *addr = socket_address_to_string(s->addr, &error_abort);
+ printf("### vdi=%s addr=%s snap-id=%s tag=%s\n",
+ vdi, addr, snap_id_str, tag);
+ g_free(addr);
+ }
+
QLIST_INIT(&s->inflight_aio_head);
QLIST_INIT(&s->failed_aio_head);
QLIST_INIT(&s->inflight_aiocb_head);