1# -*- Mode: Python -*- 2# vim: filetype=python 3# 4 5## 6# = Net devices 7## 8 9{ 'include': 'common.json' } 10 11## 12# @set_link: 13# 14# Sets the link status of a virtual network adapter. 15# 16# @name: the device name of the virtual network adapter 17# 18# @up: true to set the link status to be up 19# 20# Returns: Nothing on success 21# If @name is not a valid network device, DeviceNotFound 22# 23# Since: 0.14 24# 25# Notes: Not all network adapters support setting link status. This command 26# will succeed even if the network adapter does not support link status 27# notification. 28# 29# Example: 30# 31# -> { "execute": "set_link", 32# "arguments": { "name": "e1000.0", "up": false } } 33# <- { "return": {} } 34# 35## 36{ 'command': 'set_link', 'data': {'name': 'str', 'up': 'bool'} } 37 38## 39# @netdev_add: 40# 41# Add a network backend. 42# 43# Additional arguments depend on the type. 44# 45# Since: 0.14 46# 47# Returns: Nothing on success 48# If @type is not a valid network backend, DeviceNotFound 49# 50# Example: 51# 52# -> { "execute": "netdev_add", 53# "arguments": { "type": "user", "id": "netdev1", 54# "dnssearch": [ { "str": "example.org" } ] } } 55# <- { "return": {} } 56# 57## 58{ 'command': 'netdev_add', 'data': 'Netdev', 'boxed': true, 59 'allow-preconfig': true } 60 61## 62# @netdev_del: 63# 64# Remove a network backend. 65# 66# @id: the name of the network backend to remove 67# 68# Returns: Nothing on success 69# If @id is not a valid network backend, DeviceNotFound 70# 71# Since: 0.14 72# 73# Example: 74# 75# -> { "execute": "netdev_del", "arguments": { "id": "netdev1" } } 76# <- { "return": {} } 77# 78## 79{ 'command': 'netdev_del', 'data': {'id': 'str'}, 80 'allow-preconfig': true } 81 82## 83# @NetLegacyNicOptions: 84# 85# Create a new Network Interface Card. 86# 87# @netdev: id of -netdev to connect to 88# 89# @macaddr: MAC address 90# 91# @model: device model (e1000, rtl8139, virtio etc.) 92# 93# @addr: PCI device address 94# 95# @vectors: number of MSI-x vectors, 0 to disable MSI-X 96# 97# Since: 1.2 98## 99{ 'struct': 'NetLegacyNicOptions', 100 'data': { 101 '*netdev': 'str', 102 '*macaddr': 'str', 103 '*model': 'str', 104 '*addr': 'str', 105 '*vectors': 'uint32' } } 106 107## 108# @NetdevUserOptions: 109# 110# Use the user mode network stack which requires no administrator privilege to 111# run. 112# 113# @hostname: client hostname reported by the builtin DHCP server 114# 115# @restrict: isolate the guest from the host 116# 117# @ipv4: whether to support IPv4, default true for enabled 118# (since 2.6) 119# 120# @ipv6: whether to support IPv6, default true for enabled 121# (since 2.6) 122# 123# @ip: legacy parameter, use net= instead 124# 125# @net: IP network address that the guest will see, in the 126# form addr[/netmask] The netmask is optional, and can be 127# either in the form a.b.c.d or as a number of valid top-most 128# bits. Default is 10.0.2.0/24. 129# 130# @host: guest-visible address of the host 131# 132# @tftp: root directory of the built-in TFTP server 133# 134# @bootfile: BOOTP filename, for use with tftp= 135# 136# @dhcpstart: the first of the 16 IPs the built-in DHCP server can 137# assign 138# 139# @dns: guest-visible address of the virtual nameserver 140# 141# @dnssearch: list of DNS suffixes to search, passed as DHCP option 142# to the guest 143# 144# @domainname: guest-visible domain name of the virtual nameserver 145# (since 3.0) 146# 147# @ipv6-prefix: IPv6 network prefix (default is fec0::) (since 148# 2.6). The network prefix is given in the usual 149# hexadecimal IPv6 address notation. 150# 151# @ipv6-prefixlen: IPv6 network prefix length (default is 64) 152# (since 2.6) 153# 154# @ipv6-host: guest-visible IPv6 address of the host (since 2.6) 155# 156# @ipv6-dns: guest-visible IPv6 address of the virtual 157# nameserver (since 2.6) 158# 159# @smb: root directory of the built-in SMB server 160# 161# @smbserver: IP address of the built-in SMB server 162# 163# @hostfwd: redirect incoming TCP or UDP host connections to guest 164# endpoints 165# 166# @guestfwd: forward guest TCP connections 167# 168# @tftp-server-name: RFC2132 "TFTP server name" string (Since 3.1) 169# 170# Since: 1.2 171## 172{ 'struct': 'NetdevUserOptions', 173 'data': { 174 '*hostname': 'str', 175 '*restrict': 'bool', 176 '*ipv4': 'bool', 177 '*ipv6': 'bool', 178 '*ip': 'str', 179 '*net': 'str', 180 '*host': 'str', 181 '*tftp': 'str', 182 '*bootfile': 'str', 183 '*dhcpstart': 'str', 184 '*dns': 'str', 185 '*dnssearch': ['String'], 186 '*domainname': 'str', 187 '*ipv6-prefix': 'str', 188 '*ipv6-prefixlen': 'int', 189 '*ipv6-host': 'str', 190 '*ipv6-dns': 'str', 191 '*smb': 'str', 192 '*smbserver': 'str', 193 '*hostfwd': ['String'], 194 '*guestfwd': ['String'], 195 '*tftp-server-name': 'str' } } 196 197## 198# @NetdevTapOptions: 199# 200# Used to configure a host TAP network interface backend. 201# 202# @ifname: interface name 203# 204# @fd: file descriptor of an already opened tap 205# 206# @fds: multiple file descriptors of already opened multiqueue capable 207# tap 208# 209# @script: script to initialize the interface 210# 211# @downscript: script to shut down the interface 212# 213# @br: bridge name (since 2.8) 214# 215# @helper: command to execute to configure bridge 216# 217# @sndbuf: send buffer limit. Understands [TGMKkb] suffixes. 218# 219# @vnet_hdr: enable the IFF_VNET_HDR flag on the tap interface 220# 221# @vhost: enable vhost-net network accelerator 222# 223# @vhostfd: file descriptor of an already opened vhost net device 224# 225# @vhostfds: file descriptors of multiple already opened vhost net 226# devices 227# 228# @vhostforce: vhost on for non-MSIX virtio guests 229# 230# @queues: number of queues to be created for multiqueue capable tap 231# 232# @poll-us: maximum number of microseconds that could 233# be spent on busy polling for tap (since 2.7) 234# 235# Since: 1.2 236## 237{ 'struct': 'NetdevTapOptions', 238 'data': { 239 '*ifname': 'str', 240 '*fd': 'str', 241 '*fds': 'str', 242 '*script': 'str', 243 '*downscript': 'str', 244 '*br': 'str', 245 '*helper': 'str', 246 '*sndbuf': 'size', 247 '*vnet_hdr': 'bool', 248 '*vhost': 'bool', 249 '*vhostfd': 'str', 250 '*vhostfds': 'str', 251 '*vhostforce': 'bool', 252 '*queues': 'uint32', 253 '*poll-us': 'uint32'} } 254 255## 256# @NetdevSocketOptions: 257# 258# Socket netdevs are used to establish a network connection to another 259# QEMU virtual machine via a TCP socket. 260# 261# @fd: file descriptor of an already opened socket 262# 263# @listen: port number, and optional hostname, to listen on 264# 265# @connect: port number, and optional hostname, to connect to 266# 267# @mcast: UDP multicast address and port number 268# 269# @localaddr: source address and port for multicast and udp packets 270# 271# @udp: UDP unicast address and port number 272# 273# Since: 1.2 274## 275{ 'struct': 'NetdevSocketOptions', 276 'data': { 277 '*fd': 'str', 278 '*listen': 'str', 279 '*connect': 'str', 280 '*mcast': 'str', 281 '*localaddr': 'str', 282 '*udp': 'str' } } 283 284## 285# @NetdevL2TPv3Options: 286# 287# Configure an Ethernet over L2TPv3 tunnel. 288# 289# @src: source address 290# 291# @dst: destination address 292# 293# @srcport: source port - mandatory for udp, optional for ip 294# 295# @dstport: destination port - mandatory for udp, optional for ip 296# 297# @ipv6: force the use of ipv6 298# 299# @udp: use the udp version of l2tpv3 encapsulation 300# 301# @cookie64: use 64 bit coookies 302# 303# @counter: have sequence counter 304# 305# @pincounter: pin sequence counter to zero - 306# workaround for buggy implementations or 307# networks with packet reorder 308# 309# @txcookie: 32 or 64 bit transmit cookie 310# 311# @rxcookie: 32 or 64 bit receive cookie 312# 313# @txsession: 32 bit transmit session 314# 315# @rxsession: 32 bit receive session - if not specified 316# set to the same value as transmit 317# 318# @offset: additional offset - allows the insertion of 319# additional application-specific data before the packet payload 320# 321# Since: 2.1 322## 323{ 'struct': 'NetdevL2TPv3Options', 324 'data': { 325 'src': 'str', 326 'dst': 'str', 327 '*srcport': 'str', 328 '*dstport': 'str', 329 '*ipv6': 'bool', 330 '*udp': 'bool', 331 '*cookie64': 'bool', 332 '*counter': 'bool', 333 '*pincounter': 'bool', 334 '*txcookie': 'uint64', 335 '*rxcookie': 'uint64', 336 'txsession': 'uint32', 337 '*rxsession': 'uint32', 338 '*offset': 'uint32' } } 339 340## 341# @NetdevVdeOptions: 342# 343# Connect to a vde switch running on the host. 344# 345# @sock: socket path 346# 347# @port: port number 348# 349# @group: group owner of socket 350# 351# @mode: permissions for socket 352# 353# Since: 1.2 354## 355{ 'struct': 'NetdevVdeOptions', 356 'data': { 357 '*sock': 'str', 358 '*port': 'uint16', 359 '*group': 'str', 360 '*mode': 'uint16' } } 361 362## 363# @NetdevBridgeOptions: 364# 365# Connect a host TAP network interface to a host bridge device. 366# 367# @br: bridge name 368# 369# @helper: command to execute to configure bridge 370# 371# Since: 1.2 372## 373{ 'struct': 'NetdevBridgeOptions', 374 'data': { 375 '*br': 'str', 376 '*helper': 'str' } } 377 378## 379# @NetdevHubPortOptions: 380# 381# Connect two or more net clients through a software hub. 382# 383# @hubid: hub identifier number 384# @netdev: used to connect hub to a netdev instead of a device (since 2.12) 385# 386# Since: 1.2 387## 388{ 'struct': 'NetdevHubPortOptions', 389 'data': { 390 'hubid': 'int32', 391 '*netdev': 'str' } } 392 393## 394# @NetdevNetmapOptions: 395# 396# Connect a client to a netmap-enabled NIC or to a VALE switch port 397# 398# @ifname: Either the name of an existing network interface supported by 399# netmap, or the name of a VALE port (created on the fly). 400# A VALE port name is in the form 'valeXXX:YYY', where XXX and 401# YYY are non-negative integers. XXX identifies a switch and 402# YYY identifies a port of the switch. VALE ports having the 403# same XXX are therefore connected to the same switch. 404# 405# @devname: path of the netmap device (default: '/dev/netmap'). 406# 407# Since: 2.0 408## 409{ 'struct': 'NetdevNetmapOptions', 410 'data': { 411 'ifname': 'str', 412 '*devname': 'str' } } 413 414## 415# @NetdevVhostUserOptions: 416# 417# Vhost-user network backend 418# 419# @chardev: name of a unix socket chardev 420# 421# @vhostforce: vhost on for non-MSIX virtio guests (default: false). 422# 423# @queues: number of queues to be created for multiqueue vhost-user 424# (default: 1) (Since 2.5) 425# 426# Since: 2.1 427## 428{ 'struct': 'NetdevVhostUserOptions', 429 'data': { 430 'chardev': 'str', 431 '*vhostforce': 'bool', 432 '*queues': 'int' } } 433 434## 435# @NetdevVhostVDPAOptions: 436# 437# Vhost-vdpa network backend 438# 439# vDPA device is a device that uses a datapath which complies with the virtio 440# specifications with a vendor specific control path. 441# 442# @vhostdev: path of vhost-vdpa device 443# (default:'/dev/vhost-vdpa-0') 444# 445# @queues: number of queues to be created for multiqueue vhost-vdpa 446# (default: 1) 447# 448# Since: 5.1 449## 450{ 'struct': 'NetdevVhostVDPAOptions', 451 'data': { 452 '*vhostdev': 'str', 453 '*queues': 'int' } } 454 455## 456# @NetClientDriver: 457# 458# Available netdev drivers. 459# 460# Since: 2.7 461# 462# @vhost-vdpa since 5.1 463## 464{ 'enum': 'NetClientDriver', 465 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 466 'bridge', 'hubport', 'netmap', 'vhost-user', 'vhost-vdpa' ] } 467 468## 469# @Netdev: 470# 471# Captures the configuration of a network device. 472# 473# @id: identifier for monitor commands. 474# 475# @type: Specify the driver used for interpreting remaining arguments. 476# 477# Since: 1.2 478# 479# 'l2tpv3' - since 2.1 480## 481{ 'union': 'Netdev', 482 'base': { 'id': 'str', 'type': 'NetClientDriver' }, 483 'discriminator': 'type', 484 'data': { 485 'nic': 'NetLegacyNicOptions', 486 'user': 'NetdevUserOptions', 487 'tap': 'NetdevTapOptions', 488 'l2tpv3': 'NetdevL2TPv3Options', 489 'socket': 'NetdevSocketOptions', 490 'vde': 'NetdevVdeOptions', 491 'bridge': 'NetdevBridgeOptions', 492 'hubport': 'NetdevHubPortOptions', 493 'netmap': 'NetdevNetmapOptions', 494 'vhost-user': 'NetdevVhostUserOptions', 495 'vhost-vdpa': 'NetdevVhostVDPAOptions' } } 496 497## 498# @RxState: 499# 500# Packets receiving state 501# 502# @normal: filter assigned packets according to the mac-table 503# 504# @none: don't receive any assigned packet 505# 506# @all: receive all assigned packets 507# 508# Since: 1.6 509## 510{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] } 511 512## 513# @RxFilterInfo: 514# 515# Rx-filter information for a NIC. 516# 517# @name: net client name 518# 519# @promiscuous: whether promiscuous mode is enabled 520# 521# @multicast: multicast receive state 522# 523# @unicast: unicast receive state 524# 525# @vlan: vlan receive state (Since 2.0) 526# 527# @broadcast-allowed: whether to receive broadcast 528# 529# @multicast-overflow: multicast table is overflowed or not 530# 531# @unicast-overflow: unicast table is overflowed or not 532# 533# @main-mac: the main macaddr string 534# 535# @vlan-table: a list of active vlan id 536# 537# @unicast-table: a list of unicast macaddr string 538# 539# @multicast-table: a list of multicast macaddr string 540# 541# Since: 1.6 542## 543{ 'struct': 'RxFilterInfo', 544 'data': { 545 'name': 'str', 546 'promiscuous': 'bool', 547 'multicast': 'RxState', 548 'unicast': 'RxState', 549 'vlan': 'RxState', 550 'broadcast-allowed': 'bool', 551 'multicast-overflow': 'bool', 552 'unicast-overflow': 'bool', 553 'main-mac': 'str', 554 'vlan-table': ['int'], 555 'unicast-table': ['str'], 556 'multicast-table': ['str'] }} 557 558## 559# @query-rx-filter: 560# 561# Return rx-filter information for all NICs (or for the given NIC). 562# 563# @name: net client name 564# 565# Returns: list of @RxFilterInfo for all NICs (or for the given NIC). 566# Returns an error if the given @name doesn't exist, or given 567# NIC doesn't support rx-filter querying, or given net client 568# isn't a NIC. 569# 570# Since: 1.6 571# 572# Example: 573# 574# -> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } } 575# <- { "return": [ 576# { 577# "promiscuous": true, 578# "name": "vnet0", 579# "main-mac": "52:54:00:12:34:56", 580# "unicast": "normal", 581# "vlan": "normal", 582# "vlan-table": [ 583# 4, 584# 0 585# ], 586# "unicast-table": [ 587# ], 588# "multicast": "normal", 589# "multicast-overflow": false, 590# "unicast-overflow": false, 591# "multicast-table": [ 592# "01:00:5e:00:00:01", 593# "33:33:00:00:00:01", 594# "33:33:ff:12:34:56" 595# ], 596# "broadcast-allowed": false 597# } 598# ] 599# } 600# 601## 602{ 'command': 'query-rx-filter', 603 'data': { '*name': 'str' }, 604 'returns': ['RxFilterInfo'] } 605 606## 607# @NIC_RX_FILTER_CHANGED: 608# 609# Emitted once until the 'query-rx-filter' command is executed, the first event 610# will always be emitted 611# 612# @name: net client name 613# 614# @path: device path 615# 616# Since: 1.6 617# 618# Example: 619# 620# <- { "event": "NIC_RX_FILTER_CHANGED", 621# "data": { "name": "vnet0", 622# "path": "/machine/peripheral/vnet0/virtio-backend" }, 623# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } } 624# } 625# 626## 627{ 'event': 'NIC_RX_FILTER_CHANGED', 628 'data': { '*name': 'str', 'path': 'str' } } 629 630## 631# @AnnounceParameters: 632# 633# Parameters for self-announce timers 634# 635# @initial: Initial delay (in ms) before sending the first GARP/RARP 636# announcement 637# 638# @max: Maximum delay (in ms) between GARP/RARP announcement packets 639# 640# @rounds: Number of self-announcement attempts 641# 642# @step: Delay increase (in ms) after each self-announcement attempt 643# 644# @interfaces: An optional list of interface names, which restricts the 645# announcement to the listed interfaces. (Since 4.1) 646# 647# @id: A name to be used to identify an instance of announce-timers 648# and to allow it to modified later. Not for use as 649# part of the migration parameters. (Since 4.1) 650# 651# Since: 4.0 652## 653 654{ 'struct': 'AnnounceParameters', 655 'data': { 'initial': 'int', 656 'max': 'int', 657 'rounds': 'int', 658 'step': 'int', 659 '*interfaces': ['str'], 660 '*id' : 'str' } } 661 662## 663# @announce-self: 664# 665# Trigger generation of broadcast RARP frames to update network switches. 666# This can be useful when network bonds fail-over the active slave. 667# 668# Example: 669# 670# -> { "execute": "announce-self", 671# "arguments": { 672# "initial": 50, "max": 550, "rounds": 10, "step": 50, 673# "interfaces": ["vn2", "vn3"], "id": "bob" } } 674# <- { "return": {} } 675# 676# Since: 4.0 677## 678{ 'command': 'announce-self', 'boxed': true, 679 'data' : 'AnnounceParameters'} 680 681## 682# @FAILOVER_NEGOTIATED: 683# 684# Emitted when VIRTIO_NET_F_STANDBY was enabled during feature negotiation. 685# Failover primary devices which were hidden (not hotplugged when requested) 686# before will now be hotplugged by the virtio-net standby device. 687# 688# @device-id: QEMU device id of the unplugged device 689# 690# Since: 4.2 691# 692# Example: 693# 694# <- { "event": "FAILOVER_NEGOTIATED", 695# "data": { "device-id": "net1" }, 696# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } } 697# 698## 699{ 'event': 'FAILOVER_NEGOTIATED', 700 'data': {'device-id': 'str'} } 701