Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808797/?format=api
{ "id": 808797, "url": "http://patchwork.ozlabs.org/api/patches/808797/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-22-armbru@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170901153758.8628-22-armbru@redhat.com>", "list_archive_url": null, "date": "2017-09-01T15:37:32", "name": "[PULL,v2,21/47] qapi-schema: Collect char device stuff in qapi/char.json", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "9b29ff10d06715c1fdaea46f836cec795558963b", "submitter": { "id": 2645, "url": "http://patchwork.ozlabs.org/api/people/2645/?format=api", "name": "Markus Armbruster", "email": "armbru@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20170901153758.8628-22-armbru@redhat.com/mbox/", "series": [ { "id": 1049, "url": "http://patchwork.ozlabs.org/api/series/1049/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=1049", "date": "2017-09-01T15:37:14", "name": "[PULL,v2,01/47] qapi: Fix error handling code on alternate conflict", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/1049/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808797/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808797/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=208.118.235.17; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)", "ext-mx06.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com", "ext-mx06.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=armbru@redhat.com" ], "Received": [ "from lists.gnu.org (lists.gnu.org [208.118.235.17])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xkPb15zm4z9t1t\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat, 2 Sep 2017 02:19:41 +1000 (AEST)", "from localhost ([::1]:47233 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnofT-0005cJ-Lj\n\tfor incoming@patchwork.ozlabs.org; Fri, 01 Sep 2017 12:19:39 -0400", "from eggs.gnu.org ([2001:4830:134:3::10]:51779)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1W-0006nK-EO\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:28 -0400", "from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <armbru@redhat.com>) id 1dno1P-0001mv-1e\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:22 -0400", "from mx1.redhat.com ([209.132.183.28]:56688)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <armbru@redhat.com>) id 1dno1O-0001lr-HU\n\tfor qemu-devel@nongnu.org; Fri, 01 Sep 2017 11:38:14 -0400", "from smtp.corp.redhat.com\n\t(int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id 9BF851E31B\n\tfor <qemu-devel@nongnu.org>; Fri, 1 Sep 2017 15:38:13 +0000 (UTC)", "from blackfin.pond.sub.org (ovpn-116-75.ams2.redhat.com\n\t[10.36.116.75])\n\tby smtp.corp.redhat.com (Postfix) with ESMTPS id 09D6E7837B;\n\tFri, 1 Sep 2017 15:38:09 +0000 (UTC)", "by blackfin.pond.sub.org (Postfix, from userid 1000)\n\tid 8011F1138559; Fri, 1 Sep 2017 17:37:58 +0200 (CEST)" ], "DMARC-Filter": "OpenDMARC Filter v1.3.2 mx1.redhat.com 9BF851E31B", "From": "Markus Armbruster <armbru@redhat.com>", "To": "qemu-devel@nongnu.org", "Date": "Fri, 1 Sep 2017 17:37:32 +0200", "Message-Id": "<20170901153758.8628-22-armbru@redhat.com>", "In-Reply-To": "<20170901153758.8628-1-armbru@redhat.com>", "References": "<20170901153758.8628-1-armbru@redhat.com>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "X-Scanned-By": "MIMEDefang 2.79 on 10.5.11.13", "X-Greylist": "Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.30]);\n\tFri, 01 Sep 2017 15:38:13 +0000 (UTC)", "Content-Transfer-Encoding": "quoted-printable", "X-detected-operating-system": "by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]", "X-Received-From": "209.132.183.28", "Subject": "[Qemu-devel] [PULL v2 21/47] qapi-schema: Collect char device stuff\n\tin qapi/char.json", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.21", "Precedence": "list", "List-Id": "<qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<http://lists.nongnu.org/archive/html/qemu-devel/>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Cc": "Paolo Bonzini <pbonzini@redhat.com>, =?utf-8?q?Marc-Andr=C3=A9_Lureau?=\n\t<marcandre.lureau@redhat.com>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>" }, "content": "Cc: Paolo Bonzini <pbonzini@redhat.com>\nCc: Marc-André Lureau <marcandre.lureau@redhat.com>\nSigned-off-by: Markus Armbruster <armbru@redhat.com>\nMessage-Id: <1503602048-12268-7-git-send-email-armbru@redhat.com>\nReviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n---\n MAINTAINERS | 1 +\n Makefile | 1 +\n qapi-schema.json | 511 +---------------------------------------------------\n qapi/char.json | 538 +++++++++++++++++++++++++++++++++++++++++++++++++++++++\n qapi/event.json | 21 ---\n 5 files changed, 541 insertions(+), 531 deletions(-)\n create mode 100644 qapi/char.json", "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 289ea8c575..6a808d33ba 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -1253,6 +1253,7 @@ M: Marc-André Lureau <marcandre.lureau@redhat.com>\n S: Maintained\n F: chardev/\n F: include/chardev/\n+F: qapi/char.json\n \n Character Devices (Braille)\n M: Samuel Thibault <samuel.thibault@ens-lyon.org>\ndiff --git a/Makefile b/Makefile\nindex d3ba41afb8..59ef46cc3e 100644\n--- a/Makefile\n+++ b/Makefile\n@@ -410,6 +410,7 @@ $(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py)\n \n qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \\\n $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \\\n+ $(SRC_PATH)/qapi/char.json \\\n $(SRC_PATH)/qapi/crypto.json \\\n $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \\\n $(SRC_PATH)/qapi/rocker.json \\\ndiff --git a/qapi-schema.json b/qapi-schema.json\nindex f42d61b664..4f30d21340 100644\n--- a/qapi-schema.json\n+++ b/qapi-schema.json\n@@ -83,6 +83,7 @@\n { 'include': 'qapi/run-state.json' }\n { 'include': 'qapi/crypto.json' }\n { 'include': 'qapi/block.json' }\n+{ 'include': 'qapi/char.json' }\n { 'include': 'qapi/rocker.json' }\n { 'include': 'qapi/event.json' }\n { 'include': 'qapi/trace.json' }\n@@ -274,189 +275,6 @@\n { 'command': 'query-uuid', 'returns': 'UuidInfo' }\n \n ##\n-# @ChardevInfo:\n-#\n-# Information about a character device.\n-#\n-# @label: the label of the character device\n-#\n-# @filename: the filename of the character device\n-#\n-# @frontend-open: shows whether the frontend device attached to this backend\n-# (eg. with the chardev=... option) is in open or closed state\n-# (since 2.1)\n-#\n-# Notes: @filename is encoded using the QEMU command line character device\n-# encoding. See the QEMU man page for details.\n-#\n-# Since: 0.14.0\n-##\n-{ 'struct': 'ChardevInfo', 'data': {'label': 'str',\n- 'filename': 'str',\n- 'frontend-open': 'bool'} }\n-\n-##\n-# @query-chardev:\n-#\n-# Returns information about current character devices.\n-#\n-# Returns: a list of @ChardevInfo\n-#\n-# Since: 0.14.0\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"query-chardev\" }\n-# <- {\n-# \"return\": [\n-# {\n-# \"label\": \"charchannel0\",\n-# \"filename\": \"unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server\",\n-# \"frontend-open\": false\n-# },\n-# {\n-# \"label\": \"charmonitor\",\n-# \"filename\": \"unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server\",\n-# \"frontend-open\": true\n-# },\n-# {\n-# \"label\": \"charserial0\",\n-# \"filename\": \"pty:/dev/pts/2\",\n-# \"frontend-open\": true\n-# }\n-# ]\n-# }\n-#\n-##\n-{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }\n-\n-##\n-# @ChardevBackendInfo:\n-#\n-# Information about a character device backend\n-#\n-# @name: The backend name\n-#\n-# Since: 2.0\n-##\n-{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }\n-\n-##\n-# @query-chardev-backends:\n-#\n-# Returns information about character device backends.\n-#\n-# Returns: a list of @ChardevBackendInfo\n-#\n-# Since: 2.0\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"query-chardev-backends\" }\n-# <- {\n-# \"return\":[\n-# {\n-# \"name\":\"udp\"\n-# },\n-# {\n-# \"name\":\"tcp\"\n-# },\n-# {\n-# \"name\":\"unix\"\n-# },\n-# {\n-# \"name\":\"spiceport\"\n-# }\n-# ]\n-# }\n-#\n-##\n-{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }\n-\n-##\n-# @DataFormat:\n-#\n-# An enumeration of data format.\n-#\n-# @utf8: Data is a UTF-8 string (RFC 3629)\n-#\n-# @base64: Data is Base64 encoded binary (RFC 3548)\n-#\n-# Since: 1.4\n-##\n-{ 'enum': 'DataFormat',\n- 'data': [ 'utf8', 'base64' ] }\n-\n-##\n-# @ringbuf-write:\n-#\n-# Write to a ring buffer character device.\n-#\n-# @device: the ring buffer character device name\n-#\n-# @data: data to write\n-#\n-# @format: data encoding (default 'utf8').\n-# - base64: data must be base64 encoded text. Its binary\n-# decoding gets written.\n-# - utf8: data's UTF-8 encoding is written\n-# - data itself is always Unicode regardless of format, like\n-# any other string.\n-#\n-# Returns: Nothing on success\n-#\n-# Since: 1.4\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"ringbuf-write\",\n-# \"arguments\": { \"device\": \"foo\",\n-# \"data\": \"abcdefgh\",\n-# \"format\": \"utf8\" } }\n-# <- { \"return\": {} }\n-#\n-##\n-{ 'command': 'ringbuf-write',\n- 'data': {'device': 'str', 'data': 'str',\n- '*format': 'DataFormat'} }\n-\n-##\n-# @ringbuf-read:\n-#\n-# Read from a ring buffer character device.\n-#\n-# @device: the ring buffer character device name\n-#\n-# @size: how many bytes to read at most\n-#\n-# @format: data encoding (default 'utf8').\n-# - base64: the data read is returned in base64 encoding.\n-# - utf8: the data read is interpreted as UTF-8.\n-# Bug: can screw up when the buffer contains invalid UTF-8\n-# sequences, NUL characters, after the ring buffer lost\n-# data, and when reading stops because the size limit is\n-# reached.\n-# - The return value is always Unicode regardless of format,\n-# like any other string.\n-#\n-# Returns: data read from the device\n-#\n-# Since: 1.4\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"ringbuf-read\",\n-# \"arguments\": { \"device\": \"foo\",\n-# \"size\": 1000,\n-# \"format\": \"utf8\" } }\n-# <- { \"return\": \"abcdefgh\" }\n-#\n-##\n-{ 'command': 'ringbuf-read',\n- 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},\n- 'returns': 'str' }\n-\n-##\n # @EventInfo:\n #\n # Information about a QMP event\n@@ -4713,333 +4531,6 @@\n \n \n ##\n-# @ChardevCommon:\n-#\n-# Configuration shared across all chardev backends\n-#\n-# @logfile: The name of a logfile to save output\n-# @logappend: true to append instead of truncate\n-# (default to false to truncate)\n-#\n-# Since: 2.6\n-##\n-{ 'struct': 'ChardevCommon', 'data': { '*logfile': 'str',\n- '*logappend': 'bool' } }\n-\n-##\n-# @ChardevFile:\n-#\n-# Configuration info for file chardevs.\n-#\n-# @in: The name of the input file\n-# @out: The name of the output file\n-# @append: Open the file in append mode (default false to\n-# truncate) (Since 2.6)\n-#\n-# Since: 1.4\n-##\n-{ 'struct': 'ChardevFile', 'data': { '*in' : 'str',\n- 'out' : 'str',\n- '*append': 'bool' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevHostdev:\n-#\n-# Configuration info for device and pipe chardevs.\n-#\n-# @device: The name of the special file for the device,\n-# i.e. /dev/ttyS0 on Unix or COM1: on Windows\n-#\n-# Since: 1.4\n-##\n-{ 'struct': 'ChardevHostdev', 'data': { 'device' : 'str' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevSocket:\n-#\n-# Configuration info for (stream) socket chardevs.\n-#\n-# @addr: socket address to listen on (server=true)\n-# or connect to (server=false)\n-# @tls-creds: the ID of the TLS credentials object (since 2.6)\n-# @server: create server socket (default: true)\n-# @wait: wait for incoming connection on server\n-# sockets (default: false).\n-# @nodelay: set TCP_NODELAY socket option (default: false)\n-# @telnet: enable telnet protocol on server\n-# sockets (default: false)\n-# @tn3270: enable tn3270 protocol on server\n-# sockets (default: false) (Since: 2.10)\n-# @reconnect: For a client socket, if a socket is disconnected,\n-# then attempt a reconnect after the given number of seconds.\n-# Setting this to zero disables this function. (default: 0)\n-# (Since: 2.2)\n-#\n-# Since: 1.4\n-##\n-{ 'struct': 'ChardevSocket', 'data': { 'addr' : 'SocketAddressLegacy',\n- '*tls-creds' : 'str',\n- '*server' : 'bool',\n- '*wait' : 'bool',\n- '*nodelay' : 'bool',\n- '*telnet' : 'bool',\n- '*tn3270' : 'bool',\n- '*reconnect' : 'int' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevUdp:\n-#\n-# Configuration info for datagram socket chardevs.\n-#\n-# @remote: remote address\n-# @local: local address\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevUdp', 'data': { 'remote' : 'SocketAddressLegacy',\n- '*local' : 'SocketAddressLegacy' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevMux:\n-#\n-# Configuration info for mux chardevs.\n-#\n-# @chardev: name of the base chardev.\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevMux', 'data': { 'chardev' : 'str' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevStdio:\n-#\n-# Configuration info for stdio chardevs.\n-#\n-# @signal: Allow signals (such as SIGINT triggered by ^C)\n-# be delivered to qemu. Default: true in -nographic mode,\n-# false otherwise.\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevStdio', 'data': { '*signal' : 'bool' },\n- 'base': 'ChardevCommon' }\n-\n-\n-##\n-# @ChardevSpiceChannel:\n-#\n-# Configuration info for spice vm channel chardevs.\n-#\n-# @type: kind of channel (for example vdagent).\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevSpiceChannel', 'data': { 'type' : 'str' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevSpicePort:\n-#\n-# Configuration info for spice port chardevs.\n-#\n-# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn' : 'str' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevVC:\n-#\n-# Configuration info for virtual console chardevs.\n-#\n-# @width: console width, in pixels\n-# @height: console height, in pixels\n-# @cols: console width, in chars\n-# @rows: console height, in chars\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevVC', 'data': { '*width' : 'int',\n- '*height' : 'int',\n- '*cols' : 'int',\n- '*rows' : 'int' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevRingbuf:\n-#\n-# Configuration info for ring buffer chardevs.\n-#\n-# @size: ring buffer size, must be power of two, default is 65536\n-#\n-# Since: 1.5\n-##\n-{ 'struct': 'ChardevRingbuf', 'data': { '*size' : 'int' },\n- 'base': 'ChardevCommon' }\n-\n-##\n-# @ChardevBackend:\n-#\n-# Configuration info for the new chardev backend.\n-#\n-# Since: 1.4 (testdev since 2.2, wctablet since 2.9)\n-##\n-{ 'union': 'ChardevBackend', 'data': { 'file' : 'ChardevFile',\n- 'serial' : 'ChardevHostdev',\n- 'parallel': 'ChardevHostdev',\n- 'pipe' : 'ChardevHostdev',\n- 'socket' : 'ChardevSocket',\n- 'udp' : 'ChardevUdp',\n- 'pty' : 'ChardevCommon',\n- 'null' : 'ChardevCommon',\n- 'mux' : 'ChardevMux',\n- 'msmouse': 'ChardevCommon',\n- 'wctablet' : 'ChardevCommon',\n- 'braille': 'ChardevCommon',\n- 'testdev': 'ChardevCommon',\n- 'stdio' : 'ChardevStdio',\n- 'console': 'ChardevCommon',\n- 'spicevmc' : 'ChardevSpiceChannel',\n- 'spiceport' : 'ChardevSpicePort',\n- 'vc' : 'ChardevVC',\n- 'ringbuf': 'ChardevRingbuf',\n- # next one is just for compatibility\n- 'memory' : 'ChardevRingbuf' } }\n-\n-##\n-# @ChardevReturn:\n-#\n-# Return info about the chardev backend just created.\n-#\n-# @pty: name of the slave pseudoterminal device, present if\n-# and only if a chardev of type 'pty' was created\n-#\n-# Since: 1.4\n-##\n-{ 'struct' : 'ChardevReturn', 'data': { '*pty' : 'str' } }\n-\n-##\n-# @chardev-add:\n-#\n-# Add a character device backend\n-#\n-# @id: the chardev's ID, must be unique\n-# @backend: backend type and parameters\n-#\n-# Returns: ChardevReturn.\n-#\n-# Since: 1.4\n-#\n-# Example:\n-#\n-# -> { \"execute\" : \"chardev-add\",\n-# \"arguments\" : { \"id\" : \"foo\",\n-# \"backend\" : { \"type\" : \"null\", \"data\" : {} } } }\n-# <- { \"return\": {} }\n-#\n-# -> { \"execute\" : \"chardev-add\",\n-# \"arguments\" : { \"id\" : \"bar\",\n-# \"backend\" : { \"type\" : \"file\",\n-# \"data\" : { \"out\" : \"/tmp/bar.log\" } } } }\n-# <- { \"return\": {} }\n-#\n-# -> { \"execute\" : \"chardev-add\",\n-# \"arguments\" : { \"id\" : \"baz\",\n-# \"backend\" : { \"type\" : \"pty\", \"data\" : {} } } }\n-# <- { \"return\": { \"pty\" : \"/dev/pty/42\" } }\n-#\n-##\n-{ 'command': 'chardev-add', 'data': {'id' : 'str',\n- 'backend' : 'ChardevBackend' },\n- 'returns': 'ChardevReturn' }\n-\n-##\n-# @chardev-change:\n-#\n-# Change a character device backend\n-#\n-# @id: the chardev's ID, must exist\n-# @backend: new backend type and parameters\n-#\n-# Returns: ChardevReturn.\n-#\n-# Since: 2.10\n-#\n-# Example:\n-#\n-# -> { \"execute\" : \"chardev-change\",\n-# \"arguments\" : { \"id\" : \"baz\",\n-# \"backend\" : { \"type\" : \"pty\", \"data\" : {} } } }\n-# <- { \"return\": { \"pty\" : \"/dev/pty/42\" } }\n-#\n-# -> {\"execute\" : \"chardev-change\",\n-# \"arguments\" : {\n-# \"id\" : \"charchannel2\",\n-# \"backend\" : {\n-# \"type\" : \"socket\",\n-# \"data\" : {\n-# \"addr\" : {\n-# \"type\" : \"unix\" ,\n-# \"data\" : {\n-# \"path\" : \"/tmp/charchannel2.socket\"\n-# }\n-# },\n-# \"server\" : true,\n-# \"wait\" : false }}}}\n-# <- {\"return\": {}}\n-#\n-##\n-{ 'command': 'chardev-change', 'data': {'id' : 'str',\n- 'backend' : 'ChardevBackend' },\n- 'returns': 'ChardevReturn' }\n-\n-##\n-# @chardev-remove:\n-#\n-# Remove a character device backend\n-#\n-# @id: the chardev's ID, must exist and not be in use\n-#\n-# Returns: Nothing on success\n-#\n-# Since: 1.4\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"chardev-remove\", \"arguments\": { \"id\" : \"foo\" } }\n-# <- { \"return\": {} }\n-#\n-##\n-{ 'command': 'chardev-remove', 'data': {'id': 'str'} }\n-\n-##\n-# @chardev-send-break:\n-#\n-# Send a break to a character device\n-#\n-# @id: the chardev's ID, must exist\n-#\n-# Returns: Nothing on success\n-#\n-# Since: 2.10\n-#\n-# Example:\n-#\n-# -> { \"execute\": \"chardev-send-break\", \"arguments\": { \"id\" : \"foo\" } }\n-# <- { \"return\": {} }\n-#\n-##\n-{ 'command': 'chardev-send-break', 'data': {'id': 'str'} }\n-\n-\n-##\n # @TpmModel:\n #\n # An enumeration of TPM models\ndiff --git a/qapi/char.json b/qapi/char.json\nnew file mode 100644\nindex 0000000000..ae19dcd1ed\n--- /dev/null\n+++ b/qapi/char.json\n@@ -0,0 +1,538 @@\n+# -*- Mode: Python -*-\n+#\n+\n+##\n+# = Character devices\n+##\n+\n+{ 'include': 'sockets.json' }\n+\n+##\n+# @ChardevInfo:\n+#\n+# Information about a character device.\n+#\n+# @label: the label of the character device\n+#\n+# @filename: the filename of the character device\n+#\n+# @frontend-open: shows whether the frontend device attached to this backend\n+# (eg. with the chardev=... option) is in open or closed state\n+# (since 2.1)\n+#\n+# Notes: @filename is encoded using the QEMU command line character device\n+# encoding. See the QEMU man page for details.\n+#\n+# Since: 0.14.0\n+##\n+{ 'struct': 'ChardevInfo', 'data': {'label': 'str',\n+ 'filename': 'str',\n+ 'frontend-open': 'bool'} }\n+\n+##\n+# @query-chardev:\n+#\n+# Returns information about current character devices.\n+#\n+# Returns: a list of @ChardevInfo\n+#\n+# Since: 0.14.0\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"query-chardev\" }\n+# <- {\n+# \"return\": [\n+# {\n+# \"label\": \"charchannel0\",\n+# \"filename\": \"unix:/var/lib/libvirt/qemu/seabios.rhel6.agent,server\",\n+# \"frontend-open\": false\n+# },\n+# {\n+# \"label\": \"charmonitor\",\n+# \"filename\": \"unix:/var/lib/libvirt/qemu/seabios.rhel6.monitor,server\",\n+# \"frontend-open\": true\n+# },\n+# {\n+# \"label\": \"charserial0\",\n+# \"filename\": \"pty:/dev/pts/2\",\n+# \"frontend-open\": true\n+# }\n+# ]\n+# }\n+#\n+##\n+{ 'command': 'query-chardev', 'returns': ['ChardevInfo'] }\n+\n+##\n+# @ChardevBackendInfo:\n+#\n+# Information about a character device backend\n+#\n+# @name: The backend name\n+#\n+# Since: 2.0\n+##\n+{ 'struct': 'ChardevBackendInfo', 'data': {'name': 'str'} }\n+\n+##\n+# @query-chardev-backends:\n+#\n+# Returns information about character device backends.\n+#\n+# Returns: a list of @ChardevBackendInfo\n+#\n+# Since: 2.0\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"query-chardev-backends\" }\n+# <- {\n+# \"return\":[\n+# {\n+# \"name\":\"udp\"\n+# },\n+# {\n+# \"name\":\"tcp\"\n+# },\n+# {\n+# \"name\":\"unix\"\n+# },\n+# {\n+# \"name\":\"spiceport\"\n+# }\n+# ]\n+# }\n+#\n+##\n+{ 'command': 'query-chardev-backends', 'returns': ['ChardevBackendInfo'] }\n+\n+##\n+# @DataFormat:\n+#\n+# An enumeration of data format.\n+#\n+# @utf8: Data is a UTF-8 string (RFC 3629)\n+#\n+# @base64: Data is Base64 encoded binary (RFC 3548)\n+#\n+# Since: 1.4\n+##\n+{ 'enum': 'DataFormat',\n+ 'data': [ 'utf8', 'base64' ] }\n+\n+##\n+# @ringbuf-write:\n+#\n+# Write to a ring buffer character device.\n+#\n+# @device: the ring buffer character device name\n+#\n+# @data: data to write\n+#\n+# @format: data encoding (default 'utf8').\n+# - base64: data must be base64 encoded text. Its binary\n+# decoding gets written.\n+# - utf8: data's UTF-8 encoding is written\n+# - data itself is always Unicode regardless of format, like\n+# any other string.\n+#\n+# Returns: Nothing on success\n+#\n+# Since: 1.4\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"ringbuf-write\",\n+# \"arguments\": { \"device\": \"foo\",\n+# \"data\": \"abcdefgh\",\n+# \"format\": \"utf8\" } }\n+# <- { \"return\": {} }\n+#\n+##\n+{ 'command': 'ringbuf-write',\n+ 'data': {'device': 'str', 'data': 'str',\n+ '*format': 'DataFormat'} }\n+\n+##\n+# @ringbuf-read:\n+#\n+# Read from a ring buffer character device.\n+#\n+# @device: the ring buffer character device name\n+#\n+# @size: how many bytes to read at most\n+#\n+# @format: data encoding (default 'utf8').\n+# - base64: the data read is returned in base64 encoding.\n+# - utf8: the data read is interpreted as UTF-8.\n+# Bug: can screw up when the buffer contains invalid UTF-8\n+# sequences, NUL characters, after the ring buffer lost\n+# data, and when reading stops because the size limit is\n+# reached.\n+# - The return value is always Unicode regardless of format,\n+# like any other string.\n+#\n+# Returns: data read from the device\n+#\n+# Since: 1.4\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"ringbuf-read\",\n+# \"arguments\": { \"device\": \"foo\",\n+# \"size\": 1000,\n+# \"format\": \"utf8\" } }\n+# <- { \"return\": \"abcdefgh\" }\n+#\n+##\n+{ 'command': 'ringbuf-read',\n+ 'data': {'device': 'str', 'size': 'int', '*format': 'DataFormat'},\n+ 'returns': 'str' }\n+\n+##\n+# @ChardevCommon:\n+#\n+# Configuration shared across all chardev backends\n+#\n+# @logfile: The name of a logfile to save output\n+# @logappend: true to append instead of truncate\n+# (default to false to truncate)\n+#\n+# Since: 2.6\n+##\n+{ 'struct': 'ChardevCommon', 'data': { '*logfile': 'str',\n+ '*logappend': 'bool' } }\n+\n+##\n+# @ChardevFile:\n+#\n+# Configuration info for file chardevs.\n+#\n+# @in: The name of the input file\n+# @out: The name of the output file\n+# @append: Open the file in append mode (default false to\n+# truncate) (Since 2.6)\n+#\n+# Since: 1.4\n+##\n+{ 'struct': 'ChardevFile', 'data': { '*in' : 'str',\n+ 'out' : 'str',\n+ '*append': 'bool' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevHostdev:\n+#\n+# Configuration info for device and pipe chardevs.\n+#\n+# @device: The name of the special file for the device,\n+# i.e. /dev/ttyS0 on Unix or COM1: on Windows\n+#\n+# Since: 1.4\n+##\n+{ 'struct': 'ChardevHostdev', 'data': { 'device' : 'str' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevSocket:\n+#\n+# Configuration info for (stream) socket chardevs.\n+#\n+# @addr: socket address to listen on (server=true)\n+# or connect to (server=false)\n+# @tls-creds: the ID of the TLS credentials object (since 2.6)\n+# @server: create server socket (default: true)\n+# @wait: wait for incoming connection on server\n+# sockets (default: false).\n+# @nodelay: set TCP_NODELAY socket option (default: false)\n+# @telnet: enable telnet protocol on server\n+# sockets (default: false)\n+# @tn3270: enable tn3270 protocol on server\n+# sockets (default: false) (Since: 2.10)\n+# @reconnect: For a client socket, if a socket is disconnected,\n+# then attempt a reconnect after the given number of seconds.\n+# Setting this to zero disables this function. (default: 0)\n+# (Since: 2.2)\n+#\n+# Since: 1.4\n+##\n+{ 'struct': 'ChardevSocket', 'data': { 'addr' : 'SocketAddressLegacy',\n+ '*tls-creds' : 'str',\n+ '*server' : 'bool',\n+ '*wait' : 'bool',\n+ '*nodelay' : 'bool',\n+ '*telnet' : 'bool',\n+ '*tn3270' : 'bool',\n+ '*reconnect' : 'int' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevUdp:\n+#\n+# Configuration info for datagram socket chardevs.\n+#\n+# @remote: remote address\n+# @local: local address\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevUdp', 'data': { 'remote' : 'SocketAddressLegacy',\n+ '*local' : 'SocketAddressLegacy' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevMux:\n+#\n+# Configuration info for mux chardevs.\n+#\n+# @chardev: name of the base chardev.\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevMux', 'data': { 'chardev' : 'str' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevStdio:\n+#\n+# Configuration info for stdio chardevs.\n+#\n+# @signal: Allow signals (such as SIGINT triggered by ^C)\n+# be delivered to qemu. Default: true in -nographic mode,\n+# false otherwise.\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevStdio', 'data': { '*signal' : 'bool' },\n+ 'base': 'ChardevCommon' }\n+\n+\n+##\n+# @ChardevSpiceChannel:\n+#\n+# Configuration info for spice vm channel chardevs.\n+#\n+# @type: kind of channel (for example vdagent).\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevSpiceChannel', 'data': { 'type' : 'str' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevSpicePort:\n+#\n+# Configuration info for spice port chardevs.\n+#\n+# @fqdn: name of the channel (see docs/spice-port-fqdn.txt)\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevSpicePort', 'data': { 'fqdn' : 'str' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevVC:\n+#\n+# Configuration info for virtual console chardevs.\n+#\n+# @width: console width, in pixels\n+# @height: console height, in pixels\n+# @cols: console width, in chars\n+# @rows: console height, in chars\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevVC', 'data': { '*width' : 'int',\n+ '*height' : 'int',\n+ '*cols' : 'int',\n+ '*rows' : 'int' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevRingbuf:\n+#\n+# Configuration info for ring buffer chardevs.\n+#\n+# @size: ring buffer size, must be power of two, default is 65536\n+#\n+# Since: 1.5\n+##\n+{ 'struct': 'ChardevRingbuf', 'data': { '*size' : 'int' },\n+ 'base': 'ChardevCommon' }\n+\n+##\n+# @ChardevBackend:\n+#\n+# Configuration info for the new chardev backend.\n+#\n+# Since: 1.4 (testdev since 2.2, wctablet since 2.9)\n+##\n+{ 'union': 'ChardevBackend', 'data': { 'file' : 'ChardevFile',\n+ 'serial' : 'ChardevHostdev',\n+ 'parallel': 'ChardevHostdev',\n+ 'pipe' : 'ChardevHostdev',\n+ 'socket' : 'ChardevSocket',\n+ 'udp' : 'ChardevUdp',\n+ 'pty' : 'ChardevCommon',\n+ 'null' : 'ChardevCommon',\n+ 'mux' : 'ChardevMux',\n+ 'msmouse': 'ChardevCommon',\n+ 'wctablet' : 'ChardevCommon',\n+ 'braille': 'ChardevCommon',\n+ 'testdev': 'ChardevCommon',\n+ 'stdio' : 'ChardevStdio',\n+ 'console': 'ChardevCommon',\n+ 'spicevmc' : 'ChardevSpiceChannel',\n+ 'spiceport' : 'ChardevSpicePort',\n+ 'vc' : 'ChardevVC',\n+ 'ringbuf': 'ChardevRingbuf',\n+ # next one is just for compatibility\n+ 'memory' : 'ChardevRingbuf' } }\n+\n+##\n+# @ChardevReturn:\n+#\n+# Return info about the chardev backend just created.\n+#\n+# @pty: name of the slave pseudoterminal device, present if\n+# and only if a chardev of type 'pty' was created\n+#\n+# Since: 1.4\n+##\n+{ 'struct' : 'ChardevReturn', 'data': { '*pty' : 'str' } }\n+\n+##\n+# @chardev-add:\n+#\n+# Add a character device backend\n+#\n+# @id: the chardev's ID, must be unique\n+# @backend: backend type and parameters\n+#\n+# Returns: ChardevReturn.\n+#\n+# Since: 1.4\n+#\n+# Example:\n+#\n+# -> { \"execute\" : \"chardev-add\",\n+# \"arguments\" : { \"id\" : \"foo\",\n+# \"backend\" : { \"type\" : \"null\", \"data\" : {} } } }\n+# <- { \"return\": {} }\n+#\n+# -> { \"execute\" : \"chardev-add\",\n+# \"arguments\" : { \"id\" : \"bar\",\n+# \"backend\" : { \"type\" : \"file\",\n+# \"data\" : { \"out\" : \"/tmp/bar.log\" } } } }\n+# <- { \"return\": {} }\n+#\n+# -> { \"execute\" : \"chardev-add\",\n+# \"arguments\" : { \"id\" : \"baz\",\n+# \"backend\" : { \"type\" : \"pty\", \"data\" : {} } } }\n+# <- { \"return\": { \"pty\" : \"/dev/pty/42\" } }\n+#\n+##\n+{ 'command': 'chardev-add', 'data': {'id' : 'str',\n+ 'backend' : 'ChardevBackend' },\n+ 'returns': 'ChardevReturn' }\n+\n+##\n+# @chardev-change:\n+#\n+# Change a character device backend\n+#\n+# @id: the chardev's ID, must exist\n+# @backend: new backend type and parameters\n+#\n+# Returns: ChardevReturn.\n+#\n+# Since: 2.10\n+#\n+# Example:\n+#\n+# -> { \"execute\" : \"chardev-change\",\n+# \"arguments\" : { \"id\" : \"baz\",\n+# \"backend\" : { \"type\" : \"pty\", \"data\" : {} } } }\n+# <- { \"return\": { \"pty\" : \"/dev/pty/42\" } }\n+#\n+# -> {\"execute\" : \"chardev-change\",\n+# \"arguments\" : {\n+# \"id\" : \"charchannel2\",\n+# \"backend\" : {\n+# \"type\" : \"socket\",\n+# \"data\" : {\n+# \"addr\" : {\n+# \"type\" : \"unix\" ,\n+# \"data\" : {\n+# \"path\" : \"/tmp/charchannel2.socket\"\n+# }\n+# },\n+# \"server\" : true,\n+# \"wait\" : false }}}}\n+# <- {\"return\": {}}\n+#\n+##\n+{ 'command': 'chardev-change', 'data': {'id' : 'str',\n+ 'backend' : 'ChardevBackend' },\n+ 'returns': 'ChardevReturn' }\n+\n+##\n+# @chardev-remove:\n+#\n+# Remove a character device backend\n+#\n+# @id: the chardev's ID, must exist and not be in use\n+#\n+# Returns: Nothing on success\n+#\n+# Since: 1.4\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"chardev-remove\", \"arguments\": { \"id\" : \"foo\" } }\n+# <- { \"return\": {} }\n+#\n+##\n+{ 'command': 'chardev-remove', 'data': {'id': 'str'} }\n+\n+##\n+# @chardev-send-break:\n+#\n+# Send a break to a character device\n+#\n+# @id: the chardev's ID, must exist\n+#\n+# Returns: Nothing on success\n+#\n+# Since: 2.10\n+#\n+# Example:\n+#\n+# -> { \"execute\": \"chardev-send-break\", \"arguments\": { \"id\" : \"foo\" } }\n+# <- { \"return\": {} }\n+#\n+##\n+{ 'command': 'chardev-send-break', 'data': {'id': 'str'} }\n+\n+##\n+# @VSERPORT_CHANGE:\n+#\n+# Emitted when the guest opens or closes a virtio-serial port.\n+#\n+# @id: device identifier of the virtio-serial port\n+#\n+# @open: true if the guest has opened the virtio-serial port\n+#\n+# Since: 2.1\n+#\n+# Example:\n+#\n+# <- { \"event\": \"VSERPORT_CHANGE\",\n+# \"data\": { \"id\": \"channel0\", \"open\": true },\n+# \"timestamp\": { \"seconds\": 1401385907, \"microseconds\": 422329 } }\n+#\n+##\n+{ 'event': 'VSERPORT_CHANGE',\n+ 'data': { 'id': 'str', 'open': 'bool' } }\ndiff --git a/qapi/event.json b/qapi/event.json\nindex 9c6126d278..b9aa6ed7cf 100644\n--- a/qapi/event.json\n+++ b/qapi/event.json\n@@ -397,27 +397,6 @@\n 'sector-num': 'int', 'sectors-count': 'int' } }\n \n ##\n-# @VSERPORT_CHANGE:\n-#\n-# Emitted when the guest opens or closes a virtio-serial port.\n-#\n-# @id: device identifier of the virtio-serial port\n-#\n-# @open: true if the guest has opened the virtio-serial port\n-#\n-# Since: 2.1\n-#\n-# Example:\n-#\n-# <- { \"event\": \"VSERPORT_CHANGE\",\n-# \"data\": { \"id\": \"channel0\", \"open\": true },\n-# \"timestamp\": { \"seconds\": 1401385907, \"microseconds\": 422329 } }\n-#\n-##\n-{ 'event': 'VSERPORT_CHANGE',\n- 'data': { 'id': 'str', 'open': 'bool' } }\n-\n-##\n # @MEM_UNPLUG_ERROR:\n #\n # Emitted when memory hot unplug error occurs.\n", "prefixes": [ "PULL", "v2", "21/47" ] }