diff --git a/MAINTAINERS b/MAINTAINERS index ccee28b12d..fb90a19b3d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1535,6 +1535,7 @@ M: Paolo Bonzini S: Maintained F: include/qemu/sockets.h F: util/qemu-sockets.c +F: qapi/sockets.json Throttling infrastructure M: Alberto Garcia diff --git a/Makefile b/Makefile index 81447b1f08..ca4a03c376 100644 --- a/Makefile +++ b/Makefile @@ -410,8 +410,10 @@ $(SRC_PATH)/qga/qapi-schema.json $(SRC_PATH)/scripts/qapi-commands.py $(qapi-py) qapi-modules = $(SRC_PATH)/qapi-schema.json $(SRC_PATH)/qapi/common.json \ $(SRC_PATH)/qapi/block.json $(SRC_PATH)/qapi/block-core.json \ + $(SRC_PATH)/qapi/crypto.json \ $(SRC_PATH)/qapi/event.json $(SRC_PATH)/qapi/introspect.json \ - $(SRC_PATH)/qapi/crypto.json $(SRC_PATH)/qapi/rocker.json \ + $(SRC_PATH)/qapi/rocker.json \ + $(SRC_PATH)/qapi/sockets.json \ $(SRC_PATH)/qapi/trace.json qapi-types.c qapi-types.h :\ diff --git a/qapi-schema.json b/qapi-schema.json index add4777e9a..d69b6da5ec 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -79,6 +79,7 @@ # include it first in qapi-schema.json. { 'include': 'qapi/common.json' } +{ 'include': 'qapi/sockets.json' } { 'include': 'qapi/crypto.json' } { 'include': 'qapi/block.json' } { 'include': 'qapi/rocker.json' } @@ -1615,26 +1616,6 @@ ## { 'command': 'query-iothreads', 'returns': ['IOThreadInfo'] } -## -# @NetworkAddressFamily: -# -# The network address family -# -# @ipv4: IPV4 family -# -# @ipv6: IPV6 family -# -# @unix: unix socket -# -# @vsock: vsock family (since 2.8) -# -# @unknown: otherwise -# -# Since: 2.1 -## -{ 'enum': 'NetworkAddressFamily', - 'data': [ 'ipv4', 'ipv6', 'unix', 'vsock', 'unknown' ] } - ## # @VncBasicInfo: # @@ -3695,17 +3676,6 @@ '*addr': 'str', '*vectors': 'uint32' } } -## -# @String: -# -# A fat type wrapping 'str', to be embedded in lists. -# -# Since: 1.2 -## -{ 'struct': 'String', - 'data': { - 'str': 'str' } } - ## # @NetdevUserOptions: # @@ -4156,126 +4126,6 @@ { 'enum': 'NetFilterDirection', 'data': [ 'all', 'rx', 'tx' ] } -## -# @InetSocketAddressBase: -# -# @host: host part of the address -# @port: port part of the address -## -{ 'struct': 'InetSocketAddressBase', - 'data': { - 'host': 'str', - 'port': 'str' } } - -## -# @InetSocketAddress: -# -# Captures a socket address or address range in the Internet namespace. -# -# @numeric: true if the host/port are guaranteed to be numeric, -# false if name resolution should be attempted. Defaults to false. -# (Since 2.9) -# -# @to: If present, this is range of possible addresses, with port -# between @port and @to. -# -# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6 -# -# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and IPv6 -# -# Since: 1.3 -## -{ 'struct': 'InetSocketAddress', - 'base': 'InetSocketAddressBase', - 'data': { - '*numeric': 'bool', - '*to': 'uint16', - '*ipv4': 'bool', - '*ipv6': 'bool' } } - -## -# @UnixSocketAddress: -# -# Captures a socket address in the local ("Unix socket") namespace. -# -# @path: filesystem path to use -# -# Since: 1.3 -## -{ 'struct': 'UnixSocketAddress', - 'data': { - 'path': 'str' } } - -## -# @VsockSocketAddress: -# -# Captures a socket address in the vsock namespace. -# -# @cid: unique host identifier -# @port: port -# -# Note: string types are used to allow for possible future hostname or -# service resolution support. -# -# Since: 2.8 -## -{ 'struct': 'VsockSocketAddress', - 'data': { - 'cid': 'str', - 'port': 'str' } } - -## -# @SocketAddressLegacy: -# -# Captures the address of a socket, which could also be a named file descriptor -# -# Note: This type is deprecated in favor of SocketAddress. The -# difference between SocketAddressLegacy and SocketAddress is that the -# latter is a flat union rather than a simple union. Flat is nicer -# because it avoids nesting on the wire, i.e. that form has fewer {}. - -# -# Since: 1.3 -## -{ 'union': 'SocketAddressLegacy', - 'data': { - 'inet': 'InetSocketAddress', - 'unix': 'UnixSocketAddress', - 'vsock': 'VsockSocketAddress', - 'fd': 'String' } } - -## -# @SocketAddressType: -# -# Available SocketAddress types -# -# @inet: Internet address -# -# @unix: Unix domain socket -# -# Since: 2.9 -## -{ 'enum': 'SocketAddressType', - 'data': [ 'inet', 'unix', 'vsock', 'fd' ] } - -## -# @SocketAddress: -# -# Captures the address of a socket, which could also be a named file -# descriptor -# -# @type: Transport type -# -# Since: 2.9 -## -{ 'union': 'SocketAddress', - 'base': { 'type': 'SocketAddressType' }, - 'discriminator': 'type', - 'data': { 'inet': 'InetSocketAddress', - 'unix': 'UnixSocketAddress', - 'vsock': 'VsockSocketAddress', - 'fd': 'String' } } - ## # @getfd: # diff --git a/qapi/block-core.json b/qapi/block-core.json index 833c602150..5379674292 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -4,8 +4,8 @@ # == QAPI block core definitions (vm unrelated) ## -# QAPI common definitions { 'include': 'common.json' } +{ 'include': 'sockets.json' } ## # @SnapshotInfo: diff --git a/qapi/common.json b/qapi/common.json index 8355d5a2f3..862e73f982 100644 --- a/qapi/common.json +++ b/qapi/common.json @@ -162,3 +162,14 @@ ## { 'enum': 'OnOffSplit', 'data': [ 'on', 'off', 'split' ] } + +## +# @String: +# +# A fat type wrapping 'str', to be embedded in lists. +# +# Since: 1.2 +## +{ 'struct': 'String', + 'data': { + 'str': 'str' } } diff --git a/qapi/sockets.json b/qapi/sockets.json new file mode 100644 index 0000000000..ac022c6ad0 --- /dev/null +++ b/qapi/sockets.json @@ -0,0 +1,147 @@ +# -*- Mode: Python -*- + +## +# = Socket data types +## + +{ 'include': 'common.json' } + +## +# @NetworkAddressFamily: +# +# The network address family +# +# @ipv4: IPV4 family +# +# @ipv6: IPV6 family +# +# @unix: unix socket +# +# @vsock: vsock family (since 2.8) +# +# @unknown: otherwise +# +# Since: 2.1 +## +{ 'enum': 'NetworkAddressFamily', + 'data': [ 'ipv4', 'ipv6', 'unix', 'vsock', 'unknown' ] } + +## +# @InetSocketAddressBase: +# +# @host: host part of the address +# @port: port part of the address +## +{ 'struct': 'InetSocketAddressBase', + 'data': { + 'host': 'str', + 'port': 'str' } } + +## +# @InetSocketAddress: +# +# Captures a socket address or address range in the Internet namespace. +# +# @numeric: true if the host/port are guaranteed to be numeric, +# false if name resolution should be attempted. Defaults to false. +# (Since 2.9) +# +# @to: If present, this is range of possible addresses, with port +# between @port and @to. +# +# @ipv4: whether to accept IPv4 addresses, default try both IPv4 and IPv6 +# +# @ipv6: whether to accept IPv6 addresses, default try both IPv4 and IPv6 +# +# Since: 1.3 +## +{ 'struct': 'InetSocketAddress', + 'base': 'InetSocketAddressBase', + 'data': { + '*numeric': 'bool', + '*to': 'uint16', + '*ipv4': 'bool', + '*ipv6': 'bool' } } + +## +# @UnixSocketAddress: +# +# Captures a socket address in the local ("Unix socket") namespace. +# +# @path: filesystem path to use +# +# Since: 1.3 +## +{ 'struct': 'UnixSocketAddress', + 'data': { + 'path': 'str' } } + +## +# @VsockSocketAddress: +# +# Captures a socket address in the vsock namespace. +# +# @cid: unique host identifier +# @port: port +# +# Note: string types are used to allow for possible future hostname or +# service resolution support. +# +# Since: 2.8 +## +{ 'struct': 'VsockSocketAddress', + 'data': { + 'cid': 'str', + 'port': 'str' } } + +## +# @SocketAddressLegacy: +# +# Captures the address of a socket, which could also be a named file descriptor +# +# Note: This type is deprecated in favor of SocketAddress. The +# difference between SocketAddressLegacy and SocketAddress is that the +# latter is a flat union rather than a simple union. Flat is nicer +# because it avoids nesting on the wire, i.e. that form has fewer {}. + +# +# Since: 1.3 +## +{ 'union': 'SocketAddressLegacy', + 'data': { + 'inet': 'InetSocketAddress', + 'unix': 'UnixSocketAddress', + 'vsock': 'VsockSocketAddress', + 'fd': 'String' } } + +## +# @SocketAddressType: +# +# Available SocketAddress types +# +# @inet: Internet address +# +# @unix: Unix domain socket +# +# Since: 2.9 +## +{ 'enum': 'SocketAddressType', + 'data': [ 'inet', 'unix', 'vsock', 'fd' ] } + +## +# @SocketAddress: +# +# Captures the address of a socket, which could also be a named file +# descriptor +# +# @type: Transport type +# +# Since: 2.9 +## +{ 'union': 'SocketAddress', + 'base': { 'type': 'SocketAddressType' }, + 'discriminator': 'type', + 'data': { 'inet': 'InetSocketAddress', + 'unix': 'UnixSocketAddress', + 'vsock': 'VsockSocketAddress', + 'fd': 'String' } }