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 cookies 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# @vhostfd: file descriptor of an already opened vhost vdpa device 446# 447# @queues: number of queues to be created for multiqueue vhost-vdpa 448# (default: 1) 449# 450# @x-svq: Start device with (experimental) shadow virtqueue. (Since 7.1) 451# (default: false) 452# 453# Features: 454# @unstable: Member @x-svq is experimental. 455# 456# Since: 5.1 457## 458{ 'struct': 'NetdevVhostVDPAOptions', 459 'data': { 460 '*vhostdev': 'str', 461 '*vhostfd': 'str', 462 '*queues': 'int', 463 '*x-svq': {'type': 'bool', 'features' : [ 'unstable'] } } } 464 465## 466# @NetdevVmnetHostOptions: 467# 468# vmnet (host mode) network backend. 469# 470# Allows the vmnet interface to communicate with other vmnet 471# interfaces that are in host mode and also with the host. 472# 473# @start-address: The starting IPv4 address to use for the interface. 474# Must be in the private IP range (RFC 1918). Must be 475# specified along with @end-address and @subnet-mask. 476# This address is used as the gateway address. The 477# subsequent address up to and including end-address are 478# placed in the DHCP pool. 479# 480# @end-address: The DHCP IPv4 range end address to use for the 481# interface. Must be in the private IP range (RFC 1918). 482# Must be specified along with @start-address and 483# @subnet-mask. 484# 485# @subnet-mask: The IPv4 subnet mask to use on the interface. Must 486# be specified along with @start-address and @subnet-mask. 487# 488# @isolated: Enable isolation for this interface. Interface isolation 489# ensures that vmnet interface is not able to communicate 490# with any other vmnet interfaces. Only communication with 491# host is allowed. Requires at least macOS Big Sur 11.0. 492# 493# @net-uuid: The identifier (UUID) to uniquely identify the isolated 494# network vmnet interface should be added to. If 495# set, no DHCP service is provided for this interface and 496# network communication is allowed only with other interfaces 497# added to this network identified by the UUID. Requires 498# at least macOS Big Sur 11.0. 499# 500# Since: 7.1 501## 502{ 'struct': 'NetdevVmnetHostOptions', 503 'data': { 504 '*start-address': 'str', 505 '*end-address': 'str', 506 '*subnet-mask': 'str', 507 '*isolated': 'bool', 508 '*net-uuid': 'str' }, 509 'if': 'CONFIG_VMNET' } 510 511## 512# @NetdevVmnetSharedOptions: 513# 514# vmnet (shared mode) network backend. 515# 516# Allows traffic originating from the vmnet interface to reach the 517# Internet through a network address translator (NAT). 518# The vmnet interface can communicate with the host and with 519# other shared mode interfaces on the same subnet. If no DHCP 520# settings, subnet mask and IPv6 prefix specified, the interface can 521# communicate with any of other interfaces in shared mode. 522# 523# @start-address: The starting IPv4 address to use for the interface. 524# Must be in the private IP range (RFC 1918). Must be 525# specified along with @end-address and @subnet-mask. 526# This address is used as the gateway address. The 527# subsequent address up to and including end-address are 528# placed in the DHCP pool. 529# 530# @end-address: The DHCP IPv4 range end address to use for the 531# interface. Must be in the private IP range (RFC 1918). 532# Must be specified along with @start-address and @subnet-mask. 533# 534# @subnet-mask: The IPv4 subnet mask to use on the interface. Must 535# be specified along with @start-address and @subnet-mask. 536# 537# @isolated: Enable isolation for this interface. Interface isolation 538# ensures that vmnet interface is not able to communicate 539# with any other vmnet interfaces. Only communication with 540# host is allowed. Requires at least macOS Big Sur 11.0. 541# 542# @nat66-prefix: The IPv6 prefix to use into guest network. Must be a 543# unique local address i.e. start with fd00::/8 and have 544# length of 64. 545# 546# Since: 7.1 547## 548{ 'struct': 'NetdevVmnetSharedOptions', 549 'data': { 550 '*start-address': 'str', 551 '*end-address': 'str', 552 '*subnet-mask': 'str', 553 '*isolated': 'bool', 554 '*nat66-prefix': 'str' }, 555 'if': 'CONFIG_VMNET' } 556 557## 558# @NetdevVmnetBridgedOptions: 559# 560# vmnet (bridged mode) network backend. 561# 562# Bridges the vmnet interface with a physical network interface. 563# 564# @ifname: The name of the physical interface to be bridged. 565# 566# @isolated: Enable isolation for this interface. Interface isolation 567# ensures that vmnet interface is not able to communicate 568# with any other vmnet interfaces. Only communication with 569# host is allowed. Requires at least macOS Big Sur 11.0. 570# 571# Since: 7.1 572## 573{ 'struct': 'NetdevVmnetBridgedOptions', 574 'data': { 575 'ifname': 'str', 576 '*isolated': 'bool' }, 577 'if': 'CONFIG_VMNET' } 578 579## 580# @NetClientDriver: 581# 582# Available netdev drivers. 583# 584# Since: 2.7 585# 586# @vhost-vdpa since 5.1 587# @vmnet-host since 7.1 588# @vmnet-shared since 7.1 589# @vmnet-bridged since 7.1 590## 591{ 'enum': 'NetClientDriver', 592 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 593 'bridge', 'hubport', 'netmap', 'vhost-user', 'vhost-vdpa', 594 { 'name': 'vmnet-host', 'if': 'CONFIG_VMNET' }, 595 { 'name': 'vmnet-shared', 'if': 'CONFIG_VMNET' }, 596 { 'name': 'vmnet-bridged', 'if': 'CONFIG_VMNET' }] } 597 598## 599# @Netdev: 600# 601# Captures the configuration of a network device. 602# 603# @id: identifier for monitor commands. 604# 605# @type: Specify the driver used for interpreting remaining arguments. 606# 607# Since: 1.2 608# 609# 'l2tpv3' - since 2.1 610# 'vmnet-host' - since 7.1 611# 'vmnet-shared' - since 7.1 612# 'vmnet-bridged' - since 7.1 613## 614{ 'union': 'Netdev', 615 'base': { 'id': 'str', 'type': 'NetClientDriver' }, 616 'discriminator': 'type', 617 'data': { 618 'nic': 'NetLegacyNicOptions', 619 'user': 'NetdevUserOptions', 620 'tap': 'NetdevTapOptions', 621 'l2tpv3': 'NetdevL2TPv3Options', 622 'socket': 'NetdevSocketOptions', 623 'vde': 'NetdevVdeOptions', 624 'bridge': 'NetdevBridgeOptions', 625 'hubport': 'NetdevHubPortOptions', 626 'netmap': 'NetdevNetmapOptions', 627 'vhost-user': 'NetdevVhostUserOptions', 628 'vhost-vdpa': 'NetdevVhostVDPAOptions', 629 'vmnet-host': { 'type': 'NetdevVmnetHostOptions', 630 'if': 'CONFIG_VMNET' }, 631 'vmnet-shared': { 'type': 'NetdevVmnetSharedOptions', 632 'if': 'CONFIG_VMNET' }, 633 'vmnet-bridged': { 'type': 'NetdevVmnetBridgedOptions', 634 'if': 'CONFIG_VMNET' } } } 635 636## 637# @RxState: 638# 639# Packets receiving state 640# 641# @normal: filter assigned packets according to the mac-table 642# 643# @none: don't receive any assigned packet 644# 645# @all: receive all assigned packets 646# 647# Since: 1.6 648## 649{ 'enum': 'RxState', 'data': [ 'normal', 'none', 'all' ] } 650 651## 652# @RxFilterInfo: 653# 654# Rx-filter information for a NIC. 655# 656# @name: net client name 657# 658# @promiscuous: whether promiscuous mode is enabled 659# 660# @multicast: multicast receive state 661# 662# @unicast: unicast receive state 663# 664# @vlan: vlan receive state (Since 2.0) 665# 666# @broadcast-allowed: whether to receive broadcast 667# 668# @multicast-overflow: multicast table is overflowed or not 669# 670# @unicast-overflow: unicast table is overflowed or not 671# 672# @main-mac: the main macaddr string 673# 674# @vlan-table: a list of active vlan id 675# 676# @unicast-table: a list of unicast macaddr string 677# 678# @multicast-table: a list of multicast macaddr string 679# 680# Since: 1.6 681## 682{ 'struct': 'RxFilterInfo', 683 'data': { 684 'name': 'str', 685 'promiscuous': 'bool', 686 'multicast': 'RxState', 687 'unicast': 'RxState', 688 'vlan': 'RxState', 689 'broadcast-allowed': 'bool', 690 'multicast-overflow': 'bool', 691 'unicast-overflow': 'bool', 692 'main-mac': 'str', 693 'vlan-table': ['int'], 694 'unicast-table': ['str'], 695 'multicast-table': ['str'] }} 696 697## 698# @query-rx-filter: 699# 700# Return rx-filter information for all NICs (or for the given NIC). 701# 702# @name: net client name 703# 704# Returns: list of @RxFilterInfo for all NICs (or for the given NIC). 705# Returns an error if the given @name doesn't exist, or given 706# NIC doesn't support rx-filter querying, or given net client 707# isn't a NIC. 708# 709# Since: 1.6 710# 711# Example: 712# 713# -> { "execute": "query-rx-filter", "arguments": { "name": "vnet0" } } 714# <- { "return": [ 715# { 716# "promiscuous": true, 717# "name": "vnet0", 718# "main-mac": "52:54:00:12:34:56", 719# "unicast": "normal", 720# "vlan": "normal", 721# "vlan-table": [ 722# 4, 723# 0 724# ], 725# "unicast-table": [ 726# ], 727# "multicast": "normal", 728# "multicast-overflow": false, 729# "unicast-overflow": false, 730# "multicast-table": [ 731# "01:00:5e:00:00:01", 732# "33:33:00:00:00:01", 733# "33:33:ff:12:34:56" 734# ], 735# "broadcast-allowed": false 736# } 737# ] 738# } 739# 740## 741{ 'command': 'query-rx-filter', 742 'data': { '*name': 'str' }, 743 'returns': ['RxFilterInfo'] } 744 745## 746# @NIC_RX_FILTER_CHANGED: 747# 748# Emitted once until the 'query-rx-filter' command is executed, the first event 749# will always be emitted 750# 751# @name: net client name 752# 753# @path: device path 754# 755# Since: 1.6 756# 757# Example: 758# 759# <- { "event": "NIC_RX_FILTER_CHANGED", 760# "data": { "name": "vnet0", 761# "path": "/machine/peripheral/vnet0/virtio-backend" }, 762# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } } 763# 764## 765{ 'event': 'NIC_RX_FILTER_CHANGED', 766 'data': { '*name': 'str', 'path': 'str' } } 767 768## 769# @AnnounceParameters: 770# 771# Parameters for self-announce timers 772# 773# @initial: Initial delay (in ms) before sending the first GARP/RARP 774# announcement 775# 776# @max: Maximum delay (in ms) between GARP/RARP announcement packets 777# 778# @rounds: Number of self-announcement attempts 779# 780# @step: Delay increase (in ms) after each self-announcement attempt 781# 782# @interfaces: An optional list of interface names, which restricts the 783# announcement to the listed interfaces. (Since 4.1) 784# 785# @id: A name to be used to identify an instance of announce-timers 786# and to allow it to modified later. Not for use as 787# part of the migration parameters. (Since 4.1) 788# 789# Since: 4.0 790## 791 792{ 'struct': 'AnnounceParameters', 793 'data': { 'initial': 'int', 794 'max': 'int', 795 'rounds': 'int', 796 'step': 'int', 797 '*interfaces': ['str'], 798 '*id' : 'str' } } 799 800## 801# @announce-self: 802# 803# Trigger generation of broadcast RARP frames to update network switches. 804# This can be useful when network bonds fail-over the active slave. 805# 806# Example: 807# 808# -> { "execute": "announce-self", 809# "arguments": { 810# "initial": 50, "max": 550, "rounds": 10, "step": 50, 811# "interfaces": ["vn2", "vn3"], "id": "bob" } } 812# <- { "return": {} } 813# 814# Since: 4.0 815## 816{ 'command': 'announce-self', 'boxed': true, 817 'data' : 'AnnounceParameters'} 818 819## 820# @FAILOVER_NEGOTIATED: 821# 822# Emitted when VIRTIO_NET_F_STANDBY was enabled during feature negotiation. 823# Failover primary devices which were hidden (not hotplugged when requested) 824# before will now be hotplugged by the virtio-net standby device. 825# 826# @device-id: QEMU device id of the unplugged device 827# 828# Since: 4.2 829# 830# Example: 831# 832# <- { "event": "FAILOVER_NEGOTIATED", 833# "data": { "device-id": "net1" }, 834# "timestamp": { "seconds": 1368697518, "microseconds": 326866 } } 835# 836## 837{ 'event': 'FAILOVER_NEGOTIATED', 838 'data': {'device-id': 'str'} } 839