xref: /openbmc/qemu/qapi/net.json (revision 58d49b5895f2e0b5cfe4b2901bf24f3320b74f29)
13c0bd37dSMarkus Armbruster# -*- Mode: Python -*-
2f7160f32SAndrea Bolognani# vim: filetype=python
33c0bd37dSMarkus Armbruster#
43c0bd37dSMarkus Armbruster
53c0bd37dSMarkus Armbruster##
63c0bd37dSMarkus Armbruster# = Net devices
73c0bd37dSMarkus Armbruster##
83c0bd37dSMarkus Armbruster
95166fe0aSLaurent Vivier{ 'include': 'sockets.json' }
103c0bd37dSMarkus Armbruster
113c0bd37dSMarkus Armbruster##
123c0bd37dSMarkus Armbruster# @set_link:
133c0bd37dSMarkus Armbruster#
143c0bd37dSMarkus Armbruster# Sets the link status of a virtual network adapter.
153c0bd37dSMarkus Armbruster#
163c0bd37dSMarkus Armbruster# @name: the device name of the virtual network adapter
173c0bd37dSMarkus Armbruster#
183c0bd37dSMarkus Armbruster# @up: true to set the link status to be up
193c0bd37dSMarkus Armbruster#
202746f060SMarkus Armbruster# Errors:
21ae7ccd50SMarkus Armbruster#     - If @name is not a valid network device, DeviceNotFound
223c0bd37dSMarkus Armbruster#
239bc6e893SMarkus Armbruster# Since: 0.14
243c0bd37dSMarkus Armbruster#
2501bed0ffSMarkus Armbruster# .. note:: Not all network adapters support setting link status.
2601bed0ffSMarkus Armbruster#    This command will succeed even if the network adapter does not
2701bed0ffSMarkus Armbruster#    support link status notification.
283c0bd37dSMarkus Armbruster#
2914b48aaaSJohn Snow# .. qmp-example::
303c0bd37dSMarkus Armbruster#
313c0bd37dSMarkus Armbruster#     -> { "execute": "set_link",
323c0bd37dSMarkus Armbruster#          "arguments": { "name": "e1000.0", "up": false } }
333c0bd37dSMarkus Armbruster#     <- { "return": {} }
343c0bd37dSMarkus Armbruster##
353c0bd37dSMarkus Armbruster{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} }
363c0bd37dSMarkus Armbruster
373c0bd37dSMarkus Armbruster##
383c0bd37dSMarkus Armbruster# @netdev_add:
393c0bd37dSMarkus Armbruster#
403c0bd37dSMarkus Armbruster# Add a network backend.
413c0bd37dSMarkus Armbruster#
423c0bd37dSMarkus Armbruster# Additional arguments depend on the type.
433c0bd37dSMarkus Armbruster#
449bc6e893SMarkus Armbruster# Since: 0.14
453c0bd37dSMarkus Armbruster#
462746f060SMarkus Armbruster# Errors:
47ae7ccd50SMarkus Armbruster#     - If @type is not a valid network backend, DeviceNotFound
483c0bd37dSMarkus Armbruster#
4914b48aaaSJohn Snow# .. qmp-example::
503c0bd37dSMarkus Armbruster#
513c0bd37dSMarkus Armbruster#     -> { "execute": "netdev_add",
523c0bd37dSMarkus Armbruster#          "arguments": { "type": "user", "id": "netdev1",
539a9d101cSVictor Toso#                         "dnssearch": [ { "str": "example.org" } ] } }
543c0bd37dSMarkus Armbruster#     <- { "return": {} }
553c0bd37dSMarkus Armbruster##
5648f596c5SPaolo Bonzini{ 'command': 'netdev_add', 'data': 'Netdev', 'boxed': true,
5748f596c5SPaolo Bonzini  'allow-preconfig': true }
583c0bd37dSMarkus Armbruster
593c0bd37dSMarkus Armbruster##
603c0bd37dSMarkus Armbruster# @netdev_del:
613c0bd37dSMarkus Armbruster#
623c0bd37dSMarkus Armbruster# Remove a network backend.
633c0bd37dSMarkus Armbruster#
643c0bd37dSMarkus Armbruster# @id: the name of the network backend to remove
653c0bd37dSMarkus Armbruster#
662746f060SMarkus Armbruster# Errors:
67ae7ccd50SMarkus Armbruster#     - If @id is not a valid network backend, DeviceNotFound
683c0bd37dSMarkus Armbruster#
699bc6e893SMarkus Armbruster# Since: 0.14
703c0bd37dSMarkus Armbruster#
7114b48aaaSJohn Snow# .. qmp-example::
723c0bd37dSMarkus Armbruster#
733c0bd37dSMarkus Armbruster#     -> { "execute": "netdev_del", "arguments": { "id": "netdev1" } }
743c0bd37dSMarkus Armbruster#     <- { "return": {} }
753c0bd37dSMarkus Armbruster##
7648f596c5SPaolo Bonzini{ 'command': 'netdev_del', 'data': {'id': 'str'},
7748f596c5SPaolo Bonzini  'allow-preconfig': true }
783c0bd37dSMarkus Armbruster
793c0bd37dSMarkus Armbruster##
803c0bd37dSMarkus Armbruster# @NetLegacyNicOptions:
813c0bd37dSMarkus Armbruster#
823c0bd37dSMarkus Armbruster# Create a new Network Interface Card.
833c0bd37dSMarkus Armbruster#
843c0bd37dSMarkus Armbruster# @netdev: id of -netdev to connect to
853c0bd37dSMarkus Armbruster#
863c0bd37dSMarkus Armbruster# @macaddr: MAC address
873c0bd37dSMarkus Armbruster#
883c0bd37dSMarkus Armbruster# @model: device model (e1000, rtl8139, virtio etc.)
893c0bd37dSMarkus Armbruster#
903c0bd37dSMarkus Armbruster# @addr: PCI device address
913c0bd37dSMarkus Armbruster#
923c0bd37dSMarkus Armbruster# @vectors: number of MSI-x vectors, 0 to disable MSI-X
933c0bd37dSMarkus Armbruster#
943c0bd37dSMarkus Armbruster# Since: 1.2
953c0bd37dSMarkus Armbruster##
963c0bd37dSMarkus Armbruster{ 'struct': 'NetLegacyNicOptions',
973c0bd37dSMarkus Armbruster  'data': {
983c0bd37dSMarkus Armbruster    '*netdev':  'str',
993c0bd37dSMarkus Armbruster    '*macaddr': 'str',
1003c0bd37dSMarkus Armbruster    '*model':   'str',
1013c0bd37dSMarkus Armbruster    '*addr':    'str',
1023c0bd37dSMarkus Armbruster    '*vectors': 'uint32' } }
1033c0bd37dSMarkus Armbruster
1043c0bd37dSMarkus Armbruster##
1058bf69544SMarkus Armbruster# @String:
1068bf69544SMarkus Armbruster#
1078bf69544SMarkus Armbruster# A fat type wrapping 'str', to be embedded in lists.
1088bf69544SMarkus Armbruster#
1098bf69544SMarkus Armbruster# Since: 1.2
1108bf69544SMarkus Armbruster##
1118bf69544SMarkus Armbruster{ 'struct': 'String',
1128bf69544SMarkus Armbruster  'data': {
1138bf69544SMarkus Armbruster    'str': 'str' } }
1148bf69544SMarkus Armbruster
1158bf69544SMarkus Armbruster##
1163c0bd37dSMarkus Armbruster# @NetdevUserOptions:
1173c0bd37dSMarkus Armbruster#
118a937b6aaSMarkus Armbruster# Use the user mode network stack which requires no administrator
119a937b6aaSMarkus Armbruster# privilege to run.
1203c0bd37dSMarkus Armbruster#
1213c0bd37dSMarkus Armbruster# @hostname: client hostname reported by the builtin DHCP server
1223c0bd37dSMarkus Armbruster#
1233c0bd37dSMarkus Armbruster# @restrict: isolate the guest from the host
1243c0bd37dSMarkus Armbruster#
125a937b6aaSMarkus Armbruster# @ipv4: whether to support IPv4, default true for enabled (since 2.6)
1263c0bd37dSMarkus Armbruster#
127a937b6aaSMarkus Armbruster# @ipv6: whether to support IPv6, default true for enabled (since 2.6)
1283c0bd37dSMarkus Armbruster#
1293c0bd37dSMarkus Armbruster# @ip: legacy parameter, use net= instead
1303c0bd37dSMarkus Armbruster#
131a937b6aaSMarkus Armbruster# @net: IP network address that the guest will see, in the form
132a937b6aaSMarkus Armbruster#     addr[/netmask] The netmask is optional, and can be either in the
133a937b6aaSMarkus Armbruster#     form a.b.c.d or as a number of valid top-most bits.  Default is
134a937b6aaSMarkus Armbruster#     10.0.2.0/24.
1353c0bd37dSMarkus Armbruster#
1363c0bd37dSMarkus Armbruster# @host: guest-visible address of the host
1373c0bd37dSMarkus Armbruster#
1383c0bd37dSMarkus Armbruster# @tftp: root directory of the built-in TFTP server
1393c0bd37dSMarkus Armbruster#
1403c0bd37dSMarkus Armbruster# @bootfile: BOOTP filename, for use with tftp=
1413c0bd37dSMarkus Armbruster#
1423c0bd37dSMarkus Armbruster# @dhcpstart: the first of the 16 IPs the built-in DHCP server can
1433c0bd37dSMarkus Armbruster#     assign
1443c0bd37dSMarkus Armbruster#
1453c0bd37dSMarkus Armbruster# @dns: guest-visible address of the virtual nameserver
1463c0bd37dSMarkus Armbruster#
147a937b6aaSMarkus Armbruster# @dnssearch: list of DNS suffixes to search, passed as DHCP option to
148a937b6aaSMarkus Armbruster#     the guest
1493c0bd37dSMarkus Armbruster#
150f18d1375SBenjamin Drung# @domainname: guest-visible domain name of the virtual nameserver
1513835c310SSamuel Thibault#     (since 3.0)
152f18d1375SBenjamin Drung#
153a937b6aaSMarkus Armbruster# @ipv6-prefix: IPv6 network prefix (default is fec0::) (since 2.6).
154a937b6aaSMarkus Armbruster#     The network prefix is given in the usual hexadecimal IPv6
155a937b6aaSMarkus Armbruster#     address notation.
1563c0bd37dSMarkus Armbruster#
157a937b6aaSMarkus Armbruster# @ipv6-prefixlen: IPv6 network prefix length (default is 64) (since
158a937b6aaSMarkus Armbruster#     2.6)
1593c0bd37dSMarkus Armbruster#
1603c0bd37dSMarkus Armbruster# @ipv6-host: guest-visible IPv6 address of the host (since 2.6)
1613c0bd37dSMarkus Armbruster#
162a937b6aaSMarkus Armbruster# @ipv6-dns: guest-visible IPv6 address of the virtual nameserver
163a937b6aaSMarkus Armbruster#     (since 2.6)
1643c0bd37dSMarkus Armbruster#
1653c0bd37dSMarkus Armbruster# @smb: root directory of the built-in SMB server
1663c0bd37dSMarkus Armbruster#
1673c0bd37dSMarkus Armbruster# @smbserver: IP address of the built-in SMB server
1683c0bd37dSMarkus Armbruster#
1693c0bd37dSMarkus Armbruster# @hostfwd: redirect incoming TCP or UDP host connections to guest
1703c0bd37dSMarkus Armbruster#     endpoints
1713c0bd37dSMarkus Armbruster#
1723c0bd37dSMarkus Armbruster# @guestfwd: forward guest TCP connections
1733c0bd37dSMarkus Armbruster#
1740fca92b9SFam Zheng# @tftp-server-name: RFC2132 "TFTP server name" string (Since 3.1)
1750fca92b9SFam Zheng#
1763c0bd37dSMarkus Armbruster# Since: 1.2
1773c0bd37dSMarkus Armbruster##
1783c0bd37dSMarkus Armbruster{ 'struct': 'NetdevUserOptions',
1793c0bd37dSMarkus Armbruster  'data': {
1803c0bd37dSMarkus Armbruster    '*hostname':  'str',
1813c0bd37dSMarkus Armbruster    '*restrict':  'bool',
1823c0bd37dSMarkus Armbruster    '*ipv4':      'bool',
1833c0bd37dSMarkus Armbruster    '*ipv6':      'bool',
1843c0bd37dSMarkus Armbruster    '*ip':        'str',
1853c0bd37dSMarkus Armbruster    '*net':       'str',
1863c0bd37dSMarkus Armbruster    '*host':      'str',
1873c0bd37dSMarkus Armbruster    '*tftp':      'str',
1883c0bd37dSMarkus Armbruster    '*bootfile':  'str',
1893c0bd37dSMarkus Armbruster    '*dhcpstart': 'str',
1903c0bd37dSMarkus Armbruster    '*dns':       'str',
1913c0bd37dSMarkus Armbruster    '*dnssearch': ['String'],
192f18d1375SBenjamin Drung    '*domainname': 'str',
1933c0bd37dSMarkus Armbruster    '*ipv6-prefix':      'str',
1943c0bd37dSMarkus Armbruster    '*ipv6-prefixlen':   'int',
1953c0bd37dSMarkus Armbruster    '*ipv6-host':        'str',
1963c0bd37dSMarkus Armbruster    '*ipv6-dns':         'str',
1973c0bd37dSMarkus Armbruster    '*smb':       'str',
1983c0bd37dSMarkus Armbruster    '*smbserver': 'str',
1993c0bd37dSMarkus Armbruster    '*hostfwd':   ['String'],
2000fca92b9SFam Zheng    '*guestfwd':  ['String'],
2010fca92b9SFam Zheng    '*tftp-server-name': 'str' } }
2023c0bd37dSMarkus Armbruster
2033c0bd37dSMarkus Armbruster##
2043c0bd37dSMarkus Armbruster# @NetdevTapOptions:
2053c0bd37dSMarkus Armbruster#
206af1a5c3eSThomas Huth# Used to configure a host TAP network interface backend.
2073c0bd37dSMarkus Armbruster#
2083c0bd37dSMarkus Armbruster# @ifname: interface name
2093c0bd37dSMarkus Armbruster#
2103c0bd37dSMarkus Armbruster# @fd: file descriptor of an already opened tap
2113c0bd37dSMarkus Armbruster#
2123c0bd37dSMarkus Armbruster# @fds: multiple file descriptors of already opened multiqueue capable
2133c0bd37dSMarkus Armbruster#     tap
2143c0bd37dSMarkus Armbruster#
2153c0bd37dSMarkus Armbruster# @script: script to initialize the interface
2163c0bd37dSMarkus Armbruster#
2173c0bd37dSMarkus Armbruster# @downscript: script to shut down the interface
2183c0bd37dSMarkus Armbruster#
2193c0bd37dSMarkus Armbruster# @br: bridge name (since 2.8)
2203c0bd37dSMarkus Armbruster#
2213c0bd37dSMarkus Armbruster# @helper: command to execute to configure bridge
2223c0bd37dSMarkus Armbruster#
2233c0bd37dSMarkus Armbruster# @sndbuf: send buffer limit.  Understands [TGMKkb] suffixes.
2243c0bd37dSMarkus Armbruster#
2253c0bd37dSMarkus Armbruster# @vnet_hdr: enable the IFF_VNET_HDR flag on the tap interface
2263c0bd37dSMarkus Armbruster#
2273c0bd37dSMarkus Armbruster# @vhost: enable vhost-net network accelerator
2283c0bd37dSMarkus Armbruster#
2293c0bd37dSMarkus Armbruster# @vhostfd: file descriptor of an already opened vhost net device
2303c0bd37dSMarkus Armbruster#
2313c0bd37dSMarkus Armbruster# @vhostfds: file descriptors of multiple already opened vhost net
2323c0bd37dSMarkus Armbruster#     devices
2333c0bd37dSMarkus Armbruster#
2343c0bd37dSMarkus Armbruster# @vhostforce: vhost on for non-MSIX virtio guests
2353c0bd37dSMarkus Armbruster#
2363c0bd37dSMarkus Armbruster# @queues: number of queues to be created for multiqueue capable tap
2373c0bd37dSMarkus Armbruster#
238a937b6aaSMarkus Armbruster# @poll-us: maximum number of microseconds that could be spent on busy
239a937b6aaSMarkus Armbruster#     polling for tap (since 2.7)
2403c0bd37dSMarkus Armbruster#
2413c0bd37dSMarkus Armbruster# Since: 1.2
2423c0bd37dSMarkus Armbruster##
2433c0bd37dSMarkus Armbruster{ 'struct': 'NetdevTapOptions',
2443c0bd37dSMarkus Armbruster  'data': {
2453c0bd37dSMarkus Armbruster    '*ifname':     'str',
2463c0bd37dSMarkus Armbruster    '*fd':         'str',
2473c0bd37dSMarkus Armbruster    '*fds':        'str',
2483c0bd37dSMarkus Armbruster    '*script':     'str',
2493c0bd37dSMarkus Armbruster    '*downscript': 'str',
2503c0bd37dSMarkus Armbruster    '*br':         'str',
2513c0bd37dSMarkus Armbruster    '*helper':     'str',
2523c0bd37dSMarkus Armbruster    '*sndbuf':     'size',
2533c0bd37dSMarkus Armbruster    '*vnet_hdr':   'bool',
2543c0bd37dSMarkus Armbruster    '*vhost':      'bool',
2553c0bd37dSMarkus Armbruster    '*vhostfd':    'str',
2563c0bd37dSMarkus Armbruster    '*vhostfds':   'str',
2573c0bd37dSMarkus Armbruster    '*vhostforce': 'bool',
2583c0bd37dSMarkus Armbruster    '*queues':     'uint32',
2593c0bd37dSMarkus Armbruster    '*poll-us':    'uint32'} }
2603c0bd37dSMarkus Armbruster
2613c0bd37dSMarkus Armbruster##
2623c0bd37dSMarkus Armbruster# @NetdevSocketOptions:
2633c0bd37dSMarkus Armbruster#
264af1a5c3eSThomas Huth# Socket netdevs are used to establish a network connection to another
265af1a5c3eSThomas Huth# QEMU virtual machine via a TCP socket.
2663c0bd37dSMarkus Armbruster#
2673c0bd37dSMarkus Armbruster# @fd: file descriptor of an already opened socket
2683c0bd37dSMarkus Armbruster#
2693c0bd37dSMarkus Armbruster# @listen: port number, and optional hostname, to listen on
2703c0bd37dSMarkus Armbruster#
2713c0bd37dSMarkus Armbruster# @connect: port number, and optional hostname, to connect to
2723c0bd37dSMarkus Armbruster#
2733c0bd37dSMarkus Armbruster# @mcast: UDP multicast address and port number
2743c0bd37dSMarkus Armbruster#
2753c0bd37dSMarkus Armbruster# @localaddr: source address and port for multicast and udp packets
2763c0bd37dSMarkus Armbruster#
2773c0bd37dSMarkus Armbruster# @udp: UDP unicast address and port number
2783c0bd37dSMarkus Armbruster#
2793c0bd37dSMarkus Armbruster# Since: 1.2
2803c0bd37dSMarkus Armbruster##
2813c0bd37dSMarkus Armbruster{ 'struct': 'NetdevSocketOptions',
2823c0bd37dSMarkus Armbruster  'data': {
2833c0bd37dSMarkus Armbruster    '*fd':        'str',
2843c0bd37dSMarkus Armbruster    '*listen':    'str',
2853c0bd37dSMarkus Armbruster    '*connect':   'str',
2863c0bd37dSMarkus Armbruster    '*mcast':     'str',
2873c0bd37dSMarkus Armbruster    '*localaddr': 'str',
2883c0bd37dSMarkus Armbruster    '*udp':       'str' } }
2893c0bd37dSMarkus Armbruster
2903c0bd37dSMarkus Armbruster##
2913c0bd37dSMarkus Armbruster# @NetdevL2TPv3Options:
2923c0bd37dSMarkus Armbruster#
293af1a5c3eSThomas Huth# Configure an Ethernet over L2TPv3 tunnel.
2943c0bd37dSMarkus Armbruster#
2953c0bd37dSMarkus Armbruster# @src: source address
2963c0bd37dSMarkus Armbruster#
2973c0bd37dSMarkus Armbruster# @dst: destination address
2983c0bd37dSMarkus Armbruster#
2993c0bd37dSMarkus Armbruster# @srcport: source port - mandatory for udp, optional for ip
3003c0bd37dSMarkus Armbruster#
3013c0bd37dSMarkus Armbruster# @dstport: destination port - mandatory for udp, optional for ip
3023c0bd37dSMarkus Armbruster#
3033c0bd37dSMarkus Armbruster# @ipv6: force the use of ipv6
3043c0bd37dSMarkus Armbruster#
3053c0bd37dSMarkus Armbruster# @udp: use the udp version of l2tpv3 encapsulation
3063c0bd37dSMarkus Armbruster#
307118d4ed0SDr. David Alan Gilbert# @cookie64: use 64 bit cookies
3083c0bd37dSMarkus Armbruster#
3093c0bd37dSMarkus Armbruster# @counter: have sequence counter
3103c0bd37dSMarkus Armbruster#
311a937b6aaSMarkus Armbruster# @pincounter: pin sequence counter to zero - workaround for buggy
312a937b6aaSMarkus Armbruster#     implementations or networks with packet reorder
3133c0bd37dSMarkus Armbruster#
3143c0bd37dSMarkus Armbruster# @txcookie: 32 or 64 bit transmit cookie
3153c0bd37dSMarkus Armbruster#
3163c0bd37dSMarkus Armbruster# @rxcookie: 32 or 64 bit receive cookie
3173c0bd37dSMarkus Armbruster#
3183c0bd37dSMarkus Armbruster# @txsession: 32 bit transmit session
3193c0bd37dSMarkus Armbruster#
320a937b6aaSMarkus Armbruster# @rxsession: 32 bit receive session - if not specified set to the
321a937b6aaSMarkus Armbruster#     same value as transmit
3223c0bd37dSMarkus Armbruster#
323a937b6aaSMarkus Armbruster# @offset: additional offset - allows the insertion of additional
324a937b6aaSMarkus Armbruster#     application-specific data before the packet payload
3253c0bd37dSMarkus Armbruster#
3263c0bd37dSMarkus Armbruster# Since: 2.1
3273c0bd37dSMarkus Armbruster##
3283c0bd37dSMarkus Armbruster{ 'struct': 'NetdevL2TPv3Options',
3293c0bd37dSMarkus Armbruster  'data': {
3303c0bd37dSMarkus Armbruster    'src':          'str',
3313c0bd37dSMarkus Armbruster    'dst':          'str',
3323c0bd37dSMarkus Armbruster    '*srcport':     'str',
3333c0bd37dSMarkus Armbruster    '*dstport':     'str',
3343c0bd37dSMarkus Armbruster    '*ipv6':        'bool',
3353c0bd37dSMarkus Armbruster    '*udp':         'bool',
3363c0bd37dSMarkus Armbruster    '*cookie64':    'bool',
3373c0bd37dSMarkus Armbruster    '*counter':     'bool',
3383c0bd37dSMarkus Armbruster    '*pincounter':  'bool',
3393c0bd37dSMarkus Armbruster    '*txcookie':    'uint64',
3403c0bd37dSMarkus Armbruster    '*rxcookie':    'uint64',
3413c0bd37dSMarkus Armbruster    'txsession':    'uint32',
3423c0bd37dSMarkus Armbruster    '*rxsession':   'uint32',
3433c0bd37dSMarkus Armbruster    '*offset':      'uint32' } }
3443c0bd37dSMarkus Armbruster
3453c0bd37dSMarkus Armbruster##
3463c0bd37dSMarkus Armbruster# @NetdevVdeOptions:
3473c0bd37dSMarkus Armbruster#
348af1a5c3eSThomas Huth# Connect to a vde switch running on the host.
3493c0bd37dSMarkus Armbruster#
3503c0bd37dSMarkus Armbruster# @sock: socket path
3513c0bd37dSMarkus Armbruster#
3523c0bd37dSMarkus Armbruster# @port: port number
3533c0bd37dSMarkus Armbruster#
3543c0bd37dSMarkus Armbruster# @group: group owner of socket
3553c0bd37dSMarkus Armbruster#
3563c0bd37dSMarkus Armbruster# @mode: permissions for socket
3573c0bd37dSMarkus Armbruster#
3583c0bd37dSMarkus Armbruster# Since: 1.2
3593c0bd37dSMarkus Armbruster##
3603c0bd37dSMarkus Armbruster{ 'struct': 'NetdevVdeOptions',
3613c0bd37dSMarkus Armbruster  'data': {
3623c0bd37dSMarkus Armbruster    '*sock':  'str',
3633c0bd37dSMarkus Armbruster    '*port':  'uint16',
3643c0bd37dSMarkus Armbruster    '*group': 'str',
3653c0bd37dSMarkus Armbruster    '*mode':  'uint16' } }
3663c0bd37dSMarkus Armbruster
3673c0bd37dSMarkus Armbruster##
3683c0bd37dSMarkus Armbruster# @NetdevBridgeOptions:
3693c0bd37dSMarkus Armbruster#
3703c0bd37dSMarkus Armbruster# Connect a host TAP network interface to a host bridge device.
3713c0bd37dSMarkus Armbruster#
3723c0bd37dSMarkus Armbruster# @br: bridge name
3733c0bd37dSMarkus Armbruster#
3743c0bd37dSMarkus Armbruster# @helper: command to execute to configure bridge
3753c0bd37dSMarkus Armbruster#
3763c0bd37dSMarkus Armbruster# Since: 1.2
3773c0bd37dSMarkus Armbruster##
3783c0bd37dSMarkus Armbruster{ 'struct': 'NetdevBridgeOptions',
3793c0bd37dSMarkus Armbruster  'data': {
3803c0bd37dSMarkus Armbruster    '*br':     'str',
3813c0bd37dSMarkus Armbruster    '*helper': 'str' } }
3823c0bd37dSMarkus Armbruster
3833c0bd37dSMarkus Armbruster##
3843c0bd37dSMarkus Armbruster# @NetdevHubPortOptions:
3853c0bd37dSMarkus Armbruster#
3863c0bd37dSMarkus Armbruster# Connect two or more net clients through a software hub.
3873c0bd37dSMarkus Armbruster#
3883c0bd37dSMarkus Armbruster# @hubid: hub identifier number
389a937b6aaSMarkus Armbruster#
390a937b6aaSMarkus Armbruster# @netdev: used to connect hub to a netdev instead of a device (since
391a937b6aaSMarkus Armbruster#     2.12)
3923c0bd37dSMarkus Armbruster#
3933c0bd37dSMarkus Armbruster# Since: 1.2
3943c0bd37dSMarkus Armbruster##
3953c0bd37dSMarkus Armbruster{ 'struct': 'NetdevHubPortOptions',
3963c0bd37dSMarkus Armbruster  'data': {
39718d65d22SThomas Huth    'hubid':     'int32',
39818d65d22SThomas Huth    '*netdev':    'str' } }
3993c0bd37dSMarkus Armbruster
4003c0bd37dSMarkus Armbruster##
4013c0bd37dSMarkus Armbruster# @NetdevNetmapOptions:
4023c0bd37dSMarkus Armbruster#
4033c0bd37dSMarkus Armbruster# Connect a client to a netmap-enabled NIC or to a VALE switch port
4043c0bd37dSMarkus Armbruster#
405a937b6aaSMarkus Armbruster# @ifname: Either the name of an existing network interface supported
406a937b6aaSMarkus Armbruster#     by netmap, or the name of a VALE port (created on the fly).  A
407a937b6aaSMarkus Armbruster#     VALE port name is in the form 'valeXXX:YYY', where XXX and YYY
408a937b6aaSMarkus Armbruster#     are non-negative integers.  XXX identifies a switch and YYY
409a937b6aaSMarkus Armbruster#     identifies a port of the switch.  VALE ports having the same XXX
410a937b6aaSMarkus Armbruster#     are therefore connected to the same switch.
4113c0bd37dSMarkus Armbruster#
4123c0bd37dSMarkus Armbruster# @devname: path of the netmap device (default: '/dev/netmap').
4133c0bd37dSMarkus Armbruster#
4143c0bd37dSMarkus Armbruster# Since: 2.0
4153c0bd37dSMarkus Armbruster##
4163c0bd37dSMarkus Armbruster{ 'struct': 'NetdevNetmapOptions',
4173c0bd37dSMarkus Armbruster  'data': {
4183c0bd37dSMarkus Armbruster    'ifname':     'str',
4193c0bd37dSMarkus Armbruster    '*devname':    'str' } }
4203c0bd37dSMarkus Armbruster
4213c0bd37dSMarkus Armbruster##
422cb039ef3SIlya Maximets# @AFXDPMode:
423cb039ef3SIlya Maximets#
424cb039ef3SIlya Maximets# Attach mode for a default XDP program
425cb039ef3SIlya Maximets#
426cb039ef3SIlya Maximets# @skb: generic mode, no driver support necessary
427cb039ef3SIlya Maximets#
428209e64d9SMarkus Armbruster# @native: DRV mode, program is attached to a driver, packets are
429209e64d9SMarkus Armbruster#     passed to the socket without allocation of skb.
430cb039ef3SIlya Maximets#
431cb039ef3SIlya Maximets# Since: 8.2
432cb039ef3SIlya Maximets##
433cb039ef3SIlya Maximets{ 'enum': 'AFXDPMode',
434cb039ef3SIlya Maximets  'data': [ 'native', 'skb' ],
435cb039ef3SIlya Maximets  'if': 'CONFIG_AF_XDP' }
436cb039ef3SIlya Maximets
437cb039ef3SIlya Maximets##
438cb039ef3SIlya Maximets# @NetdevAFXDPOptions:
439cb039ef3SIlya Maximets#
440cb039ef3SIlya Maximets# AF_XDP network backend
441cb039ef3SIlya Maximets#
442cb039ef3SIlya Maximets# @ifname: The name of an existing network interface.
443cb039ef3SIlya Maximets#
444209e64d9SMarkus Armbruster# @mode: Attach mode for a default XDP program.  If not specified,
445209e64d9SMarkus Armbruster#     then 'native' will be tried first, then 'skb'.
446cb039ef3SIlya Maximets#
447cb039ef3SIlya Maximets# @force-copy: Force XDP copy mode even if device supports zero-copy.
448cb039ef3SIlya Maximets#     (default: false)
449cb039ef3SIlya Maximets#
450209e64d9SMarkus Armbruster# @queues: number of queues to be used for multiqueue interfaces
451209e64d9SMarkus Armbruster#     (default: 1).
452cb039ef3SIlya Maximets#
453209e64d9SMarkus Armbruster# @start-queue: Use @queues starting from this queue number
454209e64d9SMarkus Armbruster#     (default: 0).
455cb039ef3SIlya Maximets#
456209e64d9SMarkus Armbruster# @inhibit: Don't load a default XDP program, use one already loaded
457209e64d9SMarkus Armbruster#     to the interface (default: false).  Requires @sock-fds.
458cb039ef3SIlya Maximets#
459209e64d9SMarkus Armbruster# @sock-fds: A colon (:) separated list of file descriptors for
460209e64d9SMarkus Armbruster#     already open but not bound AF_XDP sockets in the queue order.
461209e64d9SMarkus Armbruster#     One fd per queue.  These descriptors should already be added
462209e64d9SMarkus Armbruster#     into XDP socket map for corresponding queues.  Requires
463209e64d9SMarkus Armbruster#     @inhibit.
464cb039ef3SIlya Maximets#
465cb039ef3SIlya Maximets# Since: 8.2
466cb039ef3SIlya Maximets##
467cb039ef3SIlya Maximets{ 'struct': 'NetdevAFXDPOptions',
468cb039ef3SIlya Maximets  'data': {
469cb039ef3SIlya Maximets    'ifname':       'str',
470cb039ef3SIlya Maximets    '*mode':        'AFXDPMode',
471cb039ef3SIlya Maximets    '*force-copy':  'bool',
472cb039ef3SIlya Maximets    '*queues':      'int',
473cb039ef3SIlya Maximets    '*start-queue': 'int',
474cb039ef3SIlya Maximets    '*inhibit':     'bool',
475cb039ef3SIlya Maximets    '*sock-fds':    'str' },
476cb039ef3SIlya Maximets  'if': 'CONFIG_AF_XDP' }
477cb039ef3SIlya Maximets
478cb039ef3SIlya Maximets##
4793c0bd37dSMarkus Armbruster# @NetdevVhostUserOptions:
4803c0bd37dSMarkus Armbruster#
4813c0bd37dSMarkus Armbruster# Vhost-user network backend
4823c0bd37dSMarkus Armbruster#
4833c0bd37dSMarkus Armbruster# @chardev: name of a unix socket chardev
4843c0bd37dSMarkus Armbruster#
4853c0bd37dSMarkus Armbruster# @vhostforce: vhost on for non-MSIX virtio guests (default: false).
4863c0bd37dSMarkus Armbruster#
4873c0bd37dSMarkus Armbruster# @queues: number of queues to be created for multiqueue vhost-user
4883c0bd37dSMarkus Armbruster#     (default: 1) (Since 2.5)
4893c0bd37dSMarkus Armbruster#
4903c0bd37dSMarkus Armbruster# Since: 2.1
4913c0bd37dSMarkus Armbruster##
4923c0bd37dSMarkus Armbruster{ 'struct': 'NetdevVhostUserOptions',
4933c0bd37dSMarkus Armbruster  'data': {
4943c0bd37dSMarkus Armbruster    'chardev':        'str',
4953c0bd37dSMarkus Armbruster    '*vhostforce':    'bool',
4963c0bd37dSMarkus Armbruster    '*queues':        'int' } }
4973c0bd37dSMarkus Armbruster
4983c0bd37dSMarkus Armbruster##
4991e0a84eaSCindy Lu# @NetdevVhostVDPAOptions:
5001e0a84eaSCindy Lu#
5011e0a84eaSCindy Lu# Vhost-vdpa network backend
5021e0a84eaSCindy Lu#
503a937b6aaSMarkus Armbruster# vDPA device is a device that uses a datapath which complies with the
504a937b6aaSMarkus Armbruster# virtio specifications with a vendor specific control path.
5051e0a84eaSCindy Lu#
506a937b6aaSMarkus Armbruster# @vhostdev: path of vhost-vdpa device (default:'/dev/vhost-vdpa-0')
5071e0a84eaSCindy Lu#
5088801ccd0SSi-Wei Liu# @vhostfd: file descriptor of an already opened vhost vdpa device
5098801ccd0SSi-Wei Liu#
5101e0a84eaSCindy Lu# @queues: number of queues to be created for multiqueue vhost-vdpa
5111e0a84eaSCindy Lu#     (default: 1)
5121e0a84eaSCindy Lu#
513a937b6aaSMarkus Armbruster# @x-svq: Start device with (experimental) shadow virtqueue.  (Since
514a937b6aaSMarkus Armbruster#     7.1) (default: false)
5151576dbb5SEugenio Pérez#
5161576dbb5SEugenio Pérez# Features:
517a937b6aaSMarkus Armbruster#
5181576dbb5SEugenio Pérez# @unstable: Member @x-svq is experimental.
5191576dbb5SEugenio Pérez#
5201e0a84eaSCindy Lu# Since: 5.1
5211e0a84eaSCindy Lu##
5221e0a84eaSCindy Lu{ 'struct': 'NetdevVhostVDPAOptions',
5231e0a84eaSCindy Lu  'data': {
5241e0a84eaSCindy Lu    '*vhostdev':     'str',
5258801ccd0SSi-Wei Liu    '*vhostfd':      'str',
5261576dbb5SEugenio Pérez    '*queues':       'int',
5271576dbb5SEugenio Pérez    '*x-svq':        {'type': 'bool', 'features' : [ 'unstable'] } } }
5281e0a84eaSCindy Lu
5291e0a84eaSCindy Lu##
53081ad2964SVladislav Yaroshchuk# @NetdevVmnetHostOptions:
53181ad2964SVladislav Yaroshchuk#
53281ad2964SVladislav Yaroshchuk# vmnet (host mode) network backend.
53381ad2964SVladislav Yaroshchuk#
53481ad2964SVladislav Yaroshchuk# Allows the vmnet interface to communicate with other vmnet
53581ad2964SVladislav Yaroshchuk# interfaces that are in host mode and also with the host.
53681ad2964SVladislav Yaroshchuk#
53781ad2964SVladislav Yaroshchuk# @start-address: The starting IPv4 address to use for the interface.
538a937b6aaSMarkus Armbruster#     Must be in the private IP range (RFC 1918).  Must be specified
539a937b6aaSMarkus Armbruster#     along with @end-address and @subnet-mask.  This address is used
540a937b6aaSMarkus Armbruster#     as the gateway address.  The subsequent address up to and
541a937b6aaSMarkus Armbruster#     including end-address are placed in the DHCP pool.
54281ad2964SVladislav Yaroshchuk#
54381ad2964SVladislav Yaroshchuk# @end-address: The DHCP IPv4 range end address to use for the
544a937b6aaSMarkus Armbruster#     interface.  Must be in the private IP range (RFC 1918).  Must be
545a937b6aaSMarkus Armbruster#     specified along with @start-address and @subnet-mask.
54681ad2964SVladislav Yaroshchuk#
547a937b6aaSMarkus Armbruster# @subnet-mask: The IPv4 subnet mask to use on the interface.  Must be
548a937b6aaSMarkus Armbruster#     specified along with @start-address and @subnet-mask.
54981ad2964SVladislav Yaroshchuk#
55081ad2964SVladislav Yaroshchuk# @isolated: Enable isolation for this interface.  Interface isolation
551a937b6aaSMarkus Armbruster#     ensures that vmnet interface is not able to communicate with any
552a937b6aaSMarkus Armbruster#     other vmnet interfaces.  Only communication with host is
553a937b6aaSMarkus Armbruster#     allowed.  Requires at least macOS Big Sur 11.0.
55481ad2964SVladislav Yaroshchuk#
55581ad2964SVladislav Yaroshchuk# @net-uuid: The identifier (UUID) to uniquely identify the isolated
556a937b6aaSMarkus Armbruster#     network vmnet interface should be added to.  If set, no DHCP
557a937b6aaSMarkus Armbruster#     service is provided for this interface and network communication
558a937b6aaSMarkus Armbruster#     is allowed only with other interfaces added to this network
559a937b6aaSMarkus Armbruster#     identified by the UUID.  Requires at least macOS Big Sur 11.0.
56081ad2964SVladislav Yaroshchuk#
56181ad2964SVladislav Yaroshchuk# Since: 7.1
56281ad2964SVladislav Yaroshchuk##
56381ad2964SVladislav Yaroshchuk{ 'struct': 'NetdevVmnetHostOptions',
56481ad2964SVladislav Yaroshchuk  'data': {
56581ad2964SVladislav Yaroshchuk    '*start-address': 'str',
56681ad2964SVladislav Yaroshchuk    '*end-address':   'str',
56781ad2964SVladislav Yaroshchuk    '*subnet-mask':   'str',
56881ad2964SVladislav Yaroshchuk    '*isolated':      'bool',
56981ad2964SVladislav Yaroshchuk    '*net-uuid':      'str' },
57081ad2964SVladislav Yaroshchuk  'if': 'CONFIG_VMNET' }
57181ad2964SVladislav Yaroshchuk
57281ad2964SVladislav Yaroshchuk##
57381ad2964SVladislav Yaroshchuk# @NetdevVmnetSharedOptions:
57481ad2964SVladislav Yaroshchuk#
57581ad2964SVladislav Yaroshchuk# vmnet (shared mode) network backend.
57681ad2964SVladislav Yaroshchuk#
57781ad2964SVladislav Yaroshchuk# Allows traffic originating from the vmnet interface to reach the
578a937b6aaSMarkus Armbruster# Internet through a network address translator (NAT).  The vmnet
579a937b6aaSMarkus Armbruster# interface can communicate with the host and with other shared mode
580a937b6aaSMarkus Armbruster# interfaces on the same subnet.  If no DHCP settings, subnet mask and
581a937b6aaSMarkus Armbruster# IPv6 prefix specified, the interface can communicate with any of
582a937b6aaSMarkus Armbruster# other interfaces in shared mode.
58381ad2964SVladislav Yaroshchuk#
58481ad2964SVladislav Yaroshchuk# @start-address: The starting IPv4 address to use for the interface.
585a937b6aaSMarkus Armbruster#     Must be in the private IP range (RFC 1918).  Must be specified
586a937b6aaSMarkus Armbruster#     along with @end-address and @subnet-mask.  This address is used
587a937b6aaSMarkus Armbruster#     as the gateway address.  The subsequent address up to and
588a937b6aaSMarkus Armbruster#     including end-address are placed in the DHCP pool.
58981ad2964SVladislav Yaroshchuk#
59081ad2964SVladislav Yaroshchuk# @end-address: The DHCP IPv4 range end address to use for the
591a937b6aaSMarkus Armbruster#     interface.  Must be in the private IP range (RFC 1918).  Must be
592a937b6aaSMarkus Armbruster#     specified along with @start-address and @subnet-mask.
59381ad2964SVladislav Yaroshchuk#
594a937b6aaSMarkus Armbruster# @subnet-mask: The IPv4 subnet mask to use on the interface.  Must be
595a937b6aaSMarkus Armbruster#     specified along with @start-address and @subnet-mask.
59681ad2964SVladislav Yaroshchuk#
59781ad2964SVladislav Yaroshchuk# @isolated: Enable isolation for this interface.  Interface isolation
598a937b6aaSMarkus Armbruster#     ensures that vmnet interface is not able to communicate with any
599a937b6aaSMarkus Armbruster#     other vmnet interfaces.  Only communication with host is
600a937b6aaSMarkus Armbruster#     allowed.  Requires at least macOS Big Sur 11.0.
60181ad2964SVladislav Yaroshchuk#
60281ad2964SVladislav Yaroshchuk# @nat66-prefix: The IPv6 prefix to use into guest network.  Must be a
603a937b6aaSMarkus Armbruster#     unique local address i.e. start with fd00::/8 and have length of
604a937b6aaSMarkus Armbruster#     64.
60581ad2964SVladislav Yaroshchuk#
60681ad2964SVladislav Yaroshchuk# Since: 7.1
60781ad2964SVladislav Yaroshchuk##
60881ad2964SVladislav Yaroshchuk{ 'struct': 'NetdevVmnetSharedOptions',
60981ad2964SVladislav Yaroshchuk  'data': {
61081ad2964SVladislav Yaroshchuk    '*start-address': 'str',
61181ad2964SVladislav Yaroshchuk    '*end-address':   'str',
61281ad2964SVladislav Yaroshchuk    '*subnet-mask':   'str',
61381ad2964SVladislav Yaroshchuk    '*isolated':      'bool',
61481ad2964SVladislav Yaroshchuk    '*nat66-prefix':  'str' },
61581ad2964SVladislav Yaroshchuk  'if': 'CONFIG_VMNET' }
61681ad2964SVladislav Yaroshchuk
61781ad2964SVladislav Yaroshchuk##
61881ad2964SVladislav Yaroshchuk# @NetdevVmnetBridgedOptions:
61981ad2964SVladislav Yaroshchuk#
62081ad2964SVladislav Yaroshchuk# vmnet (bridged mode) network backend.
62181ad2964SVladislav Yaroshchuk#
62281ad2964SVladislav Yaroshchuk# Bridges the vmnet interface with a physical network interface.
62381ad2964SVladislav Yaroshchuk#
62481ad2964SVladislav Yaroshchuk# @ifname: The name of the physical interface to be bridged.
62581ad2964SVladislav Yaroshchuk#
62681ad2964SVladislav Yaroshchuk# @isolated: Enable isolation for this interface.  Interface isolation
627a937b6aaSMarkus Armbruster#     ensures that vmnet interface is not able to communicate with any
628a937b6aaSMarkus Armbruster#     other vmnet interfaces.  Only communication with host is
629a937b6aaSMarkus Armbruster#     allowed.  Requires at least macOS Big Sur 11.0.
63081ad2964SVladislav Yaroshchuk#
63181ad2964SVladislav Yaroshchuk# Since: 7.1
63281ad2964SVladislav Yaroshchuk##
63381ad2964SVladislav Yaroshchuk{ 'struct': 'NetdevVmnetBridgedOptions',
63481ad2964SVladislav Yaroshchuk  'data': {
63581ad2964SVladislav Yaroshchuk    'ifname':     'str',
63681ad2964SVladislav Yaroshchuk    '*isolated':  'bool' },
63781ad2964SVladislav Yaroshchuk  'if': 'CONFIG_VMNET' }
63881ad2964SVladislav Yaroshchuk
63981ad2964SVladislav Yaroshchuk##
6405166fe0aSLaurent Vivier# @NetdevStreamOptions:
6415166fe0aSLaurent Vivier#
6425166fe0aSLaurent Vivier# Configuration info for stream socket netdev
6435166fe0aSLaurent Vivier#
644a937b6aaSMarkus Armbruster# @addr: socket address to listen on (server=true) or connect to
645a937b6aaSMarkus Armbruster#     (server=false)
646a937b6aaSMarkus Armbruster#
6475166fe0aSLaurent Vivier# @server: create server socket (default: false)
648a937b6aaSMarkus Armbruster#
649a937b6aaSMarkus Armbruster# @reconnect: For a client socket, if a socket is disconnected, then
650a937b6aaSMarkus Armbruster#     attempt a reconnect after the given number of seconds.  Setting
651a937b6aaSMarkus Armbruster#     this to zero disables this function.  (default: 0) (since 8.0)
6525166fe0aSLaurent Vivier#
653*c40e962dSDaniil Tatianin# @reconnect-ms: For a client socket, if a socket is disconnected, then
654*c40e962dSDaniil Tatianin#     attempt a reconnect after the given number of milliseconds.  Setting
655*c40e962dSDaniil Tatianin#     this to zero disables this function.  This member is mutually
656*c40e962dSDaniil Tatianin#     exclusive with @reconnect.  (default: 0) (Since: 9.2)
657*c40e962dSDaniil Tatianin#
65813c6be96SLaurent Vivier# Only SocketAddress types 'unix', 'inet' and 'fd' are supported.
6595166fe0aSLaurent Vivier#
660*c40e962dSDaniil Tatianin# Features:
661*c40e962dSDaniil Tatianin#
662*c40e962dSDaniil Tatianin# @deprecated: Member @reconnect is deprecated.  Use @reconnect-ms
663*c40e962dSDaniil Tatianin#     instead.
664*c40e962dSDaniil Tatianin#
6655166fe0aSLaurent Vivier# Since: 7.2
6665166fe0aSLaurent Vivier##
6675166fe0aSLaurent Vivier{ 'struct': 'NetdevStreamOptions',
6685166fe0aSLaurent Vivier  'data': {
6695166fe0aSLaurent Vivier    'addr':   'SocketAddress',
670148fbf0dSLaurent Vivier    '*server': 'bool',
671*c40e962dSDaniil Tatianin    '*reconnect': { 'type': 'int', 'features': [ 'deprecated' ] },
672*c40e962dSDaniil Tatianin    '*reconnect-ms': 'int' } }
6735166fe0aSLaurent Vivier
6745166fe0aSLaurent Vivier##
6755166fe0aSLaurent Vivier# @NetdevDgramOptions:
6765166fe0aSLaurent Vivier#
6775166fe0aSLaurent Vivier# Configuration info for datagram socket netdev.
6785166fe0aSLaurent Vivier#
6795166fe0aSLaurent Vivier# @remote: remote address
680a937b6aaSMarkus Armbruster#
6815166fe0aSLaurent Vivier# @local: local address
6825166fe0aSLaurent Vivier#
683784e7a25SLaurent Vivier# Only SocketAddress types 'unix', 'inet' and 'fd' are supported.
6845166fe0aSLaurent Vivier#
685a937b6aaSMarkus Armbruster# If remote address is present and it's a multicast address, local
686a937b6aaSMarkus Armbruster# address is optional.  Otherwise local address is required and remote
687a937b6aaSMarkus Armbruster# address is optional.
6885166fe0aSLaurent Vivier#
6895166fe0aSLaurent Vivier# .. table:: Valid parameters combination table
6905166fe0aSLaurent Vivier#    :widths: auto
6915166fe0aSLaurent Vivier#
6925166fe0aSLaurent Vivier#    =============  ========  =====
6935166fe0aSLaurent Vivier#    remote         local     okay?
6945166fe0aSLaurent Vivier#    =============  ========  =====
6955166fe0aSLaurent Vivier#    absent         absent    no
6965166fe0aSLaurent Vivier#    absent         not fd    no
6975166fe0aSLaurent Vivier#    absent         fd        yes
6985166fe0aSLaurent Vivier#    multicast      absent    yes
6995166fe0aSLaurent Vivier#    multicast      present   yes
7005166fe0aSLaurent Vivier#    not multicast  absent    no
7015166fe0aSLaurent Vivier#    not multicast  present   yes
7025166fe0aSLaurent Vivier#    =============  ========  =====
7035166fe0aSLaurent Vivier#
7045166fe0aSLaurent Vivier# Since: 7.2
7055166fe0aSLaurent Vivier##
7065166fe0aSLaurent Vivier{ 'struct': 'NetdevDgramOptions',
7075166fe0aSLaurent Vivier  'data': {
7085166fe0aSLaurent Vivier    '*local':  'SocketAddress',
7095166fe0aSLaurent Vivier    '*remote': 'SocketAddress' } }
7105166fe0aSLaurent Vivier
7115166fe0aSLaurent Vivier##
7123c0bd37dSMarkus Armbruster# @NetClientDriver:
7133c0bd37dSMarkus Armbruster#
7143c0bd37dSMarkus Armbruster# Available netdev drivers.
7153c0bd37dSMarkus Armbruster#
71686bf13aeSMarkus Armbruster# @l2tpv3: since 2.1
71701bed0ffSMarkus Armbruster#
71886bf13aeSMarkus Armbruster# @vhost-vdpa: since 5.1
71901bed0ffSMarkus Armbruster#
72086bf13aeSMarkus Armbruster# @vmnet-host: since 7.1
72101bed0ffSMarkus Armbruster#
72286bf13aeSMarkus Armbruster# @vmnet-shared: since 7.1
72301bed0ffSMarkus Armbruster#
72486bf13aeSMarkus Armbruster# @vmnet-bridged: since 7.1
72501bed0ffSMarkus Armbruster#
72686bf13aeSMarkus Armbruster# @stream: since 7.2
72701bed0ffSMarkus Armbruster#
72886bf13aeSMarkus Armbruster# @dgram: since 7.2
72901bed0ffSMarkus Armbruster#
730cb039ef3SIlya Maximets# @af-xdp: since 8.2
7311e0a84eaSCindy Lu#
73286bf13aeSMarkus Armbruster# Since: 2.7
7333c0bd37dSMarkus Armbruster##
7343c0bd37dSMarkus Armbruster{ 'enum': 'NetClientDriver',
7355166fe0aSLaurent Vivier  'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'stream',
7365166fe0aSLaurent Vivier            'dgram', 'vde', 'bridge', 'hubport', 'netmap', 'vhost-user',
7375166fe0aSLaurent Vivier            'vhost-vdpa',
738cb039ef3SIlya Maximets            { 'name': 'af-xdp', 'if': 'CONFIG_AF_XDP' },
73981ad2964SVladislav Yaroshchuk            { 'name': 'vmnet-host', 'if': 'CONFIG_VMNET' },
74081ad2964SVladislav Yaroshchuk            { 'name': 'vmnet-shared', 'if': 'CONFIG_VMNET' },
74181ad2964SVladislav Yaroshchuk            { 'name': 'vmnet-bridged', 'if': 'CONFIG_VMNET' }] }
7423c0bd37dSMarkus Armbruster
7433c0bd37dSMarkus Armbruster##
7443c0bd37dSMarkus Armbruster# @Netdev:
7453c0bd37dSMarkus Armbruster#
7463c0bd37dSMarkus Armbruster# Captures the configuration of a network device.
7473c0bd37dSMarkus Armbruster#
7483c0bd37dSMarkus Armbruster# @id: identifier for monitor commands.
7493c0bd37dSMarkus Armbruster#
7503c0bd37dSMarkus Armbruster# @type: Specify the driver used for interpreting remaining arguments.
7513c0bd37dSMarkus Armbruster#
7523c0bd37dSMarkus Armbruster# Since: 1.2
7533c0bd37dSMarkus Armbruster##
7543c0bd37dSMarkus Armbruster{ 'union': 'Netdev',
7553c0bd37dSMarkus Armbruster  'base': { 'id': 'str', 'type': 'NetClientDriver' },
7563c0bd37dSMarkus Armbruster  'discriminator': 'type',
7573c0bd37dSMarkus Armbruster  'data': {
7583c0bd37dSMarkus Armbruster    'nic':      'NetLegacyNicOptions',
7593c0bd37dSMarkus Armbruster    'user':     'NetdevUserOptions',
7603c0bd37dSMarkus Armbruster    'tap':      'NetdevTapOptions',
7613c0bd37dSMarkus Armbruster    'l2tpv3':   'NetdevL2TPv3Options',
7623c0bd37dSMarkus Armbruster    'socket':   'NetdevSocketOptions',
7635166fe0aSLaurent Vivier    'stream':   'NetdevStreamOptions',
7645166fe0aSLaurent Vivier    'dgram':    'NetdevDgramOptions',
7653c0bd37dSMarkus Armbruster    'vde':      'NetdevVdeOptions',
7663c0bd37dSMarkus Armbruster    'bridge':   'NetdevBridgeOptions',
7673c0bd37dSMarkus Armbruster    'hubport':  'NetdevHubPortOptions',
7683c0bd37dSMarkus Armbruster    'netmap':   'NetdevNetmapOptions',
769cb039ef3SIlya Maximets    'af-xdp':   { 'type': 'NetdevAFXDPOptions',
770cb039ef3SIlya Maximets                  'if': 'CONFIG_AF_XDP' },
7711e0a84eaSCindy Lu    'vhost-user': 'NetdevVhostUserOptions',
77281ad2964SVladislav Yaroshchuk    'vhost-vdpa': 'NetdevVhostVDPAOptions',
77381ad2964SVladislav Yaroshchuk    'vmnet-host': { 'type': 'NetdevVmnetHostOptions',
77481ad2964SVladislav Yaroshchuk                    'if': 'CONFIG_VMNET' },
77581ad2964SVladislav Yaroshchuk    'vmnet-shared': { 'type': 'NetdevVmnetSharedOptions',
77681ad2964SVladislav Yaroshchuk                      'if': 'CONFIG_VMNET' },
77781ad2964SVladislav Yaroshchuk    'vmnet-bridged': { 'type': 'NetdevVmnetBridgedOptions',
77881ad2964SVladislav Yaroshchuk                       'if': 'CONFIG_VMNET' } } }
7793c0bd37dSMarkus Armbruster
7803c0bd37dSMarkus Armbruster##
7813c0bd37dSMarkus Armbruster# @RxState:
7823c0bd37dSMarkus Armbruster#
7833c0bd37dSMarkus Armbruster# Packets receiving state
7843c0bd37dSMarkus Armbruster#
7853c0bd37dSMarkus Armbruster# @normal: filter assigned packets according to the mac-table
7863c0bd37dSMarkus Armbruster#
7873c0bd37dSMarkus Armbruster# @none: don't receive any assigned packet
7883c0bd37dSMarkus Armbruster#
7893c0bd37dSMarkus Armbruster# @all: receive all assigned packets
7903c0bd37dSMarkus Armbruster#
7913c0bd37dSMarkus Armbruster# Since: 1.6
7923c0bd37dSMarkus Armbruster##
7933c0bd37dSMarkus Armbruster{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] }
7943c0bd37dSMarkus Armbruster
7953c0bd37dSMarkus Armbruster##
7963c0bd37dSMarkus Armbruster# @RxFilterInfo:
7973c0bd37dSMarkus Armbruster#
7983c0bd37dSMarkus Armbruster# Rx-filter information for a NIC.
7993c0bd37dSMarkus Armbruster#
8003c0bd37dSMarkus Armbruster# @name: net client name
8013c0bd37dSMarkus Armbruster#
8023c0bd37dSMarkus Armbruster# @promiscuous: whether promiscuous mode is enabled
8033c0bd37dSMarkus Armbruster#
8043c0bd37dSMarkus Armbruster# @multicast: multicast receive state
8053c0bd37dSMarkus Armbruster#
8063c0bd37dSMarkus Armbruster# @unicast: unicast receive state
8073c0bd37dSMarkus Armbruster#
8083c0bd37dSMarkus Armbruster# @vlan: vlan receive state (Since 2.0)
8093c0bd37dSMarkus Armbruster#
8103c0bd37dSMarkus Armbruster# @broadcast-allowed: whether to receive broadcast
8113c0bd37dSMarkus Armbruster#
8123c0bd37dSMarkus Armbruster# @multicast-overflow: multicast table is overflowed or not
8133c0bd37dSMarkus Armbruster#
8143c0bd37dSMarkus Armbruster# @unicast-overflow: unicast table is overflowed or not
8153c0bd37dSMarkus Armbruster#
8163c0bd37dSMarkus Armbruster# @main-mac: the main macaddr string
8173c0bd37dSMarkus Armbruster#
8183c0bd37dSMarkus Armbruster# @vlan-table: a list of active vlan id
8193c0bd37dSMarkus Armbruster#
8203c0bd37dSMarkus Armbruster# @unicast-table: a list of unicast macaddr string
8213c0bd37dSMarkus Armbruster#
8223c0bd37dSMarkus Armbruster# @multicast-table: a list of multicast macaddr string
8233c0bd37dSMarkus Armbruster#
8243c0bd37dSMarkus Armbruster# Since: 1.6
8253c0bd37dSMarkus Armbruster##
8263c0bd37dSMarkus Armbruster{ 'struct': 'RxFilterInfo',
8273c0bd37dSMarkus Armbruster  'data': {
8283c0bd37dSMarkus Armbruster    'name':               'str',
8293c0bd37dSMarkus Armbruster    'promiscuous':        'bool',
8303c0bd37dSMarkus Armbruster    'multicast':          'RxState',
8313c0bd37dSMarkus Armbruster    'unicast':            'RxState',
8323c0bd37dSMarkus Armbruster    'vlan':               'RxState',
8333c0bd37dSMarkus Armbruster    'broadcast-allowed':  'bool',
8343c0bd37dSMarkus Armbruster    'multicast-overflow': 'bool',
8353c0bd37dSMarkus Armbruster    'unicast-overflow':   'bool',
8363c0bd37dSMarkus Armbruster    'main-mac':           'str',
8373c0bd37dSMarkus Armbruster    'vlan-table':         ['int'],
8383c0bd37dSMarkus Armbruster    'unicast-table':      ['str'],
8393c0bd37dSMarkus Armbruster    'multicast-table':    ['str'] }}
8403c0bd37dSMarkus Armbruster
8413c0bd37dSMarkus Armbruster##
8423c0bd37dSMarkus Armbruster# @query-rx-filter:
8433c0bd37dSMarkus Armbruster#
8443c0bd37dSMarkus Armbruster# Return rx-filter information for all NICs (or for the given NIC).
8453c0bd37dSMarkus Armbruster#
8463c0bd37dSMarkus Armbruster# @name: net client name
8473c0bd37dSMarkus Armbruster#
8483c0bd37dSMarkus Armbruster# Returns: list of @RxFilterInfo for all NICs (or for the given NIC).
8492746f060SMarkus Armbruster#
8502746f060SMarkus Armbruster# Errors:
8512746f060SMarkus Armbruster#     - if the given @name doesn't exist
8522746f060SMarkus Armbruster#     - if the given NIC doesn't support rx-filter querying
8532746f060SMarkus Armbruster#     - if the given net client isn't a NIC
8543c0bd37dSMarkus Armbruster#
8553c0bd37dSMarkus Armbruster# Since: 1.6
8563c0bd37dSMarkus Armbruster#
85714b48aaaSJohn Snow# .. qmp-example::
8583c0bd37dSMarkus Armbruster#
8593c0bd37dSMarkus Armbruster#     -> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } }
8603c0bd37dSMarkus Armbruster#     <- { "return": [
8613c0bd37dSMarkus Armbruster#             {
8623c0bd37dSMarkus Armbruster#                 "promiscuous": true,
8633c0bd37dSMarkus Armbruster#                 "name": "vnet0",
8643c0bd37dSMarkus Armbruster#                 "main-mac": "52:54:00:12:34:56",
8653c0bd37dSMarkus Armbruster#                 "unicast": "normal",
8663c0bd37dSMarkus Armbruster#                 "vlan": "normal",
8673c0bd37dSMarkus Armbruster#                 "vlan-table": [
8683c0bd37dSMarkus Armbruster#                     4,
8693c0bd37dSMarkus Armbruster#                     0
8703c0bd37dSMarkus Armbruster#                 ],
8713c0bd37dSMarkus Armbruster#                 "unicast-table": [
8723c0bd37dSMarkus Armbruster#                 ],
8733c0bd37dSMarkus Armbruster#                 "multicast": "normal",
8743c0bd37dSMarkus Armbruster#                 "multicast-overflow": false,
8753c0bd37dSMarkus Armbruster#                 "unicast-overflow": false,
8763c0bd37dSMarkus Armbruster#                 "multicast-table": [
8773c0bd37dSMarkus Armbruster#                     "01:00:5e:00:00:01",
8783c0bd37dSMarkus Armbruster#                     "33:33:00:00:00:01",
8793c0bd37dSMarkus Armbruster#                     "33:33:ff:12:34:56"
8803c0bd37dSMarkus Armbruster#                 ],
8813c0bd37dSMarkus Armbruster#                 "broadcast-allowed": false
8823c0bd37dSMarkus Armbruster#             }
8833c0bd37dSMarkus Armbruster#           ]
8843c0bd37dSMarkus Armbruster#        }
8853c0bd37dSMarkus Armbruster##
886b0ddeba2SMarc-André Lureau{ 'command': 'query-rx-filter',
887b0ddeba2SMarc-André Lureau  'data': { '*name': 'str' },
8883c0bd37dSMarkus Armbruster  'returns': ['RxFilterInfo'] }
8893c0bd37dSMarkus Armbruster
8903c0bd37dSMarkus Armbruster##
8913c0bd37dSMarkus Armbruster# @NIC_RX_FILTER_CHANGED:
8923c0bd37dSMarkus Armbruster#
893a937b6aaSMarkus Armbruster# Emitted once until the 'query-rx-filter' command is executed, the
894a937b6aaSMarkus Armbruster# first event will always be emitted
8953c0bd37dSMarkus Armbruster#
8963c0bd37dSMarkus Armbruster# @name: net client name
8973c0bd37dSMarkus Armbruster#
8983c0bd37dSMarkus Armbruster# @path: device path
8993c0bd37dSMarkus Armbruster#
9003c0bd37dSMarkus Armbruster# Since: 1.6
9013c0bd37dSMarkus Armbruster#
90214b48aaaSJohn Snow# .. qmp-example::
9033c0bd37dSMarkus Armbruster#
9043c0bd37dSMarkus Armbruster#     <- { "event": "NIC_RX_FILTER_CHANGED",
9053c0bd37dSMarkus Armbruster#          "data": { "name": "vnet0",
9063c0bd37dSMarkus Armbruster#                    "path": "/machine/peripheral/vnet0/virtio-backend" },
9073c0bd37dSMarkus Armbruster#          "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
9083c0bd37dSMarkus Armbruster##
9093c0bd37dSMarkus Armbruster{ 'event': 'NIC_RX_FILTER_CHANGED',
9103c0bd37dSMarkus Armbruster  'data': { '*name': 'str', 'path': 'str' } }
91150510ea2SDr. David Alan Gilbert
91250510ea2SDr. David Alan Gilbert##
91350510ea2SDr. David Alan Gilbert# @AnnounceParameters:
91450510ea2SDr. David Alan Gilbert#
91550510ea2SDr. David Alan Gilbert# Parameters for self-announce timers
91650510ea2SDr. David Alan Gilbert#
91750510ea2SDr. David Alan Gilbert# @initial: Initial delay (in ms) before sending the first GARP/RARP
91850510ea2SDr. David Alan Gilbert#     announcement
91950510ea2SDr. David Alan Gilbert#
92050510ea2SDr. David Alan Gilbert# @max: Maximum delay (in ms) between GARP/RARP announcement packets
92150510ea2SDr. David Alan Gilbert#
92250510ea2SDr. David Alan Gilbert# @rounds: Number of self-announcement attempts
92350510ea2SDr. David Alan Gilbert#
92450510ea2SDr. David Alan Gilbert# @step: Delay increase (in ms) after each self-announcement attempt
92550510ea2SDr. David Alan Gilbert#
926a937b6aaSMarkus Armbruster# @interfaces: An optional list of interface names, which restricts
927a937b6aaSMarkus Armbruster#     the announcement to the listed interfaces.  (Since 4.1)
928ef2fdbfbSDr. David Alan Gilbert#
929944458b6SDr. David Alan Gilbert# @id: A name to be used to identify an instance of announce-timers
930a937b6aaSMarkus Armbruster#     and to allow it to modified later.  Not for use as part of the
931a937b6aaSMarkus Armbruster#     migration parameters.  (Since 4.1)
932944458b6SDr. David Alan Gilbert#
93350510ea2SDr. David Alan Gilbert# Since: 4.0
93450510ea2SDr. David Alan Gilbert##
93550510ea2SDr. David Alan Gilbert
93650510ea2SDr. David Alan Gilbert{ 'struct': 'AnnounceParameters',
93750510ea2SDr. David Alan Gilbert  'data': { 'initial': 'int',
93850510ea2SDr. David Alan Gilbert            'max': 'int',
93950510ea2SDr. David Alan Gilbert            'rounds': 'int',
940ef2fdbfbSDr. David Alan Gilbert            'step': 'int',
941944458b6SDr. David Alan Gilbert            '*interfaces': ['str'],
942944458b6SDr. David Alan Gilbert            '*id' : 'str' } }
943a06cd488SDr. David Alan Gilbert
944a06cd488SDr. David Alan Gilbert##
945a06cd488SDr. David Alan Gilbert# @announce-self:
946a06cd488SDr. David Alan Gilbert#
947a937b6aaSMarkus Armbruster# Trigger generation of broadcast RARP frames to update network
948a937b6aaSMarkus Armbruster# switches.  This can be useful when network bonds fail-over the
949a937b6aaSMarkus Armbruster# active slave.
950a06cd488SDr. David Alan Gilbert#
95114b48aaaSJohn Snow# TODO: This line is a hack to separate the example from the body
95214b48aaaSJohn Snow#
95314b48aaaSJohn Snow# .. qmp-example::
954a06cd488SDr. David Alan Gilbert#
955ef2fdbfbSDr. David Alan Gilbert#     -> { "execute": "announce-self",
956a06cd488SDr. David Alan Gilbert#          "arguments": {
957ef2fdbfbSDr. David Alan Gilbert#              "initial": 50, "max": 550, "rounds": 10, "step": 50,
958944458b6SDr. David Alan Gilbert#              "interfaces": ["vn2", "vn3"], "id": "bob" } }
959a06cd488SDr. David Alan Gilbert#     <- { "return": {} }
960a06cd488SDr. David Alan Gilbert#
961a06cd488SDr. David Alan Gilbert# Since: 4.0
962a06cd488SDr. David Alan Gilbert##
963a06cd488SDr. David Alan Gilbert{ 'command': 'announce-self', 'boxed': true,
964a06cd488SDr. David Alan Gilbert  'data' : 'AnnounceParameters'}
96570d04971SJens Freimann
96670d04971SJens Freimann##
96770d04971SJens Freimann# @FAILOVER_NEGOTIATED:
96870d04971SJens Freimann#
969a937b6aaSMarkus Armbruster# Emitted when VIRTIO_NET_F_STANDBY was enabled during feature
970a937b6aaSMarkus Armbruster# negotiation.  Failover primary devices which were hidden (not
971a937b6aaSMarkus Armbruster# hotplugged when requested) before will now be hotplugged by the
972a937b6aaSMarkus Armbruster# virtio-net standby device.
97370d04971SJens Freimann#
974121c25b0SVictor Toso# @device-id: QEMU device id of the unplugged device
975121c25b0SVictor Toso#
97670d04971SJens Freimann# Since: 4.2
97770d04971SJens Freimann#
97814b48aaaSJohn Snow# .. qmp-example::
97970d04971SJens Freimann#
98070d04971SJens Freimann#     <- { "event": "FAILOVER_NEGOTIATED",
981121c25b0SVictor Toso#          "data": { "device-id": "net1" },
982121c25b0SVictor Toso#          "timestamp": { "seconds": 1368697518, "microseconds": 326866 } }
98370d04971SJens Freimann##
98470d04971SJens Freimann{ 'event': 'FAILOVER_NEGOTIATED',
98570d04971SJens Freimann  'data': {'device-id': 'str'} }
986e506fee8SLaurent Vivier
987e506fee8SLaurent Vivier##
988e506fee8SLaurent Vivier# @NETDEV_STREAM_CONNECTED:
989e506fee8SLaurent Vivier#
990e506fee8SLaurent Vivier# Emitted when the netdev stream backend is connected
991e506fee8SLaurent Vivier#
992e506fee8SLaurent Vivier# @netdev-id: QEMU netdev id that is connected
993a937b6aaSMarkus Armbruster#
994e506fee8SLaurent Vivier# @addr: The destination address
995e506fee8SLaurent Vivier#
996e506fee8SLaurent Vivier# Since: 7.2
997e506fee8SLaurent Vivier#
99814b48aaaSJohn Snow# .. qmp-example::
999e506fee8SLaurent Vivier#
1000e506fee8SLaurent Vivier#     <- { "event": "NETDEV_STREAM_CONNECTED",
1001e506fee8SLaurent Vivier#          "data": { "netdev-id": "netdev0",
1002e506fee8SLaurent Vivier#                    "addr": { "port": "47666", "ipv6": true,
1003e506fee8SLaurent Vivier#                              "host": "::1", "type": "inet" } },
1004e506fee8SLaurent Vivier#          "timestamp": { "seconds": 1666269863, "microseconds": 311222 } }
1005e506fee8SLaurent Vivier#
100614b48aaaSJohn Snow# .. qmp-example::
100714b48aaaSJohn Snow#
1008e506fee8SLaurent Vivier#     <- { "event": "NETDEV_STREAM_CONNECTED",
1009e506fee8SLaurent Vivier#          "data": { "netdev-id": "netdev0",
1010e506fee8SLaurent Vivier#                    "addr": { "path": "/tmp/qemu0", "type": "unix" } },
1011e506fee8SLaurent Vivier#          "timestamp": { "seconds": 1666269706, "microseconds": 413651 } }
1012e506fee8SLaurent Vivier##
1013e506fee8SLaurent Vivier{ 'event': 'NETDEV_STREAM_CONNECTED',
1014e506fee8SLaurent Vivier  'data': { 'netdev-id': 'str',
1015e506fee8SLaurent Vivier            'addr': 'SocketAddress' } }
1016e506fee8SLaurent Vivier
1017e506fee8SLaurent Vivier##
1018e506fee8SLaurent Vivier# @NETDEV_STREAM_DISCONNECTED:
1019e506fee8SLaurent Vivier#
1020e506fee8SLaurent Vivier# Emitted when the netdev stream backend is disconnected
1021e506fee8SLaurent Vivier#
1022e506fee8SLaurent Vivier# @netdev-id: QEMU netdev id that is disconnected
1023e506fee8SLaurent Vivier#
1024e506fee8SLaurent Vivier# Since: 7.2
1025e506fee8SLaurent Vivier#
102614b48aaaSJohn Snow# .. qmp-example::
1027e506fee8SLaurent Vivier#
10289f2b8488SJohn Snow#     <- { "event": "NETDEV_STREAM_DISCONNECTED",
10299f2b8488SJohn Snow#          "data": {"netdev-id": "netdev0"},
10309f2b8488SJohn Snow#          "timestamp": {"seconds": 1663330937, "microseconds": 526695} }
1031e506fee8SLaurent Vivier##
1032e506fee8SLaurent Vivier{ 'event': 'NETDEV_STREAM_DISCONNECTED',
1033e506fee8SLaurent Vivier  'data': { 'netdev-id': 'str' } }
1034