]> Git Repo - qemu.git/commitdiff
hmp: add hmp analogue for qmp-chardev-change
authorAnton Nefedov <[email protected]>
Thu, 6 Jul 2017 12:08:57 +0000 (15:08 +0300)
committerPaolo Bonzini <[email protected]>
Fri, 14 Jul 2017 09:04:34 +0000 (11:04 +0200)
Signed-off-by: Anton Nefedov <[email protected]>
Reviewed-by: Vladimir Sementsov-Ogievskiy <[email protected]>
Acked-by: Dr. David Alan Gilbert <[email protected]>
Message-Id: <1499342940[email protected]>
Reviewed-by: Marc-AndrĂ© Lureau <[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
chardev/char.c
hmp-commands.hx
hmp.c
hmp.h
include/chardev/char.h
tests/test-hmp.c

index d6b9d89e93cea1afb101974b15d02c2a5ae171a5..c34b44abc998b265214e0127e7636d2c75a52986 100644 (file)
@@ -567,7 +567,7 @@ static const char *chardev_alias_translate(const char *name)
     return name;
 }
 
-static ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
+ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)
 {
     Error *local_err = NULL;
     const ChardevClass *cc;
index 75f8bac01bee17f4fa40da841430ca18968a94d0..b3a8707dad67b73c365ce2d5a8e07d9d1a240388 100644 (file)
@@ -1726,7 +1726,23 @@ ETEXI
 STEXI
 @item chardev-add args
 @findex chardev-add
-chardev_add accepts the same parameters as the -chardev command line switch.
+chardev-add accepts the same parameters as the -chardev command line switch.
+
+ETEXI
+
+    {
+        .name       = "chardev-change",
+        .args_type  = "id:s,args:s",
+        .params     = "id args",
+        .help       = "change chardev",
+        .cmd        = hmp_chardev_change,
+    },
+
+STEXI
+@item chardev-change args
+@findex chardev-change
+chardev-change accepts existing chardev @var{id} and then the same arguments
+as the -chardev command line switch (except for "id").
 
 ETEXI
 
diff --git a/hmp.c b/hmp.c
index 6d32c40723559976bba271888b33077d9b54372f..d970ea9855b9885f20749ee3e2fb7df72c934d3c 100644 (file)
--- a/hmp.c
+++ b/hmp.c
@@ -2197,6 +2197,40 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdict)
     hmp_handle_error(mon, &err);
 }
 
+void hmp_chardev_change(Monitor *mon, const QDict *qdict)
+{
+    const char *args = qdict_get_str(qdict, "args");
+    const char *id;
+    Error *err = NULL;
+    ChardevBackend *backend = NULL;
+    ChardevReturn *ret = NULL;
+    QemuOpts *opts = qemu_opts_parse_noisily(qemu_find_opts("chardev"), args,
+                                             true);
+    if (!opts) {
+        error_setg(&err, "Parsing chardev args failed");
+        goto end;
+    }
+
+    id = qdict_get_str(qdict, "id");
+    if (qemu_opts_id(opts)) {
+        error_setg(&err, "Unexpected 'id' parameter");
+        goto end;
+    }
+
+    backend = qemu_chr_parse_opts(opts, &err);
+    if (!backend) {
+        goto end;
+    }
+
+    ret = qmp_chardev_change(id, backend, &err);
+
+end:
+    qapi_free_ChardevReturn(ret);
+    qapi_free_ChardevBackend(backend);
+    qemu_opts_del(opts);
+    hmp_handle_error(mon, &err);
+}
+
 void hmp_chardev_remove(Monitor *mon, const QDict *qdict)
 {
     Error *local_err = NULL;
diff --git a/hmp.h b/hmp.h
index 214b2617e76d031fdb23391dc231d24272de3036..1ff455295e02b8c632989432390dd12ab0795164 100644 (file)
--- a/hmp.h
+++ b/hmp.h
@@ -102,6 +102,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
 void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
 void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
 void hmp_chardev_add(Monitor *mon, const QDict *qdict);
+void hmp_chardev_change(Monitor *mon, const QDict *qdict);
 void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
 void hmp_chardev_send_break(Monitor *mon, const QDict *qdict);
 void hmp_qemu_io(Monitor *mon, const QDict *qdict);
index 22fd734999e6ce3da86e0cb324a7ab94beef4558..1604ea91436bb8da31d442d57e7090e89d10677e 100644 (file)
@@ -80,6 +80,16 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
  */
 void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend);
 
+/**
+ * @qemu_chr_parse_opts:
+ *
+ * Parse the options to the ChardevBackend struct.
+ *
+ * Returns: a new backend or NULL on error
+ */
+ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts,
+                                    Error **errp);
+
 /**
  * @qemu_chr_new:
  *
index 6dfa0c36e2986e93ecc436ef6dc5ffd64804ff74..d77b3c8710aff11cf8b711cbaa7c76410cd8f868 100644 (file)
@@ -23,6 +23,7 @@ static const char *hmp_cmds[] = {
     "boot_set ndc",
     "chardev-add null,id=testchardev1",
     "chardev-send-break testchardev2",
+    "chardev-change testchardev1 ringbuf",
     "chardev-remove testchardev1",
     "commit all",
     "cpu-add 1",
This page took 0.03292 seconds and 4 git commands to generate.